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: ...
随机推荐
- Oracle怎么用(常用工具)
Oracle数据库管理系统装好了!那要怎么用呢? 将介绍的工具:①Database Configuration Assistant ②SQL Plus ③SQL Developer 一.Dat ...
- YAML/Properties配置文件与Spring Boot(转)
多年来,Java开发人员依赖于属性文件或xml文件来指定应用程序配置.在企业应用程序中,人们可以为每个环境(如开发,分段和生产)创建单独的文件,以定义相应环境的属性.但是,通过Spring引导,我们可 ...
- ssh2项目整合 struts2.1+hibernate3.3+spring3 基于hibernate注解和struts2注解
项目文件夹结构例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW9uZ3poaWFu/font/5a6L5L2T/fontsize/400/fi ...
- JavaWeb开发环境搭建
Tomcat 的主要配置 Tomcat:tomcat是实现了一个JavaEE标准的最小的Webserver,是Apche组织开发的,免费的server,能够在网络中直接下载. 最新的版本号应该是8的版 ...
- C#邮件发送(含附件)
class SendEmail { static void Main(string[] args) { string from = "发件人@yingu.com"; string ...
- Mongo使用
在用mongo进行查询时,$exists表示是否document是否包括这个field,即使field的value为null也算是包括. $exists Syntax: { field: { $exi ...
- LeetCode 387. First Unique Character in a String (字符串中的第一个唯一字符)
题目标签:String, HashMap 题目给了我们一个 string,让我们找出 第一个 唯一的 char. 设立一个 hashmap,把 char 当作 key,char 的index 当作va ...
- 【OI】向量&矩阵乘法
何为向量? 在初中课本中,我们知道: 向量是有大小和方向的量. 这样解释太笼统了,现在我们只讨论平面上的向量. 那么,我们约定:在平面上的向量,由一个二元组组成:如α(c1,c2). 在此平面上建立一 ...
- UVA 1476 - Error Curves(三分法)
UVA 1476 1476 - Error Curves 题目链接 题意:给几条下凹二次函数曲线.然后问[0,1000]全部位置中,每一个位置的值为曲线中最大值的值,问全部位置的最小值是多少 思路:三 ...
- .NET连接数据库实例
.NET连接数据库实例 keleyi.com 柯乐义 本实例实现了从MSSQL 2005数据库读取数据并显示在页面上的功能.在Visual Studio 2010上测试成功.源代码下载:http:// ...