sqlserver 数据库学习笔记
发布日期:2022-01-21 18:35 | 文章来源:gibhub
exists:如果子查询中包括某一行,那么就为TRUE
in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE
exists总是搞得不太明白
select 。。。from。。。where 。。。
where就相当于一个判断条件,只有where后面的表达式运算结果为TRUE,前面的才能select出来
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
1: SELECT c.CustomerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE o.CustomerID = cu.CustomerID)
像这样的EXISTS子查询中的SELECT什么根本不重要,因为子查询只是检查这个表中有没有满足WHERE后条件的行, 有就返回TRUE,没有就FALSE,所以很多EXISTS后都是SELECT的* 一行行的去判定,EXISTS返回的是TRUE,就是存在,则把这行的相关信息输出 1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 学号=xs.学号 and 课程号=kc.课程号 )
分析下上面的查询语句: 把最外层的xs表里的记录一行一行的同中层一行一的笛卡尔乘积后拿到里面去检验 在最里层,如果xs_kc表里的某行有拿来检验的这行的学号,同时有中层拿来检验的课程号 就返回TRUE,说明这个这个学生选了这门课 中层如果某门课程没有收到返回的TRUE信息,说明这个名字和课程的搭配在xs_kc表中没有,或者说中层select出来的是没有被这个学生选择的课程信息,如果有这样的课程,就向最外层返回个TRUE 最外层在返回信息上加了not,即最外层找的是这样的一种学生: 他选择了所有的课程 最外层一行行的去检测,如果他满足这个条件,就输出他的姓名且只输出一次 我这是一层层的分析,还有么有什么别的办法?
2,select。。。into @。。。 和select @。。。 = 。。。应该是相同的吧 3,用AS为列重命名似乎比=更好点,和赋值区分开 4,用compute汇总的时候,如果是根据某列汇总的,先要order by此列,然后在compute相应信息,最后by此列 group或者compute的时候,如果by了某列,select里都要出现相同的列 区别是group的聚合函数在select行中(称为选择列表),而compute的聚合函数在compute行中,同时compute可以不带by,对所有行汇总
像这样的EXISTS子查询中的SELECT什么根本不重要,因为子查询只是检查这个表中有没有满足WHERE后条件的行, 有就返回TRUE,没有就FALSE,所以很多EXISTS后都是SELECT的* 一行行的去判定,EXISTS返回的是TRUE,就是存在,则把这行的相关信息输出 1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 学号=xs.学号 and 课程号=kc.课程号 )
分析下上面的查询语句: 把最外层的xs表里的记录一行一行的同中层一行一的笛卡尔乘积后拿到里面去检验 在最里层,如果xs_kc表里的某行有拿来检验的这行的学号,同时有中层拿来检验的课程号 就返回TRUE,说明这个这个学生选了这门课 中层如果某门课程没有收到返回的TRUE信息,说明这个名字和课程的搭配在xs_kc表中没有,或者说中层select出来的是没有被这个学生选择的课程信息,如果有这样的课程,就向最外层返回个TRUE 最外层在返回信息上加了not,即最外层找的是这样的一种学生: 他选择了所有的课程 最外层一行行的去检测,如果他满足这个条件,就输出他的姓名且只输出一次 我这是一层层的分析,还有么有什么别的办法?
2,select。。。into @。。。 和select @。。。 = 。。。应该是相同的吧 3,用AS为列重命名似乎比=更好点,和赋值区分开 4,用compute汇总的时候,如果是根据某列汇总的,先要order by此列,然后在compute相应信息,最后by此列 group或者compute的时候,如果by了某列,select里都要出现相同的列 区别是group的聚合函数在select行中(称为选择列表),而compute的聚合函数在compute行中,同时compute可以不带by,对所有行汇总
版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。
相关文章
上一篇:
SQL中exists的使用方法
下一篇: