MYSQL网站制作之用SQL举行嵌套查询
解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。在select查询语句里能够嵌进select查询语句,称为嵌套查询。有些书大将内嵌的select语句称为子查询,子查询构成的了局又成为父查询的前提。子查询能够嵌套多层,子查询操纵的数据表能够是父查询不操纵的数据表。子查询中不克不及有orderby分组语句。
4.4.1复杂嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>=(selectsalfromscott.empwhereename=WARD);DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.19所示的了局。
【拜见光盘文件】:第4章4.4441.sql。
在这段代码中,子查询selectsalfromscott.empwhereename=WARD的寄义是从emp数据表中查询姓名为WARD的员工的薪水,父查询的寄义是要找出emp数据表中薪水年夜于即是WARD的薪水的员工。下面的查询历程等价于两步的实行历程。
(1)实行“selectsalfromscott.empwhereename=WARD”,得出sal=1250;
(2)实行“selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>=1250;”
4.4.2带【in】的嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresalin(selectsalfromscott.empwhereename=WARD);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.20所示的了局。
【拜见光盘文件】:第4章4.4442.sql。
上述语句完成的是查询薪水和WARD相称的员工,也能够利用【notin】来举行查询。4.4.3带【any】的嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>any(selectsalfromscott.empwherejob=MANAGER);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.21所示的了局。
【拜见光盘文件】:第4章4.4443.sql。
带any的查询历程等价于两步的实行历程。
(1)实行“selectsalfromscott.empwherejob=MANAGER”,其了局如.22所示。
【拜见光盘文件】:第4章4.4443-1.sql。
(2)查询到3个薪水值2975、2850和2450,父查询实行以下语句。
【拜见光盘文件】:第4章4.4443-2.sql。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>2975orsal>2850orsal>2450;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
4.4.4带【some】的嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal=some(selectsalfromscott.empwherejob=MANAGER);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.23所示的了局。
【拜见光盘文件】:第4章4.4444.sql。
带some的嵌套查询与any的步骤不异。
(1)子查询,实行“selectsalfromscott.empwherejob=MANAGER”,其了局如.22所示。
(2)父查询实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal=2975orsal=2850orsal=2450;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【拜见光盘文件】:第4章4.4444-2.sql。
带【any】的嵌套查询和【some】的嵌套查询功效是一样的。初期的SQL仅仅同意利用【any】,厥后的版本为了和英语的【any】相辨别,引进了【some】,同时还保存了【any】关头词。
4.4.5带【all】的嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>all(selectsalfromscott.empwherejob=MANAGER);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.24所示的了局。
【拜见光盘文件】:第4章4.4445.sql。
带all的嵌套查询与【some】的步骤不异。
(1)子查询,了局如.22所示。
(2)父查询实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.empwheresal>2975andsal>2850andsal>2450;
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
【拜见光盘文件】:第4章4.4445-2.sql。
4.4.6带【exists】的嵌套查询
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
selectemp.empno,emp.ename,emp.job,emp.salfromscott.emp,scott.deptwhereexists(select*fromscott.empwherescott.emp.deptno=scott.dept.deptno);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.25所示的了局。
【拜见光盘文件】:第4章4.4446.sql。
4.4.7并操纵的嵌套查询
并操纵就是汇合中并集的观点。属于汇合A或汇合B的元素总和就是并集。在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
(selectdeptnofromscott.emp)union(selectdeptnofromscott.dept);DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.26所示的了局。
【拜见光盘文件】:第4章4.4447.sql。
4.4.8交操纵的嵌套查询
交操纵就是汇合中交集的观点。属于汇合A且属于汇合B的元素总和就是交集。在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
(selectdeptnofromscott.emp)intersect(selectdeptnofromscott.dept);DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.27所示的了局。
【拜见光盘文件】:第4章4.4448.sql。
4.4.9差操纵的嵌套查询
差操纵就是汇合中差集的观点。属于汇合A且不属于汇合B的元素总和就是差集。
在【命令编纂区】实行以下语句。
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
(selectdeptnofromscott.dept)minus(selectdeptnofromscott.emp);
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
单击【实行】按钮,呈现如.28所示的了局。
【拜见光盘文件】:第4章4.4449.sql。
并、交和差操纵的嵌套查询请求属性具有不异的界说,包含范例和取值局限。这一切听起来不错,无疑DBaaS具有很多相对于RDBMS的优势。然而MySQL学习教程,DBaaS也有其局限性,云服务中固有的局限性就是之一。当客户开始将数据放入云端时,他们会遭遇到无法控制的网络性能问题。 我们学到了什么?思考问题的时候从表的角度来思考问 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。 微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。 原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜! 可以动态传入参数,省却了动态SQL的拼写。 SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。) 从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
页:
[1]