ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL语言复杂查询-IN/Not IN子查询

2022-02-06 16:00:58  阅读:215  来源: 互联网

标签:Sname 语言 C# 查询 char SQL Where Select


 

学生:学号,姓名,性别,年龄,系别,班级
Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6))

院系:系别,系名,系主任
Dept(D# char(2),Dname char(10),Dean char(10))

课程:课程,课号,教师编号,学时,学分
Course(C# char(3),Cname char(12),Chours integer,Credit float(1),T# char(3))

教师:教师编号,教师姓名,所属院系,工资
Teacher(T# char(3),Tname char(10),D# char(2),Salary float(2))

选课:学号,课号,成绩
SC(S# char(8),C# char(3),Score float(1))

 

1.子查询解决的问题

  (1)集合成员资格:某个元素是否是集合的元素

  (2)集合之间比较:一个集合是否包含另一个集合

  (3)集合基数测定:集合是否为空和集合是否有重复元组

2.子查询

  (1)定义:出现在 Where 子句中的 Select 语句被称为子查询 (subquery),子查询返回了一个集合,可以通过与这个集合的比较来确定另一个查询的集合

  (2)分类:(NOT) IN - 子查询;θ - Some/ θ - All 子查询;(NOT) EXISTS 子查询

3.(NOT) IN 子查询

  (1)基本语法:表达式  [not]  in  (子查询)

  (2)语义:判断某一表达式的值是否在子查询的结果中

4.非相关子查询举例

  (1)非相关子查询:内层查询独立进行,没有涉及任何外层查询的相关信息

  (2)列出张三,李四同学的所有信息

    Select *

    From Student

    Where Sname = "张三" or Sname = "李四";

    Select *

    From Student 

    Where Sname in ("张三", "李四");  //直接用枚举的形式给出了子集合

  (3)列出了选修了 001 号课程的学生的学号和姓名

    Select S#, Sname

    From Student 

    Where S# in (Select S# From SC Where C# = '001');

  (4)求既学过 001 号课程,又学过 002 号课程的同学的学号

    Select S# From SC

    Where C# = '001' and S# in ( Select S# From SC Where C# = '002' );

   (5)列出没学过李明老师讲授课程的所有同学姓名

    Select Sname From Student 

    Where S# not in ( Select S# From SC, Coures C, Teacher T Where T.Tname = '李明' and SC.C# = C.C# and T.T# = C.T# );

 

5.相关子查询举例

  (1)相关子查询:内层查询需要依靠外层查询的某些参量作为限定条件才能进行的子查询,外层向内层传递的参量需要使用外层的表名或表别名来限定

  (2)说明:外层查询能向内层查询传递参数,反之不成立,涉及到作用域原则

  (3)求学过 001 号课程的同学的姓名

    Select Sname From Student 

    Where S# in ( Select S# From SC Where Student.S# = S# and C# = '001' );

标签:Sname,语言,C#,查询,char,SQL,Where,Select
来源: https://www.cnblogs.com/zxk-1212/p/15865766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有