📄 sql中的in和exists的应用技巧1.sql
字号:
----检索学习了课程号为‘C2'的学生的学号与姓名---
--1.(联接查询)(由于要做笛卡尔集运算,所以效率是最低)
SELECT s.学号,姓名 FROM 学生情况表 as s,成绩表 as c where s.学号=c.学号 and c.课号='C2'
--(说明:在本查询中,先执行from语句把两个表做笛卡尔积,构成一张包括两表所有信息的大表,再执行where条件,
--在本大表中取出数据进行筛选,筛选完成后再把所需显示的字段显示出来)
--2.(嵌套查询)(IN 的使用技巧)
SELECT 学号,姓名 from 学生情况表 where 学号 in
(select 学号 from 成绩表 where 课号='C2')
--(说明:由于在子查询中没有出现主查询的数据,所以本查询不是相关子查询,而是先执行里面的子查询并返回一个记录
--集后,再执行外层的查询,判断'学号'是否在子查询的记录集中,如果是,则选出该记录,如此完成后再返回出用户所规
--定的字段)
SELECT 学号,姓名 from 学生情况表 where 'C2' in
(select 课号 from 成绩表 where 学号=学生情况表.学号)
--(说明:由于子查询中使用了主查询的数据,所以本查询属于是相关的子查询,过程为:先从主表中取出一条记录的学号
--值,然后执行子查询,在子表中也取出一条记录的学号,并判断是否和主表中的学号相等,如果不相等则取下一条记录,否
--则,则写进要返回的记录集中,如此,则子查询就返回一个在'学生情况表'和'成绩表'中同一个学号的课号记录集,最后再
--判断是否包括了C2,如果有,则立即显示出该主表记录的学号和姓名 )
--3.(存在量词的嵌套查询)(由于exists不返回记录集,并且是相关查询所以执行效率最高)
select 学号,姓名 from 学生情况表 where exists
(select * from 成绩表 where 成绩表.学号=学生情况表.学号 and 课号='C2')
--(说明:exists查询总是相关查询,
--先从'学生情况表'中取出一条记录的学号值,再从'成绩表'中取出一条记录的学号值,如果相等则比较课号是否为C2,如果都
--相等,则exists返回一个T值,则把'学生情况表'中取出的该记录的有关字段显示出来)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -