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. ...
随机推荐
- Linux初始化的汇编代码
1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局. 1: /* 2: * setup.ld 3: * 4: * Linker script ...
- 机器学习技法笔记:Homework #7 Decision Tree&Random Forest相关习题
原文地址:https://www.jianshu.com/p/7ff6fd6fc99f 问题描述 程序实现 13-15 # coding:utf-8 # decision_tree.py import ...
- MySQL数据库(三)—— 表相关操作(二)之约束条件、关联关系、复制表
表相关操作(二)之约束条件.关联关系.复制表 一.约束条件 1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL # ...
- CDH6.1.0离线安装——笔记
一. 概述 该文档主要记录大数据平台的搭建CDH版的部署过程,以供后续部署环境提供技术参考. 1.1 主流大数据部署方法 目前主流的hadoop平台部署方法主要有以下三种: Apache hadoop ...
- 长度为x的本质不同的串的出现次数 SPOJ - NSUBSTR 后缀自动机简单应用
题意: 长度为x的本质不同的串的出现次数 题解: 先处理出每一个节点所对应的子串出现的次数 然后取max就好了 #include <set> #include <map> #i ...
- AVR446步进电机算法推导及应用
https://blog.csdn.net/Renjiankun/article/details/80513839?utm_source=copy
- ES6解构
解构:“解开--重构” 1.数组的解构: //数组的解构: // let arr=[1,2,3,6] // let[a,b,c,d]=arr; // console.log(a,b,c,d)// 1, ...
- matplotlib.pyplot 属性用法
import matplotlib.pyplot as plt x_values = list(range(1, 1001)) y_values = [x**2 for x in x_values] ...
- netstat -pa --unix >>test.txt
netstat -pa --unix >>test.txt 输出套接字 命名socket信息
- 深度探索C++对象模型之第三章:数据语义学
如下三个类: class X { }: class Y :public virtual X { }; class Z : public virtual X {}; class A :public Y, ...