mysql_数据查询_嵌套查询
嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块。
嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或者HAVING短语的条件中的查询。
注:子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。
1.带有IN谓词的子查询:
子查询往往是一个集合。
查询与jason在同一个系的学生:
SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN
(SELECT Sdept FROM Student WHERE Sname='jason');
子查询的查询条件不依赖于父查询,成称为不相关子查询。
子查询的查询条件依赖于父查询,成称为相关子查询。
查询选修了DB_Design的学生学好和姓名。
SELECT Sno,Sname FROM Student WHERE Sno IN
(SELECT Sno FROM SC WHERE Cno IN
(SELECT Cno FROM Course WHERE Cname='DB_Design')
);
2.带有比较运算符的子查询:
当用户确切知道内层查询返回的是单个值时,可以用>、<、=、>=、<=、!=(<>)等比较运算符。
SELECT Sno,Sname,Sdept FROM Student WHERE Sdept=
(SELECT Sdept FROM Student WHERE Sname='jason');
SELECT Sno,Cno FROM SC x WHERE Grade>=
(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno); (相关子查询)
3.带有ANY(SOME)或ALL谓词的子查询:
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。使用ANY或ALL也必须同时使用比较运算符。
>ANY : 大于子查询结果中的某个值
>ALL : 大于子查询结果中的所有值
=ANY : 等于子查询结果中的某个值
查询非计算机系中比计算机系任意一个学生年龄小的学生姓名和年龄。
SELECT Sname,Sage FROM Student
WHERE Sage<ANY(SELECT Sage FROM Student WHERE Sdept='CS') AND Sdept!='CS';
可使用聚集函数,且效率更高:
SELECT Sname,Sage FROM Student
WHERE Sage<
(SELECT MAX(Sage) FROM Student WHERE Sdept='CS')
AND Sdept!='CS';
4.带有EXISTS谓词的子查询:
EXISTS代表存在量词∃。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑值true或者false。
查询所有选修了1001课程的学生姓名。
SELECT Sname FROM Student WHERE EXISTS
(SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Cno='1001');
查询没有选修1001课程的学生姓名。
SELECT Sname FROM Student WHERE NOT EXISTS
(SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Cno='1001');
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询代替,但所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用到EXISTS谓词的子查询代替。
SQL中没有全称量词,全称量词用存在量词表示。
●查询选修了全部课程的学生姓名。(有点绕)
SELECT Sname FROM Student WHERE NOT EXISTS(
SELECT * FROM Course WHERE NOT EXISTS(
SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Course.Cno=Sc.Cno));
SQL中没有蕴含逻辑运算 p→q=¬p∨q
●查询至少选修了学生2016002选修的全部课程的学生号码。
SELECT DISTINCT Sno FROM SC SCX WHERE NOT EXISTS(
SELECT * FROM SC SCY WHERE SCY.Sno='2016002' AND NOT EXISTS (
SELECT * FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));
mysql_数据查询_嵌套查询的更多相关文章
- SQL数据查询之——嵌套查询
一.概念描述 在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块.将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询.例如: ...
- mybatis 关联查询和嵌套查询的简单示例
两个表: Customer 顾客表 create table if not exists customer( customer_id int primary key auto_increment, f ...
- SQL基本查询_子查询(实验四)
SQL基本查询_子查询(实验四) 1.查询所有员工中薪水低于"孙军"的员工姓名和薪水: 2.查询与部门编号为"01"的岗位相同的员工姓名.岗位.薪水及部门号: ...
- SQL Server 之 子查询与嵌套查询
当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用 ...
- SQL基础--查询之三--嵌套查询
SQL基础--查询之三--嵌套查询
- 多表查询_子查询概述和多表查询_子查询情况1&情况2&情况3
子查询 概念:查询中嵌套查询,称嵌套查询为子查询 -- 查询工资最高的员工信息 -- 1.查询最高的工资是多少 9000 select max(salary) from emp; -- 查询员工信息, ...
- 数据库开发基础-SQl Server 主键、外键、子查询(嵌套查询)
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- mybatis的嵌套查询(嵌套查询nested select和嵌套结果nested results查询)区别
(转自:http://blog.csdn.net/canot/article/details/51485955) Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-man ...
- Oracle子查询(嵌套查询)
概念: 所谓子查询,即一个select语句中嵌套了另外的一个或者多个select语句 需求:查找和Smith同部门的所有员工的id和last_name 目标: 员工id,last_name from: ...
随机推荐
- ZOJ 题目2859 Matrix Searching(二维RMQ)
Matrix Searching Time Limit: 10 Seconds Memory Limit: 32768 KB Given an n*n matrix A, whose ent ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq (线段树乘法加法的混合操作)
题目:点击打开链接 大意:一个数组.三个操作.第一种是区间[a,b]每一个数乘乘,另外一种是区间[a,b]每一个数加c,第三种是查询[a,b]区间的和并对p取摸. 两种操作就不能简单的仅仅往下传 ...
- 虚拟化(二):虚拟化及vmware workstation产品使用
虚拟化(一):虚拟化及vmware产品介绍 vmware workstation的最新版本号是10.0.2. 相信大家也都使用过,当中的简单的虚拟机的创建.删除等,都非常easy.这里就不再具体说明了 ...
- LeetCode 203. Remove Linked List Elements (移除链表中的项)
Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...
- Linux安装MATLAB
Linux下的MATLAB在2013a及以后的版本中,就不再支持32位机了.所以32位Linux系统无法安装2013a及以后版本.[1] Linux下安装MATLAB时,需要先配置好JRE,可以参考: ...
- debian网络静态ip配置
本配置适合于服务器上的静态ip配置,该方法简单可靠. 1 临时配置 ifconfig eth0 192.168.1.97 netmask 255.255.255.0 broadcast 192.168 ...
- JMeter常用函数 使用图解
函数的调用都是以${__function()}这种形式开始的注意:“__”是两个英文下划线 __UUID 生成唯一字符串
- regEx in Groovy
// 使用正则 得到非纯XML文件中的信息 // Response 经常得到的不是纯XML def pattern = ~/(<NewDataSet>).*(<\/NewDataSe ...
- Android之利用EventBus进行数据传递
在项目中,不可避免的要在两个页面之间进行数据的传递,就算不传递,也需要进行刷新之类的,我们根据Google提供的库类方法,也是可以做的,主要有广播broadcastreceiver,startacti ...
- 洛谷 P1498 南蛮图腾 —— 模拟
题目:https://www.luogu.org/problemnew/show/P1498 大约一年前该做的题...现在来填一下坑: 然而不怎么会模拟!还滚去看TJ了: 就是翻倍复制: \ 这个符号 ...