自学内容网 自学内容网

【SQL】双层嵌套< exists && not exists >

EXISTS 运算符

        EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

语法

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

 实例1

查找总访问量(count 字段)大于 200 的网站是否存在。返回网站名,地址

Websites

access_log

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE EXISTS (
SELECT count 
            FROM access_log 
            WHERE Websites.id = access_log.site_id 
            AND count > 200
);

 


实例2 

 表格如下: 

Create table `sc`( 
`sno`  char(10),-- 学生学号
`cno`  char(3), -- 课程号
`grade`  int ,-- 分数
Primary key(`sno`,`cno`));

 

查找出选了001号课程和003号课程的学生,返回学号。

select s1.sno -- 选择学生
from sc s1 -- 对于这个同学
where exists(-- 存在
select s2.sno 
from sc s2
where s1.sno=s2.sno and s1.cno='001' and s2.cno='003'-- 选了001号和003号
);

 


NOT EXISTS 运算符

查找出不符合查询语句的记录。

语法

SELECT column_name(s)
FROM table_name
WHERE NOT EXISTS
(SELECT column_name FROM table_name WHERE condition);

实例1 

返回 访问量没有超过200的网站。

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE NOT EXISTS (
SELECT count 
            FROM access_log 
            WHERE Websites.id = access_log.site_id AND count > 200
);

 

 实例2

返回  学生选择1号课程没有选3号课程 的学号

-- 选择 学生的学号
select s1.sno from sc s1 
                -- 对于这个学生
where s1.Cno='001' and not EXISTS
                -- 选了课程号为001的,并且不存在这样的学生(选了001号和003号)
(select s2.sno from sc s2
                        -- 选择学生的学号
where s2.sno=s1.sno and s2.Cno='003'
                                                -- 这个学生选了001号课程和003号课程
)


原文地址:https://blog.csdn.net/m0_75163045/article/details/143731136

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!