sql查询复习笔记-小技巧,大智慧

简介:
+关注继续查看

最近看sql的书,这里自己举个例子来温故知新一遍常用常见的sql查询。好了,code is cheap,代码来了。

ContractedBlock.gifCode

下面对上面新建表的字段稍微介绍一下:

ContractedBlock.gifCode

接着在相应表里插入一些记录:

ContractedBlock.gifCode

最后就是要按条件查询结果了:
1 回答关于”否定“的问题
问题(1): 找到没有选择sql server课程的学生

ContractedBlock.gifCode

分析:上述问题的结果集应该是包含没有选任何课程的学生和选择了除sql server之外的任何其他课程的学生,但是第一种查询返回的结果集是“选取了不是sql server课程的学生“而不是”没有选sql server的学生“。
结论:真正的否定需要两步操作,即要找出”谁不在“,先找出”谁在“,然后排除它们
问题(2):找到选取sql server或者my sql课程(但不是两者都选)的学生。

ContractedBlock.gifCode

分析:从正确的查询语句我们可以看到这里也采取了问题一里的解决方案,并通过使用自联接查找选取sql server和my sql课程的学生,然后使用子查询,选出选取sqlserver或者mysql的学生。
问题(3):选取了sqlserver而且未选取其他课程的学生

ContractedBlock.gifCode

分析:正确的查询通过子查询找到所有没有选sqlserver的学生,外层查询通过not in就找到了选择sqlserver或者没有选择任何一门课程的学生,然后表Student和StudentTakeCourses之间的联结会筛选掉未选择任何课程的学生。
2 回答有关”至多“的问题
问题(4):找到选取了课程并且至多选取两门课程的学生

ContractedBlock.gifCode

 分析:通过聚集函数count可以查找到选取课程不多于两门的学生。下面给出一种使用多次自联接的解决方案:

ContractedBlock.gifCode

总结:上述子查询的where判断可以这样理解,对于某个特定学生,返回满足下述条件的结果集:他的第一个课程id小于第二个课程id,而且第二个课程id小于第三个课程id。如果学生选择的课程小于三门,则该表达式永远不会为真,因为并不存在第三个课程id。子查询查到了选取三门以上课程的学生,外层查询not in加上学生表和学生选择的课程表联接查询一下就找到了至少选取一门课程且不多于两门的学生。
问题(5):找到至多比另外两名学生大的学生。
分析:问题换一种说法就是“找到比0个学生、1个学生、2个学生大的那些学生。”

ContractedBlock.gifCode

通过窗口函数DENSE_RANK,我们可以非常方便地找到所要选取的结果集。其实,不使用dbms的函数,同样可以取到结果,思路如下: 先找到不比三个以上学生大的学生,然后排除他们。

ContractedBlock.gifCode

未完待续。







本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/04/05/1429437.html,如需转载请自行联系原作者

相关实践学习
使用交互方式创建数据表
本次实验主要介绍如何在RDS-SQLServer数据库中使用交互方式创建数据表。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2天前
|
SQL
SQL两张表中有关联id,但是字段名不同查询
SQL两张表中有关联id,但是字段名不同查询
8 0
|
2天前
|
SQL 数据处理 数据库
时序数据库 TDengine SQL 查询语法规则汇总,官方教程奉上!
TDengine 采用 SQL 作为查询语言,本文将就部分查询细则做分析。
35 1
|
3天前
|
SQL 数据库管理
逻辑数仓执行SQL查询时
逻辑数仓执行SQL查询时
15 1
|
24天前
|
SQL
SQL 使用in关键字查询多个字段
SQL 使用in关键字查询多个字段
|
1月前
|
SQL 缓存 自然语言处理
SQL参数化查询为什么能够防止SQL注入
SQL参数化查询为什么能够防止SQL注入
53 0
|
1月前
|
SQL Java 数据库连接
动态SQL 语句-更复杂的查询业务需求也能轻松拿捏
动态SQL 语句-更复杂的查询业务需求也能轻松拿捏
30 0
|
1月前
|
SQL
Mybatis-plus 自定义SQL注入器查询@TableLogic 逻辑删除后的数据
Mybatis-plus使用@TableLogic注解进行逻辑删除数据后,在某些场景下,又需要查询该数据时,又不想写SQL。 自定义Mybatis-plus的SQL注入器一劳永逸的解决该问题
57 0
|
2月前
|
SQL
SQL基础——查询基础(下)
SQL基础——查询基础(下)
28 0
SQL基础——查询基础(下)
|
2月前
|
SQL
SQL基础——查询基础(上)
SQL基础——查询基础(上)
23 0
SQL基础——查询基础(上)
推荐文章
更多