`

多表连接查询 (转)

 
阅读更多

本文主要列举两张和三张表来讲述多表 连接查询

新建两张表:

表1:student  截图如下:

表2:course  截图如下:


(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)

一、外连接

外连接可分为:左连接、右连接、完全外连接。

1、左连接  left join 或 left outer join

SQL语句:select * from student left join course on student.ID=course.ID

执行结果:

左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).

注:此时我们不能说结果的行数等于左表数据的行数。当然此处查询 结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。

2、右连接  right join 或 right outer join

SQL语句:select * from student right join course on student.ID=course.ID

执行结果:

右外连接包含right join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)。

注:同样此时我们不能说结果的行数等于右表的行数。当然此处查询 结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。

3、完全外连接  full join 或 full outer join

SQL语句:select * from student full join course on student.ID=course.ID

执行结果:

完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)。

二、内连接  join 或 inner join

SQL语句:select * from student inner join course on student.ID=course.ID

执行结果:

inner join 是比较运算符,只返回符合条件的行。

此时相当于:select * from student,course where student.ID=course.ID

三、交叉连接 cross join

1.概念:没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

SQL语句:select * from student cross join course

执行结果:

如果我们在此时给这条SQL加上WHERE子句的时候比如SQL:select * from student cross join course where student.ID=course.ID

此时将返回符合条件的结果集,结果和inner join所示执行结果一样。

四、两表关系为一对多,多对一或多对多时的连接语句

当然上面两表为一对一关系,那么如果表A和表B为一对多、多对一或多对多的时候,我们又该如何写连接SQL语句呢?

其实两表一对多的SQL语句和一对一的SQL语句的写法都差不多,只是查询 的结果不一样,当然两表也要略有改动。

比如表1的列可以改为:

Sno Name Cno

表2的列可以改为:

Cno CName

这样两表就可以写一对多和多对一的SQL语句了,写法和上面的一对一SQL语句一样。

下面介绍一下当两表为多对多的时候我们该如何建表以及些SQL语句。

新建三表:

表A:  student 截图如下:

表B:  course 截图如下:

表C:  student_course 截图如下:

一个学生可以选择多门课程,一门课程可以被多个学生选择,因此学生表student和课程表course之间是多对多的关系。

当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。

SQL语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

执行结果:

此条SQL执行的结果是学生选课的情况。

 

分享到:
评论

相关推荐

    hql多表查询

    HQL支持多种查询方式,包括单表查询、多表查询、连接查询等。其中,多表查询是处理复杂数据关系的关键技术,它允许开发者在一个查询语句中同时操作多个表,从而提高数据处理的效率和查询的灵活性。多表查询通常涉及...

    WinForm+SQL多表联合自定义查询

    本示例中的“WinForm+SQL多表联合自定义查询”是一个结合了两者的技术,允许用户通过WinForm界面进行自定义的多表联合查询。在实际开发中,这样的功能对于数据检索和分析至关重要,特别是在处理大型复杂数据库时。 ...

    asp.net mvc多表查询的方法

    在ASP.NET MVC中,最直接的多表查询方式是通过编写SQL语句,利用JOIN操作连接多个表。例如,假设我们有两个表:`Users`和`Orders`,用户表包含用户信息,订单表记录用户的购买记录。可以使用以下SQL JOIN语句: ```...

    多工作簿多工作表数据查询(通用、简易1、简易2)_excel_通用查询_VBa_

    在Excel中进行多工作簿多工作表的数据查询是数据分析中常见的需求,特别是在处理大量分散的数据时。本主题将深入探讨三种方法,以帮助用户高效地完成这一任务,这些方法包括通用查询、简易方法1和简易方法2。我们将...

    支持连表查询的mybatis-plus

    2. **MyBatis-Plus中的连表查询**:MP通过`Wrapper`类提供的`leftJoin()`、`rightJoin()`等方法,实现了对这些连接查询的封装。`Wrapper`是一个条件构造器,可以构建复杂的SQL查询语句。例如,你可以创建一个`...

    易语言源码ACCESS数据库多表关联查询例程.rar

    在多表关联查询中,我们需要连接两个或多个表格,根据它们之间的关系(如共享的主键或外键)来获取更复杂的数据信息。 在"源码使用说明.txt"中,很可能是对这个例程的详细解释,包括如何运行、如何理解代码结构,...

    kettle全量多表数据同步

    ### Kettle全量多表数据同步 #### 一. 建立资料库 在进行全量多表数据同步之前,首先需要建立一个资源库来存放所有的转换和作业。资源库是Kettle的一个核心概念,它用于存储和管理转换、作业和其他与数据处理相关...

    sql查询多表查询和子查询

    在SQL查询中,多表查询和子查询是两个非常重要的概念,它们允许我们从多个相关的数据源中获取信息。在数据库管理系统中,处理复杂的数据分析和报表生成往往离不开这两个技术。 首先,我们来讨论多表查询。在单一表...

    sql优化 联表查询

    本篇将深入探讨“sql优化”与“左连接查询”的相关知识点,以及如何提升联表查询的效率。 首先,我们要理解SQL优化的重要性。随着数据库规模的增长,不恰当的查询设计可能导致性能瓶颈,增加服务器负载,影响整个...

    权限管理 三表连接

    接下来,我们转向“三表连接”这个概念,这在数据库设计中是常见的数据查询方法。在关系型数据库中,当数据分布在多个表中时,为了获取完整的信息,通常需要通过连接(JOIN)操作来合并这些表。在学校的上下文中,...

    连接查询和分组查询.zip

    在SQL中,连接查询用于合并来自多个表的数据,这些数据共享一个或多个共同的字段。有几种类型的连接:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。内连接返回两个表中...

    SqlServer表结构转oracle表结构

    关键类可能包括数据库连接类、SQL查询类以及表结构迁移类等。 7. **注意事项**:转换过程中需要注意兼容性问题,如SQL Server特有的特性(如clr存储过程)在Oracle中可能不支持。此外,数据迁移不仅仅是结构的迁移...

    SQL查询相关技术(常用SQL查询技术、比较逻辑运算符查询、SQL关键字查询、表结构与性能、时间与谓词、聚合函数、子查询与连接查询、交叉表、常用数据操作高级应用、试图存储过程和触发器的使用)

    连接查询(如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)则用于合并来自多个表的数据。 8. **交叉表**:交叉表,也称为透视表,通过行和列的交互排列展示数据,通常涉及使用SQL的CROSS JOIN或PIVOT操作。 9. ...

    kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用

    在Kettle8中,模拟表输入实际上可能指的是“表输入”步骤,它可以连接到数据库并执行SQL查询来获取数据。当需要动态决定查询的表名时,我们可以利用Kettle的变量功能。变量提供了一种方式来存储和传递值,这些值可以...

    sqlserver 支持多表联合查询分页存储过程

    1. **多表联合查询**:通常涉及到多个表之间的连接操作。 2. **分页**:确保能够正确地返回特定页的数据记录。 3. **灵活配置**:允许用户自定义查询条件、排序方式等。 ### 二、参数详解 #### 1. 输入参数 - **@...

    mybatis多表查询.zip

    常见的多表查询操作包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。MyBatis允许我们在Mapper XML文件或注解中编写这些SQL语句,以实现多表数据的联查。 MyBatis中的...

    多线程下mysql连接数过多解决demo

    在多线程环境中,MySQL连接数过多的问题是一个常见的性能瓶颈,尤其在高并发的应用场景下。这通常是由于每个线程创建一个独立的数据库连接导致的,当并发线程数量增加时,连接池中的连接数量也随之增加,如果超过...

    HQL 连接查询

    1. **语法差异**:隐式连接底层将转换为SQL92的内连接,而显式连接将转换为SQL99的多表连接。这意味着在某些数据库中,如果它们不支持SQL99语法,可能会导致查询失败。 2. **返回结果的不同**:当HQL语句中省略`...

    插入排序-16-内连接查询.ev4.rar

    在SQL中,连接查询用于合并来自两个或更多表的数据,基于这些表之间的相关列之间的关系。连接查询主要有以下几种类型:内连接、左连接、右连接和全外连接。 **内连接查询**: 内连接(INNER JOIN)返回两个表中存在...

    Oracle 12CR2查询转换教程之表扩展详解

    此外,特定的查询结构,如外连接,可能会阻止优化器使用表扩展。在这种情况下,可以使用`expand_table`提示来强制优化器使用或忽略表扩展,但这并不能绕过语义检查。 表扩展在处理星型查询等场景时尤其有用。比如,...

Global site tag (gtag.js) - Google Analytics