-
2021-01-14 09:39:12
说到嵌套查询,首先得理解嵌套查询是什么意思,简单来说就是,一个查询语句可以嵌套在另外一个查询语句的where子句中。外层的查询称为父查询(主查询),内层的查询称为子查询(从查询)。
嵌套查询的工作方式是由内向外的,即先进行内层查询,外层查询则利用内层查询的结果集作为条件进行查询。当然,嵌套查询不仅仅是select语句的专属,它还可以用在update、insert、delete语句中。如(update tablea A set A.userid = (select id from tableb where id = A.userid)),废话不多说,下面介绍记账常用的子查询。
(1)简单子查询
SELECT user_name FROM sys_user WHERE age > ( SELECT age FROM sys_user WHERE user_id = '1001' ),这句语句的意思是,从sys_user表查出年龄比user_id为1001的user_name
(2) IN嵌套查询
SELECT user_name FROM sys_user WHERE city_id IN ( SELECT city_id FROM city WHERE city_name = '广州' ), in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。
(3 )exists嵌套查询
SELECT * FRO sys_user WHERE EXISTS (SELECT * FROM sys_user WHER user_id = '1001'), exists表示存在,它只查找满足条件的记录
更多相关内容 -
SQL嵌套查询总结
2020-09-14 14:27:09是我写的一个结合UINON的嵌套查询. 将五个方面的报表放到一个临时表里,再从临时表里,将所要的数据查询出来. -
sql嵌套查询
2021-10-08 14:27:40bookshop查询 1、在sales表中查找出销售金额最高的订单(订单号,销售金额,订购日期) SELECT order_no AS 订单号, total_amt AS 销售金额, order_date AS 订购日期 FROM sales WHERE total_amt = ( SELECT ...bookshop查询
1、在sales表中查找出销售金额最高的订单(订单号,销售金额,订购日期)
SELECT order_no AS 订单号, total_amt AS 销售金额, order_date AS 订购日期 FROM sales WHERE total_amt = ( SELECT MAX(total_amt) FROM sales )
2、由sales表中查找出订单金额大于“E0016业务员所接任一张订单的金额”的所有订单,
并显示承接这些订单的业务员和该订单的金额SELECT sale_id AS 业务员编号, order_no AS 订单编号, total_amt AS 订单金额 FROM sales WHERE total_amt >any ( SELECT total_amt FROM sales B WHERE sale_id='E0016' ) AND sale_id<>'E0016'/*<>是不等于*/ --或者 SELECT sale_id AS 业务员编号, order_no AS 订单编号, total_amt AS 订单金额 FROM sales WHERE total_amt > ( SELECT min(total_amt) FROM sales B WHERE sale_id='E0016' ) AND sale_id<>'E0016'
3、找出公司女业务员所接的订单
SELECT * FROM sales WHERE sale_id in ( SELECT emp_no FROM employee WHERE sex = '女' AND dept = '业务' )
4、找出目前业绩未超过300元的员工编号和姓名
SELECT emp_no AS 员工编号, emp_name AS 姓名 FROM employee WHERE emp_no not IN ( SELECT sale_id FROM sales GROUP BY sale_id HAVING SUM(total_amt) >= 300 )
5、在销售主表sales中查询销售业绩最高的业务员编号及销售业绩
SELECT sale_id AS 业务员编号, SUM(sales.total_amt) AS 销售业绩 FROM sales GROUP BY sales.sale_id HAVING SUM(sales.total_amt) >= ALL( SELECT SUM(total_amt) FROM sales GROUP BY sales.sale_id )
6、找出目前业绩超过300元的员工编号和姓名
SELECT emp_no AS 员工编号, emp_name AS 姓名 FROM employee WHERE emp_no IN /*或者将emp_no IN换为exists*/ ( SELECT sale_id FROM sales GROUP BY sale_id HAVING SUM(total_amt) > 300 )
7、查询订购的产品至少包含了订单102893中所订购产品的订单
SELECT DISTINCT A.order_no AS 订单编号 FROM sale_item A WHERE a.order_no!='102893' AND NOT EXISTS ( SELECT * FROM sale_item B WHERE B.order_no = '102893' AND NOT EXISTS ( SELECT * FROM sale_item C WHERE A.order_no=C.order_no and B.book_no=C.book_no))
8、查询未承接业务的员工的信息
SELECT * FROM employee WHERE NOT EXISTS ( SELECT sale_id FROM sales WHERE emp_no = sale_id ) --或者 SELECT * FROM employee WHERE emp_no not in ( SELECT sale_id FROM sales )
9、查找未被售出的图书编号和书名
SELECT book_no AS 图书编号, book_name AS 书名 FROM books WHERE book_no not in ( SELECT book_no FROM sale_item)
10、找出既购买了“20652”又购买了“22082”的顾客名称
select cust_name as 顾客姓名 from sales where order_no=any( select order_no from sale_item where book_no='20652'intersect select order_no from sale_item where book_no='22082') --或者 select distinct cust_name as 顾客姓名 from sale_item a,sales b where book_No='20652' and a.order_no=b.order_no and cust_name in (select cust_name from sale_item a,sales b where book_no='22082' and a.order_no=b.order_no)
11、统计收件人为“赵毅”的用户所购买的图书总金额,订单笔数
SELECT SUM(total_amt) AS 购书图书总金额, COUNT(order_no) AS 订单数 FROM sales WHERE sales.cust_name IN ( SELECT cust_name FROM customer WHERE customer.receiver = '赵毅' ) GROUP BY cust_name
12、查找收件人为“赵毅”的用户所购买的图书信息(书名和书号)
select book_name,book_no from books where book_no=any( select book_no from sale_item where order_no=any( select order_no from sales where cust_name =any (select cust_name from customer where receiver like '赵毅') ) )
13.查找员工“方美美”所承接的订单明细
SELECT * FROM sale_item WHERE order_no IN ( SELECT order_no FROM sales WHERE sale_id = ( SELECT emp_no FROM employee WHERE emp_name = '方美美' ) )
14、统计员工“方美美”所承接的订单笔数,总销售业绩
SELECT COUNT(*) AS 订单笔数, SUM(total_amt) AS 总销售业绩 FROM sales WHERE sale_id = ( SELECT emp_no FROM employee WHERE emp_name = '方美美') GROUP BY sale_id --或者 select count(order_no) 订单笔数,sum(total_amt) 总销售业绩 from sales where sale_id=any( select emp_no from employee where emp_name='方美美' )
15、查找购买了“数据库系统概论”的客户信息(客户名称,收件人,电话)
select cust_name,receiver,tel_no from customer where cust_name=any( select cust_name from sales where order_no=any( select order_no from sale_item where book_no=any( select book_no from books where book_name='数据库系统概论')) )
16、统计购买了“数据库系统概论”的订单笔数,总销售量,总金额
SELECT COUNT(*) AS 订单笔数, SUM(qty) AS 总销售量,SUM(qty*unit_price) AS 总金额 FROM sale_item WHERE book_no = ( SELECT book_no FROM books WHERE book_name = '数据库系统概论' )
-
SQL嵌套查询
2018-04-04 19:47:29主要是用来判断表是否有记录TRUNCATE:删除内容、释放空间但不删除定义,保留数据表的结构删除目标表中所有字段,不影响表结构派生表:派生表就是一个由查询结果生成的临时表。他是在外部查询的FROM中定义的。派生表...select top 1 1 from...主要是用来判断表是否有记录
TRUNCATE :删除内容、释放空间但不删除定义,保留数据表的结构删除目标表中所有字段,不影响表结构派生表:派生表就是一个由查询结果生成的临时表。他是在外部查询的 FROM 中定义的。派生表的存在范围只是在外部查询中,只要外部查询结束了,派生表也就不存在了。派生表一定要写在 FROM 后面范围内,用()括起来。后面跟着派生表的名称。select * from(select a,b from table1) as 666嵌套子查询的用法:两个 select 的嵌套查询:select a.GroupInputName from System_GroupInput A where A.GroupInputCodein (SELECT b.GroupInputCode FROM System_GroupInputList b WHERE b.GroupInputCode='TH_NofityStayList' )单 select 的嵌套查询:假设想知道某产品第一天销售产品的 ID 号。又不知道第一天是什么日期。可以用以下的方法查询 :select A.saledate,A.saleid from saleorderhead A join saleorderdetail Bon A.saleid=B.saleidwhere (select min(saledate) from saleorderdetail )可以用以下的嵌套查询方法在代码中加入主键(索引)方法:1. 在创建列的时候创建完列的时候加入 primary key2. 在创建完所需列之后。在下面加入constraint (索引名称) unique (关联列 1 ,关联列 2 )HAVING 字句设置 GROUP BY 字句形成分组的条件! HAVING 接 GROUP BY 后面,在 ORDER BY 前面。创建外键的方式: constraint 外键名 foreign key (需要放数据的列) references 数据来源表(数据来源表的列明)
TOP 字句select top 1 ( 列名 ) from (表名) where order by (列名)(顺序或逆序)decimal(18,0)18 是定点精度, 0 是小数位数。compute by 计算语句。允许在结果集内产生控制中断和小计,得到更为详尽的记录实用实例{ compute avg|count|max|min|sum }(表达式)by (表达式)自然连接:一种特殊的等值连接,要求需要连接的两个关系需比较的分列是属性完全相同的项,并且将重复属性列去掉。谓词 IN :在嵌套查询的结果往往是一个结果集。查询结果集就是用 IN 。 可以理解为 ’=‘AS 用法:一: as 可以作为别名的标志。sql : select name as username form tablename;解释:上面语句的意思就是查询出 tablename 表中字段 name 的所有记录,并且给 name 别名为 username 。
SQL CTE( 公用表表达式 )定义语法: with 公用表表达式名称所涉及的列(非全选)一个 SELECT 语句,在 AS 之后紧跟。按照是否递归,可以将公用表( CTE )表达式分为递归公用表表达式和非递归公用表表达式 .非递归公用表表达式:非递归公用表表达式( CTE )是查询结果仅仅一次性返回一个结果集用于外部查询调用。并不在其定义的语句中调用其自身的 CTE递归公用表表达式:流程控制语句BEGIN……END语句格式:BEGIN语句~~~ENDIF......ELSE语句格式:IF语句[ELSE[IF条件表达式]语句具体用法:WHILE 循环语句用法: WHILE 逻辑表达式语句
GOTO 语句GOTO 语句可以使 SQL 语句的执行流程无条件转移到指定的标号位置。常用于 WHILE 和 IF 语句中,做跳出循环用。GOTO lable...lable,WAITFOR 语句WAITFOR 语句可以在某一个时间或某一时间间隔之后执行 SQL 语句,语句块,存储过程等。WAITFOR{DELAY ' 时间 '|TIME ' 时间 '}waitfor delay '00:00:10'select * from test01;waitfor time '16:00:00'select * from test01;case 语句语法: case< 表达式 >when< 条件表达式 1>then< 表达式 1>when< 条件表达式 2>then< 表达式 2>......else< 表达式 n>-- 简单 Case 函数 CASE sex WHEN '1' THEN ' 男 ' WHEN '2' THEN ' 女 ' ELSE ' 其他 ' END --Case 搜索函数 CASE WHEN sex = '1' THEN ' 男 ' WHEN sex = '2' THEN ' 女 ' ELSE ' 其他 ' ENDreturn 语句return 语句可以使程序从程序或存储过程中返回。并且之后的语句不再执行。return 整型表达式变量变量分局部变量和全局变量,全局变量是用来跟踪服务器作用范围和特定的交互过程的,不能由用户自己定义也不能被显式的赋值或生命,其名称是由 @@ 组成的。局部变量是由用户自己定义和赋值的。由 declare 声明。局部变量只能在声明变量的批处理语句或过程体中存在,且首字符为 @ 。declare @aa 数据类型;或 set @aa= 表达式;
-
SQL嵌套查询示例
2022-01-01 13:52:04SQL嵌套查询示例 现需要查询学生上课人数超过 “Eastern Heretic” 的任意一门课的学生人数的课程信息,请使用 ANY 操作符实现多行子查询。(Lintcode刷题记录)查询学生上课人数超过 “Eastern Heretic” 的任意一门课的学生人数的课程信息,请使用 ANY 操作符实现多行子查询。(Lintcode刷题记录)
Courses表:
列名 类型 注释 id int unsigned 主键 name varchar 课程名称 student_count int 学生总数 created_at datetime 课程创建时间 teacher_id int unsigned 讲师 id Teachers表:
列名 类型 注释 id int unsigned 主键 name varchar 讲师姓名 email varchar 讲师邮箱 age int 讲师年龄 country varchar 讲师国籍 本题涉及到多层的嵌套:
第一层的父查询为在课程表
courses
中查询满足条件的全部课程信息,这个条件由子查询来完成,即为,查询学生上课人数超过 ”Eastern Heretic“ 的任意一门课的学生人数。这一部分的子查询中需要结合 ANY 操作符实现。之后,再将子查询进行拆分,形成第二层的嵌套子查询。第二层的父查询为在课程表
courses
中根据教师 id 查询学生上课人数, 其子查询为在教师表teachers
中查找教师名name
为 “Eastern Heretic” 的教师 id。条件限制:由于我们最终得到的课程信息中肯定不包含 “Eastern Heretic” 的课程,所以我们要在 WHERE 条件中再设置一项:不为 “Eastern Heretic” 所开的课程 。
结合以上,使用 SQL 中子查询的方式如下:)
SELECT * FROM `courses` WHERE `student_count` > ANY ( SELECT `student_count` FROM `courses` WHERE `teacher_id` = ( SELECT `id` FROM `teachers` WHERE `name` = 'Eastern Heretic' ) ) -- <> 代表不等于,也可以用!= 但是有些数据库会报错,例如SQL2000 —-- AND `teacher_id` <> ( SELECT `id` FROM `teachers` WHERE `name` = 'Eastern Heretic' );
-
数据库sql嵌套查询
2021-04-14 16:12:19在sql语言中,一个select-from-where语句成为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。外层的查询块称为外层查询或父查询,内层的查询称为内层查询或子查询... -
SQL练习-select连接查询与嵌套查询
2020-12-14 16:36:39查询学生的选修课程情况 首先引入知识点:连接查询其实就是对于多个表进行笛卡尔积。 select Student.*,Sc.* from TEST.Student,TEST.SC where Student.Sno=Sc.Sno 上面的例子是等值查询,where的条件是‘=’ ,也... -
sql嵌套查询慢的原因
2021-05-01 16:15:21为了查询一个字段,使用了五层嵌套循环,但是花费了约1分钟 但是5个表的数据每个最多只有10条,怎么会这么慢呢? 解决 比如查询语句 SELECT * FROM studet 分析器会先看语句的第一个词,如果它发现第一个词是SELECT... -
SQL语句嵌套查询
2013-02-03 14:50:09基于SQL2005的嵌套查询,包括返回一个值的子查询、返回一组值的子查询(使用ANY谓词查询、使用IN谓词查询、使用ALL谓词查询使用EXISTS查询)。附有详细的表信息。 -
SQL数据查询——嵌套查询
2020-12-14 11:34:36嵌套查询语法格式带有IN谓词...1.SQL允许多层嵌套查询 2.子查询中不能使用ORDER BY子句(但可以使用GROUP BY等分组查询) 带有IN谓词的子查询 带有IN谓词的子查询指父查询与子查询之间用IN进行连接,判断某个属性列值是 -
07_4 SQL嵌套查询-其他子查询及子查询总结.pptx
2020-06-05 16:41:10第7讲 sql嵌套查询;教学任务发布;7.4 在Having子句中使用子查询;7.5 在Select子名中使用子查询;7.6 子查询的另外一种分类;7.6 子查询的另外一种分类;7.6 子查询的另外一种分类;拓展补充;拓展补充;拓展补充;拓展补充;... -
MySQL、Spark SQL 嵌套查询(二层、三层、多层)
2021-03-13 11:53:17MySQL、Spark SQL 嵌套查询(二层、三层、多层) -
sql嵌套查询优化
2018-01-04 23:36:441.嵌套查询优化 优化前 SELECT q.id, q.title, q.question, q.person_name, q.department_name, r.response, r.create_time response_time FROM tb_ent_question q LEFT JOIN tb_ent_res -
VC++ SQL语句嵌套查询实例
2021-03-15 14:45:16VC++ SQL语句嵌套查询实例,嵌套的SQL 语句可以执行比较复杂的数据库操作,本源码介绍在INSERT 语句中嵌套使用SELECT语句。测试前请通过控制面板注册Access 数据源students,编译并运行Debug下的exe程序,如上图所示... -
SQL Server 数据库之嵌套查询
2022-03-16 13:59:32SQL Server 数据 嵌套查询 -
SQL子查询和嵌套查询
2012-05-14 20:51:48SQL子查询和嵌套查询 -
SQL数据查询之——嵌套查询
2020-12-24 14:02:17将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询。例如:SELECT Sname /*外层查询或父查询*/FROMStudentWHERE Sno IN(SELECT Sno /*内层查询或子查询*/FROMSCWHERE Cno='2')... -
sql嵌套查询时避免报错的方式
2017-08-11 11:02:44在做嵌套查询时,如果嵌套的条件在另一张表中没有数据,则会报错。这时候可以用: -
sql 嵌套查询 in
2021-01-28 00:26:38嵌套查询是将一个select 查询放到另一个查询的where 子句中去如:查询”xx“同学的所修课程及分数1.先选择姓名为"xx"的同学的学号select 学号 from 学生 where 姓名=“XX”2.根据学号来选择相关字段select 课程名,... -
SQL练习4-SELECT(连接查询、嵌套查询)
2020-12-14 16:49:18连接查询: 连接查询的WHERE子句中来连接两个表的条件称为连接条件或连接谓词,其一般格式: [.][.] 其中比较运算符主要为=、>、=、<=、!=(或者是)等。 此外连接谓词还可以使用以下形式: [.] BETWEEN [.] AND ... -
sql嵌套查询练习题
2012-11-23 23:58:25sql 语句的嵌套查询完整题,只要能全部做完,那查询的问题就不大了 -
sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询
2020-07-10 17:34:52sql 子查询 嵌套查询In the real world, there are times when we need a particular set of data but we don’t have the exact details for getting the data set. In such cases, we try to get the information ... -
SQL 数据查询(4)—— 嵌套查询
2021-04-11 22:45:32文章目录 嵌套循环 SELECT Sname FROM Student WHERE Sno IN( SELECT Sno FROM SC WHERE Cno = '2' ); -
sql 查询 - 连接、嵌套查询
2021-07-19 10:03:04subject 表: ...自连接:查询父子信息,把一张表看成两张一样的表 现在有一张包含子父关系的,名为 category 的数据表: 我们把这一张表拆分成两张表: 执行 sql 语句: 结果: ... -
sql嵌套查询和多表联合查询之间的差别
2017-01-18 11:16:53sql语句会用到许多查询语句,如果牵扯到多... 嵌套查询: select * from bi_BillItem where BillID in (select BillID from bi_Bill where IsArchived='0' and IsCheckOuting='2') group by menuId,MenuPri... -
SQL连接查询和嵌套查询详解
2020-08-19 14:30:02SQL连接查询和嵌套查询详解 连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询, 包括1、等值与非等值连接查询2、自然连接查询 1、等值连接查询 2、自然连接查询 3...