⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sql中的in和exists的应用技巧1.sql

📁 很久以前用delphi写的一个SQLServer外部的企业管理器
💻 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 + -