数据库学习纪要(二十六):MySQL-6-子查询
来源:互联网 发布:南方易学软件 编辑:程序博客网 时间:2024/05/01 08:00
八、子查询
SELECT mc.first_name, mc.last_name, mc.phone, jc.title FROM job_current AS jc NATURAL JOIN my_contacts AS mc
WHERE jc.title IN (SELECT title FROM job_listings);
子查询和联接对比:
SELECT last_name, first_name FROM my_contacts
WHERE zip_code = (SELECT zip_code FROM zip_code WHERE city = 'Memphis' AND state = 'TN');
SELECT last_name, first_name FROM my_contacts mc
NATURAL JOIN zip_code zc
WHERE zc.city = 'Memphis'
AND zc.state = 'TN';
SELECT mc.first_name, mc.last_name, jc.salary
FROM my_contacts AS mc NATURAL JOIN job_current AS jc
WHERE jc.salary = (SELECT MAX(jc.salary) FROM job_current jc);
子查询搭配自然联接
SELECT mc.first_name, mc.last_name, jc.salary FROM my_contacts AS mc NATURAL JOIN job_current AS jc
WHERE jc.salary > (SELECT jc.salary FROM my_contacts mc NATURAL JOIN job_current jc
WHERE email = 'andy@weather.com');
//第一个FROM用于获得姓名和薪资
//WHERE jc.salary > 用于查询薪资高于Andy的人
//括号里的子查询语句用于获取Andy的薪资
注:如果子查询可以独立运行且不会引用外层查询的任何结果,即称为非关联子查询
关联子查询
SELECT mc.first_name, mc.last_name FROM my_contacts AS mc
WHERE 3 = (SELECT COUNT(*) FROM contact_interest WHERE contact_id = mc.contact_id);
//本例的子查询中使用了别名(关联名称)mc,是在外层查询中创建的
搭配NOT EXISTS的关联子查询
SELECT mc.first_name firstname, mc.last_name lastname, mc.email email FROM my_contacts mc
WHERE NOT EXISTS
(SELECT * FROM job_current jc WHERE mc.contact_id = jc.contact_id);
//NOT EXISTS:负责从my_contacts表找出姓名何电子邮件地址,他们都未列在job_currnet表中
//若改为EXISTS:负责从my_contacts表找出姓名何电子邮件地址,们都在job_currnet表中
SELECT mc.email FROM my_contacts mc
WHERE
EXISTS
(SELECT * FROM contact_interest ci WHERE mc.contact_id = ci.contact_id)
AND
NOT EXISTS
(SELECT * FROM job_current jc WHERE mc.contact_id = jc.contact_id);
SELECT mc.first_name, mc.last_name, mc.phone, jc.title FROM job_current AS jc NATURAL JOIN my_contacts AS mc
WHERE jc.title IN (SELECT title FROM job_listings);
子查询和联接对比:
SELECT last_name, first_name FROM my_contacts
WHERE zip_code = (SELECT zip_code FROM zip_code WHERE city = 'Memphis' AND state = 'TN');
SELECT last_name, first_name FROM my_contacts mc
NATURAL JOIN zip_code zc
WHERE zc.city = 'Memphis'
AND zc.state = 'TN';
SELECT mc.first_name, mc.last_name, jc.salary
FROM my_contacts AS mc NATURAL JOIN job_current AS jc
WHERE jc.salary = (SELECT MAX(jc.salary) FROM job_current jc);
子查询搭配自然联接
SELECT mc.first_name, mc.last_name, jc.salary FROM my_contacts AS mc NATURAL JOIN job_current AS jc
WHERE jc.salary > (SELECT jc.salary FROM my_contacts mc NATURAL JOIN job_current jc
WHERE email = 'andy@weather.com');
//第一个FROM用于获得姓名和薪资
//WHERE jc.salary > 用于查询薪资高于Andy的人
//括号里的子查询语句用于获取Andy的薪资
注:如果子查询可以独立运行且不会引用外层查询的任何结果,即称为非关联子查询
关联子查询
SELECT mc.first_name, mc.last_name FROM my_contacts AS mc
WHERE 3 = (SELECT COUNT(*) FROM contact_interest WHERE contact_id = mc.contact_id);
//本例的子查询中使用了别名(关联名称)mc,是在外层查询中创建的
搭配NOT EXISTS的关联子查询
SELECT mc.first_name firstname, mc.last_name lastname, mc.email email FROM my_contacts mc
WHERE NOT EXISTS
(SELECT * FROM job_current jc WHERE mc.contact_id = jc.contact_id);
//NOT EXISTS:负责从my_contacts表找出姓名何电子邮件地址,他们都未列在job_currnet表中
//若改为EXISTS:负责从my_contacts表找出姓名何电子邮件地址,们都在job_currnet表中
SELECT mc.email FROM my_contacts mc
WHERE
EXISTS
(SELECT * FROM contact_interest ci WHERE mc.contact_id = ci.contact_id)
AND
NOT EXISTS
(SELECT * FROM job_current jc WHERE mc.contact_id = jc.contact_id);
阅读全文
0 0
- 数据库学习纪要(二十六):MySQL-6-子查询
- 数据库学习纪要(十六):SQL Sever介绍-6
- 数据库学习纪要(二十):MySQL简介-4
- 数据库学习纪要(二十三):MySQL-3-SELECT
- 数据库学习纪要(二十四):MySQL-4-ALTER语句
- 数据库学习纪要(二):hive-2
- 数据库学习纪要(二十一):MySQL创建数据库、表,及导入CSV文件数据1
- 数据库学习纪要(二十二):MySQL创建数据库、表,及导入CSV文件数据2
- 数据库学习纪要(二十五):MySQL-5-扩展你的表
- 数据库学习纪要(二十七):MySQL-7-外联接、自联接与联合
- 数据库学习纪要(二十八):MySQL-8-部分数据函数
- 数据库学习纪要(十七):MySQL简介-1
- 数据库学习纪要(十八):MySQL简介-2
- 数据库学习纪要(十九):MySQL简介-3
- mysql 学习记录(二十六)--mysql数据库的备份与恢复
- MySQL学习15:子查询(二)
- 数据库MySQL-----------子查询
- MySQL数据库学习09-查询数据:子查询
- 数列求和
- Linux系统的服务控制
- 关于计数 dp 中 n 的 m 划分的理解
- Oracle的32位ODBC驱动
- 浅谈JAVA抽象类及接口
- 数据库学习纪要(二十六):MySQL-6-子查询
- 一元多项式方程求导的方法
- Aspose 导出Excel
- jdk1.9安装包
- C#编码规范
- leetcode--Reorder List
- dos命令:del 目录名
- 水仙花数
- qcow2转vmdk后,windows系统蓝屏解决方法