sql的嵌套查询_嵌套查询和嵌套结果的区别

sql的嵌套查询_嵌套查询和嵌套结果的区别SQL连接查询和嵌套查询详解连接查询若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询,包括1、等值与非等值连接查询2、自然连接查询1、等值连接查询2、自然连接查询3、非等值连接查询4、自身连接查询5、外连接查询6、复合条件查询1、等值与非等值连接查询比较运算符主要有=、>、<、>=、<=、!=(或<>)等。下面来看一个例子:假设有一个学生数据库,其中有三张表,即学生信息表(Student)、课程表(Cours

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

SQL连接查询和嵌套查询详解
连接查询
若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询,

1、等值连接查询
2、自然连接查询
3、非等值连接查询
4、自身连接查询
5、外连接查询
6、复合条件查询

1、等值与非等值连接查询

比较运算符主要有=、>、<、>=、<=、!=(或<>)等。

下面来看一个例子:
假设有一个学生数据库,其中有三张表,即学生信息表(Student)、课程表(Course)、选课表(Study),三张表中的信息如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例1:要求查询选修了课程的学生的信息

很显然,需要用连接查询,学生的情况存放在student表中,学生的选课情况存放在Study表中,所以查询实际涉及Student和Study这两个表。这两个表之间的联系是通过公共属性Sno实现的。

考虑下列等值连接查询语句

SELECT Student.*,Study.*
FEOM Student,Study
WHERE Student.Sno=Study.Sno /*将Student与Study中同一学生的元祖连接起来*/

得到的结果:
在这里插入图片描述

我们发现,上述查询语句按照把两个表中学号相等的元祖连接起来。

系统执行的连接过程:首先在表Student中找到一个元祖,然后从头开始扫描Study表,逐一查找与Student第一个元祖的Sno相等的元祖,找到后就将Student表中的第一个元祖与该元祖拼接起来,形成结果表中的一个元祖,Stdudy表全部查找完后,再找Student中的第二个元祖,重复上述过程,直至Student表中的全部元祖处理完。

2、自然连接查询

在等值连接中把目标中重复的属性列去掉的连接查询。

下面考虑用自然连接实现上述例子:

SELECT Student.Sno,SName,SSex,Sdept,Cno,Grade
FROM Student,Study
WHERE Student.Sno=Study.Sno

结果:
在这里插入图片描述

3.自身连接查询

当查询的结果涉及同一个表中两个或以上的列时,考虑用自身连接查询。

例2:查询每一门课的间接先行课(即先行课)

SELECT C1.Cpno
FEOM Course AS C1,Course AS C2    /*为Course表起两个别名C1、C2*/
WHERE C1.Pcno=C2.Cno               /*两个Course表的连接*/

结果:
在这里插入图片描述

4、外连接查询:

分为左外连接,右外连接,
左外连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,找不到匹配的,用null填充
 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,找不到匹配的,用null填充

例3:查询缺少成绩的的学生号和课程号:

SELECT Student.Sno,Cno 
FROM Student 
LEFT JOIN Study 
ON Student.Sno=Study.Sno 
WHERE Grade IS NULL 

结果:
在这里插入图片描述

例4:查询所有学生的学号姓名、成绩

4.1、左外连接

SELECT Student.Sno AS 学号,SName AS 姓名, Grade AS 成绩 
FROM Student 
LEFT JOIN Study
ON Student.Sno=Study.Sno 

相当于:

4.2、右外连接

1
2
3
4
SELECT Student.Sno AS 学号,SName AS 姓名, Grade AS 成绩
FROM Study
RIGHT JOIN Student
ON Study.Sno=Student.Sno
 结果:在这里插入图片描述

左外连接列出左边关系,右外连接列出右外关系中所有的元素

5、多表连接查询

–1、WHRER 语句
–2、INNER JOIN… 语句

例:查询选修了C601号课程的学生姓名、分数、课程名

这个查询三个涉及了表学生表、课程表和学习表’

SELECT Student.SName AS 学生姓名,Grade AS 成绩,CName AS 课程名 
FROM Student 
INNER JOIN Study ON Student.Sno=Study.Sno 
INNER JOIN Course ON Study.Cno=Course.Cno 
WHERE Course.Cno='C601' 

相当于自然连接查询:

SELECT
	Student.SName AS 学生姓名,
	Grade AS 成绩,
	CName AS 课程名 
FROM
	Student, Course, Study 
WHERE
	Student = Study.Sno 
	AND Study.cno = Course.Cno ADN Course.Cno = C601   

6、嵌套查询

嵌套查询又称子查询,是指在父查询的where条件语句中再插入一个子查询语句,连接查询都可以用子查询完成,反之不然。

例1:找出至少一门课程的成绩在90分以上的女学生的姓名

分析:已知的是分数大于90分这个条件,通过这个条件找出Study表中大于90分所对应的Sno,再通过连接查询Study表中对应Sno的SName

SELECT SName 
FROM Student 
WHERE  Sex='女' AND Sno NOT IN 
( 
    SELECT Sno 
    FROM Stduy 
    WHERE Grade<90 
) 
  

注意:这里子查询返回的Sno可能有多个,所以要用到谓词 IN,如果用 =,则报错,因为 = 表示子查询的返回值是唯一的。

子查询的一个原则:根据已知得出未知

例2:查询选修了课程名为 ‘’高等数学” 的学生学号和姓名
根据Course表中的高等数学得到课程号,再在Study表中找到选修了该课程号的学号,最后根据学号Sno在Student表中找出对应的学生的姓名。一层层嵌套,由已知得到未知。

SELECT Sno,SName 
FROM Student 
WHERE Sno IN 
( 
    SELECT Sno  
    FROM Study 
    WHERE Cno IN 
    ( 
        SELECT Cno  
        FROM Course 
        WHERE CName='高等数学' 
    )

相当于连接查询:

SELECT
	Student.Sno, SName 
FROM
	Student, Course, Study 
WHERE
	Student.Sno = Study.Sno 
	AND Course.Cno = Study.Cno 
	AND Course.CName = '高等数学'

结果:
在这里插入图片描述

例3:找出至少学了C601和C602两门课程的学生姓名。

这里涉及到两门课程,都来自Course表,涉及到同一个表中两个或以上的元祖,考虑子查询用自身连,子查询根据课程号返回学号,父查询再根据学号查询姓名。

SELECT SName FROM Student
WHERE Sno IN
(
    SELECT Study1.Sno
    FROM Study AS Study1
    JOIN Study AS Study2
    ON Study1.Sno=Study2.Sno
    WHERE Study1.Cno='C601' AND Study2.Cno='C602'
)

结果:
在这里插入图片描述
作者:博客园 – CTHON
地址:https://www.cnblogs.com/cthon/p/9075774.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169436.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库主从复制_sqlserver主从复制

    数据库主从复制_sqlserver主从复制一、什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。二、主从复制的作用(好处,或者说为什么要做主从)重点!1、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,物理服务器增加,负荷增加。2、读写分离,使数据库能支撑更大的并发。主从只负责各自的写和读,极大程度的缓解X锁和S锁争用。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那

    2022年8月13日
    5
  • 常用的电容分类[通俗易懂]

    常用的电容分类[通俗易懂]电容的常用分类1.铝电解电容特点:项目中大型体积、大容量、耐压适中、有极性、高ESR(ESR解释:内阻)用于储能、价格低廉项目缺点:过压失效,反向击穿、物理连接开路失效、漏液失效(电解液挥发)…

    2022年8月22日
    6
  • pycharm2021.3.3激活 mac破解方法[通俗易懂]

    pycharm2021.3.3激活 mac破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    1.7K
  • 国内外6款优秀的免费CDN服务「建议收藏」

    国内外6款优秀的免费CDN服务「建议收藏」CDN是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。之前有过几篇文章介绍了CDNZZ和Cloudflare,今天再来系统推荐一下几家比较有名的CDN,都是免费的,或者其免费服务已经够用了。CDN主要特点1、本地Cache加速 提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大

    2025年9月3日
    5
  • 满二叉树、完全二叉树、平衡二叉树、最优二叉树

    满二叉树、完全二叉树、平衡二叉树、最优二叉树一 满二叉树 一棵二叉树的结点要么是叶子结点 要么它有两个子结点 如果一个二叉树的层数为 K 且结点总数是 2 k 1 则它就是满二叉树 二 完全二叉树 若设二叉树的深度为 k 除第 k 层外 其它各层 1 k 1 的结点数都达到最大个数 第 k 层所有的结点都连续集中在最左边 这就是完全二叉树 三 平衡二叉树 它或者是一颗空树 或它的左子树和右子树的深度之差 平衡因子 的绝对值不超过 1 且它的左子树和右子树都是一颗平衡二叉树

    2025年6月20日
    2
  • S3C2440中断介绍

    S3C2440中断介绍1.1   S3C2440系统中断CPU和外设构成了计算机系统,CPU和外设之间通过总线进行连接,用于数据通信和控制,CPU管理监视计算机系统中所有硬件,通常以两种方式来对硬件进行管理监视:l  查询方式:CPU不停的去查询每一个硬件的当前状态,根据硬件的状态决定处理与否。好比是工厂里的检查员,不停的检查各个岗位工作状态,发现情况及时处理。这种方式实现起来简单,通常用在只有少量外设硬件的系

    2022年5月5日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号