MySQL 07章_子查询
子查询就是查询中还可以嵌套其他的查询,通常是内层查询的结果作为外层查询的条件来使用
执行循序,自内向外依次执行
一、内层查询返回“单列单行”的结果
-- 1、查询宋江的出生日期
SELECT TIMESTAMPDIFF(year,birthday,NOW()) FROM tb_student WHERE student_name = "宋江";
-- 2、再使用宋江的出生日期作为条件执行查询
SELECT * FROM tb_student WHERE TIMESTAMPDIFF(year,birthday,NOW()) <(
SELECT TIMESTAMPDIFF(year,birthday,NOW()) FROM tb_student WHERE student_name = "宋江"
); 二、内层查询返回“单列多行”的结果
需要使用IN、NOT IN、ANY、ALL关键字在外层查询中进行比较,执行外层查询
-- 子查询中使用IN关键字:外层查询的字段值是否包含在内层查询返回的结果中,若是返回true,反之返回false。
-- 查询java、HTML的成绩信息
SELECT sj.subject_name,sc.* FROM tb_score sc INNER JOIN tb_subject sj
WHERE sc.subject_id =sj.subject_id
AND sj.subject_name IN("java","html"); -- 使用subject_name作为条件查询对应的subject_id
SELECT subject_id FROM tb_subject WHERE subject_name IN("java","html");
-- 再使用subject_id作为外层查询的条件查询成绩信息
SELECT sj.subject_name,sc.* FROM tb_score sc,tb_subject sj
WHERE sc.subject_id = sj.subject_id AND sc.subject_id IN(
SELECT subject_id FROM tb_subject WHERE subject_name IN("java","html")
); -- NOT IN
-- 查询java和HTML以外 的其他课程的成绩信息
SELECT sj.subject_name,sc.* FROM tb_score sc,tb_subject sj
WHERE sc.subject_id = sj.subject_id AND sc.subject_id IN(
SELECT subject_id FROM tb_subject WHERE subject_name NOT IN("java","html")
); -- 查询比JavaScript中所有成绩都高的其他课程的成绩信息
-- 1、查询JavaScript课程的subject_id
SELECT subject_id FROM tb_subject WHERE subject_name = "javascript"; -- 2、使用subject_id作为条件查询对应的所有成绩
SELECT student_score FROM tb_score WHERE subject_id IN(
SELECT subject_id FROM tb_subject WHERE subject_name = "javascript"
); -- 3、再使用JavaScript课程的所有成绩与外层的成绩进行比较
SELECT * FROM tb_score WHERE student_score > ALL(
SELECT student_score FROM tb_score WHERE subject_id IN(
SELECT subject_id FROM tb_subject WHERE subject_name = "javascript"
)
); SELECT * FROM tb_score WHERE student_score > ANY(
SELECT student_score FROM tb_score WHERE subject_id IN(
SELECT subject_id FROM tb_subject WHERE subject_name = "javascript"
)
)ORDER BY student_score; 三、内层查询返回“多列单行”的结果
多列的结果要与外层查询对应的多个字段同时进行比较,才认为是满足条件
-- 针对tb_emp表查询与史密斯的部门编号和岗位都相同的其他人员信息
SELECT DEPTNO ,JOB FROM tb_emp WHERE ENAME = "smith";
以下两种方法都可以
SELECT * FROM tb_emp WHERE( DEPTNO =(
SELECT DEPTNO FROM tb_emp WHERE ENAME = "smith") AND JOB=(
SELECT JOB FROM tb_emp WHERE ENAME = "smith")AND ENAME <> "smith"
); SELECT * FROM tb_emp WHERE (DEPTNO,JOB) = (SELECT DEPTNO,JOB FROM tb_emp WHERE ENAME = "smith") AND ENAME <> "smith";
四、内层查询返回“多列多行”的结果
当内层查询返回的结果是“多列多行”或以下范围的值时,外层查询可以使用exists关键字判断内层查询是否或(没有)数据返回。
使用EXISTS关键字:内层查询若有数据返回则为true,否则false
SELECT ge.grade_name,st.* FROM tb_student st,tb_grade ge
WHERE EXISTS (
SELECT * FROM tb_grade WHERE grade_name IN ('二年级','三年级')) AND
st.grade_id = ge.grade_id AND ge.grade_name IN ('二年级','三年级'
); 子查询中使用NOT EXISTS关键字:与exists相反
MySQL 07章_子查询的更多相关文章
- mysql 06章_分组查询和链接查询
一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...
- MySQL 05章_模糊查询和聚合函数
在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...
- mysql update不支持子查询更新
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
- SQL基本查询_子查询(实验四)
SQL基本查询_子查询(实验四) 1.查询所有员工中薪水低于"孙军"的员工姓名和薪水: 2.查询与部门编号为"01"的岗位相同的员工姓名.岗位.薪水及部门号: ...
- Oracle学习总结_day03_day04_条件查询_排序_函数_子查询
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- MySQL 使用JOIN优化子查询
1.数据准备 mysql> select * from student; +----+--------+----------+---------+-------------+ | id | na ...
- mysql sql_safe_updates 不支持子查询的更新。
考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update.delete. 结果有一天开发发现下面的一个SQL 没 ...
- php+mysql 内联接 和 子查询
INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录 $sql="SELECT * FROM subject as a INNER JOIN e_user as b ON a. ...
随机推荐
- win 解除鼠标右键关联
点击「开始」→「运行」→「输入Regedit」→「确定」,打开注册表编辑器,找到子键: 「HKEY_CLASSES_ROOT\*\shellex\UltroEdit」,删除此项即可:
- Dubbo入门到精通学习笔记(十一):Dubbo服务启动依赖检查、Dubbo负载均衡策略、Dubbo线程模型(结合Linux线程数限制配置的实战分享)
文章目录 Dubbo服务启动依赖检查 Dubbo负载均衡策略 Dubbo线程模型(结合Linux线程数限制配置的实战分享) 实战经验分享( ** 属用性能调优**): Dubbo服务启动依赖检查 Du ...
- 19、Page Object 实例
项目目录介绍: CalcuatorPage.java文件代码: package example; import io.appium.java_client.android.AndroidDriver; ...
- Mysql DBA
1 mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_co ...
- EM相关两个算法 k-mean算法和混合高斯模型
转自http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html http://www.cnblogs.com/jerrylead/ ...
- VUE 中 使用 iview Form组件 enter键防止页面刷新
<Form :label-width="100" inline label-position='left' @keydown.native.enter.prevent =&q ...
- 前端 Java Python等资源合集大放送
如果需要学习视频,欢迎关注[JAVA乐园]微信公众号,回复[领取资源]菜单一键领取以下所有200G干货资源,获取更多有用技术干货.文档资料.所有文档会持续更新,欢迎关注一起成长! 1.vue全套 Vu ...
- JS点击2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CompletionService:批量执行异步任务
之前有去了解CompletionService,当时没有做记录,现在再想使用却发现忘记了,果然好记性不如烂笔头. 原文比较简洁,通俗易懂. 转载-原文链接: https://segmentfault. ...
- 标准 I/O (带缓冲)
标准IO中分文本流和二进制流 windows系统中:(1) 二进制流 - 换行符 '\n' (2) 文本流 - 换行符 ‘\r' '\n' linux 系统中:不区分文本流和二进制流:换行符 - ...