SQL之连接查询

这篇具有很好参考价值的文章主要介绍了SQL之连接查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

为什么要使用连接查询?

因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。

连接类型

SQL之连接查询

  1. 等值与非等值连接查询
  2. 自身连接查询
  3. 外连接查询
    3.1.左连接
    3.2.右连接
    3.3.全外连接
  4. 复合条件连接查询
  5. 集合运算连接查询

各种连接详讲和和示例

展示数据库中各个结构:

数据库:

SQL之连接查询

表结构:

SQL之连接查询

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

用来连接两个表的条件称为连接条件或连接谓词,当连接运算符为 = 时,称为 等值连接 ,使用其他运算符时称为 非等值连接

一般格式如下:

表名1.列名 比较运算符 表名运算符 表名2.列名2

或者:

表名1.列名1 between 表名2.列名2 and 表名2.列名3

比较运算符主要的有:

> 、 < 、 = 、 > = 、 < = 、 ! = 。 > 、< 、= 、>=、<=、!=。 ><=>=<=!=

说明:

连接谓词中的列名称为连接字段。连接条件中的各个字段类型必须是可比的,单不必相同。例如,可以都是字符型,或者都是日期型;也可以一个是整形,另一个是实型,两者均为数值型,因此都是可比的。

查询学生及其选修课程的详细情况

select sname,sc.cno from sc,s where s.sno=sc.sno;

SQL之连接查询

自然连接

自然连接是等值连接运算中的一种特殊情况,即按照两个表中的相同属性进行等值连接,且目标列中去掉了重复的属性列,但保留了所有不重复的属性列

查询每个学生的学号、姓名、选修的课程号、课程名及成绩信息

select s.sno,sname,c.cno,cname,grade from s,c,sc where sc.sno=s.sno and sc.cno=c.cno;

SQL之连接查询

2、自身连接查询

自身连接是通过把一个表定义两个不同别名的方法(即把一个表映射成两个表)来完成自身连接的。

求每一门课程的间接先修课

select first.cno as 课程号,first.cname as 课程名,second.pro as 间接先修课程号 from c as first,c as second where first.pro = second.cno;

SQL之连接查询

3、外连接查询

引例:

(1)查询每位同学的学号、姓名、选修课程和成绩姓名

select s.sno,sname,cname,grade from sc,s,c where sc.sno=s.sno and c.cno=sc.cno;

SQL之连接查询

在通常的连接操作中,只有满足连接条件的元组才能作为结果输出,如在引例(1)的结果表中没有关于091502、091505、091506三位学生的信息,原因在于他们没有选课,在选课表中没有相应的元组。

那么假设,我们一定要以学生表为主体列出每个学生的基本情况及其选课情况,若某个学生没有选课,则只输出其基本情况,其余选课情况为空值即可。此时我们就需要使用外连接(outer join)。

外连接的方式分类:

THETA方式:

THETA方式是使用where条件进行连接,对于THETA方式,为了与内连接区分开,必须通过在where子句中设置特殊的字符来实现对外部连接的处理。

ANSI方式:

ANSI方式则是使用outer join、on 等关键字配合连接条件完成连接查询操作。

3.1左外连接
from1 left outer join2 on1.=2.

左外连接的结果是显示表1中的所有记录和表2中与 表1.列 相同的记录

查询所有学生信息及选修课程的情况

select s.*,sc.cno from s left outer join sc on sc.sno=s.sno;

SQL之连接查询

3.2右外连接
from1 right outer join2 on1.=2.

右外连接的结果是显示表2中的所有记录和表1中与 表2.列 相同的记录

查询学生的详细信息及其选修课程的信息

select s.*,sc.cno from s right outer join sc on sc.sno=s.sno;

SQL之连接查询

3.3全外连接

全外连接一般没有什么意义,MySQL并不能直接支持全外连接,但是可以通过左右外连接的并集来模拟实现。

4、复合条件连接查询

在上面各个连接查询中,where子句中只有一个条件,where子句中有多个条件的连接操作,称为复合条件连接。

查询选修“180103”号课程且成绩在80分以上的所有学生的姓名

方式一:theta连接方式

select sname from sc,s where sc.sno=s.sno and cno=180103 and grade>80;

SQL之连接查询

