SQLServer 数据库学习笔记 exists:假如子查询中包括某一行,那么就为 TRUE in:假如操作数为 TRUE 等于表达式列表中的一个,那么就为 TRUE exists 总是搞得不太明白 select
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 表里的某行有拿来检验的这行的学号,同时有中层拿来检验的课程号 就返回 TRU