方式二:ANSI 连接方式

select sname from sc join s on sc.sno=s.sno and cno=180103 and grade>80;

SQL之连接查询

查询平均成绩大于70分的同学的学号、姓名、选修课程名和成绩信息

select s.sno,sname,c.cno,grade from sc,c,s where sc.sno=s.sno and c.cno=sc.cno group by sno having avg(grade)>70;

SQL之连接查询

查询选修了“数据结构”的学生姓名、系部、成绩,并按成绩降序排列

select sname,sdept,grade from sc,s,c where sc.sno=s.sno and c.cno=sc.cno and cname='数据结构' order by grade desc;

SQL之连接查询

5、集合运算连接查询

有时候,用户希望 SQL 查询中利用关系代数中的集合运算(并、交、差)来组合关系,SQL为此提供了相应的运算符:union、intersect、except,分别对应于集合运算的

∪ 、 ∩ 、﹣。 ∪、∩、﹣。

查询学分不是64或 48的课程名称

(select c.cname from c where credit !=64 ) union (select c.cname from c where credit !=48 );

SQL之连接查询文章来源地址https://www.toymoban.com/news/detail-441309.html

总结

  1. 连接操作除了可以是两表连接,一个表于其自身连接外,还可以是两个以上的表进行连接,后者通常 称为多表连接。
  2. 对于不同的DBMS,支持的集合运算不同,例如MySQL只支持并运算,但是集合运算大都可以使用关系运算符进行替换或者使用嵌套查询,因此不必担心集合运算连接查询。

到了这里,关于SQL之连接查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字节二面:为什么SpringBoot的 jar 可以直接运行?我说因为内嵌了Tomcat容器,他让我出门左转。。

    在传统的Java应用程序开发和部署场景中,开发者往往需要经历一系列复杂的步骤才能将应用成功部署到生产环境。例如,对于基于Servlet规范的Java Web应用,开发完成后通常会被打包成WAR格式,然后部署到像Apache Tomcat、Jetty这样的Web容器中。这一过程中,不仅要管理应用本身的

    2024年04月08日
    浏览(31)
  • 大数据面试题:HBase为什么查询快

    面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:1)HBase为什么读快;2)HBase是根据rowkey查询,当数据量相当大的时候,是怎么读的很快的 参考答案: 1、基于LSM树的存储方式 HBase采用基于LSM树的存储方式,这种存储方式将数据分为内存和

    2024年02月12日
    浏览(33)
  • ElasticSearch(七):ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月08日
    浏览(68)
  • WebSocket 是什么原理?为什么可以实现持久连接?

    WebSocket 是一种用于实现持久连接的通信协议,它的原理和工作方式相对复杂,但我们可以尝试以尽可能简单和清晰的方式来解释它。 WebSocket 的原理 在理解 WebSocket 的工作原理之前,我们首先要了解 HTTP 协议的短连接性质。在传统的 HTTP 通信中,客户端发送一个请求到服务器

    2024年02月05日
    浏览(56)
  • ElasticSearch第七讲 ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月25日
    浏览(40)
  • ElasticSearch第七讲:ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月19日
    浏览(41)
  • Mysql8.0为什么取消了缓存查询的功能

    首先我们介绍一下 MySQL的缓存机制 【MySQL缓存机制】 简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。 但如果表中任何数据或是结构发生改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或

    2023年04月20日
    浏览(45)
  • mysql查询慢是为什么 怎么改善43.242.205.12

    MySQL查询速度慢是一个令人头痛的问题,它可能会导致应用程序性能下降,影响用户体验。为了解决这个问题,需要了解MySQL查询速度慢的原因,并采取相应的改善措施。 一、MySQL查询速度慢的原因43.242.205.1 查询语句不合理 不合理的查询语句是导致MySQL查询速度慢的常见原因

    2024年02月12日
    浏览(32)
  • 为什么SQL日志文件很大,该如何处理?

    SQL Server 日志文件是记录所有数据库事务和修改的事务日志文件。用 SQL 术语来说,此日志文件记录对数据库执行的所有 INSERT 、 UPDATE 和 DELETE查询操作。 如果数据库联机或恢复时日志已满,SQL Server 通常会发出 9002 错误。在这种情况下,数据库只能读取而不能更新。此篇文章

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包