SQL语句多表联查的实现方法示例

 更新时间:2022年04月15日 16:25:02   作者:杂乱无章-Jessues  
多表联合检索可以通过连接运算来完成,而连接运算又可以通过广义笛卡尔积后再进,下面这篇文章主要给大家介绍了关于SQL语句多表联查实现的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

最近面试实习生,发现一般来说,公司喜欢通过一些 SQL 语句来考察你对数据库的使用熟不熟悉。所以我来总结一下我在面试中遇到多表联查是怎么联查的。

三表联查

首先来说多表联查的一些知识点。

多表是指等于或者多余三个表以上的数据库查询。多表联查的类型有:

  • 内连接:join,inner join
  • 外连接:left join,left outer join,right join,right outer join,union
  • 交叉连接:cross join

解释一下,外连接是指将两个表进行合并,如果有不相同的列,那么另外一个表将显示 null。而内连接是指内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。也就是说,运算符可以是 =,也可以是 >、>=、<=、<、!>、!<和<>。

内连接

假如我们有两个表

student.table
id name clsId
1  tjc    1
2  zhangsan    2
3 李四    3
4  刘五    4
5  黄六    5
class.table
clsId clsName
1        软件1班
2        软件2班
3        软件3班
4        软件4班

为了查询上面两个表,我们可以使用两种查询语句:

select * from student as s,class as as c where s.clsId = class.clsId
select * from student as s inner join class as c on s.clsId = class.clsId

两种结果都是:

id name clsId clsId clsName

1  tjc    1        1        软件1班

2  zhangsan    2        2        软件2班

3 李四    3        3        软件3班

4  刘五    4        4        软件4班

外连接

外连接跟内连接不同之处,如果查询的表中,如果通过关联标示符中,一个表的数据而另外一个表没有响应的数据项,那么就显示 null。

左连接

查询 SQL 语句为:

select * from student as s left join class as c on s.clsId = c.clsId 

以左表为基准,如果右表没有相应的数据项,那么右表显示为 null。

右连接

select * from student as s right join class as c on s.clsId = c.clsId 

以右表为基准,如果左表没有相应的数据项,那么左表显示为 null。

全连接

select * from student as s full outer join class c on s.clsId = c.clsId 

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

交叉连接

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

select * from student as s cross join class as c order by s.id

附:多表联合查询训练

示例:求既学过“001”号课又学过 “002”号课的所有学生的学号

Select S1.S# From SC S1, SC S2
Where S1.S# = S2.S# and S1.C#=‘001'
and S2.C#=‘002 ;

示例:求“001”号课成绩比“002”号课成绩高的所有学生的学号

Select S1.S# From SC S1, SC S2
Where S1.S# = S2.S# and S1.C#=‘001'
and S2.C#=‘002' and S1.Score > S2.Score;

总结

到此这篇关于SQL语句多表联查实现的文章就介绍到这了,更多相关SQL语句多表联查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MYSQL数据库导入数据时出现乱码的解决办法

    MYSQL数据库导入数据时出现乱码的解决办法

    我是用的最后一种方法,前面三种解决MYSQL导入数据乱码的方法没试过,东莞SEO推荐大家直接使用第四种方法处理MYSQL导入中文数据时的乱码问题。
    2011-01-01
  • wamp中mysql安装时能启动重启后无法启动的解决办法

    wamp中mysql安装时能启动重启后无法启动的解决办法

    这篇文章主要介绍了wamp中mysql安装时能启动重启后无法启动的解决办法 ,需要的朋友可以参考下
    2018-08-08
  • mysql 窗口函数 ROW_NUMBER、NTILE详解

    mysql 窗口函数 ROW_NUMBER、NTILE详解

    这篇文章主要介绍了mysql 窗口函数 ROW_NUMBER、NTILE,本文通过sql语句给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • MySQL触发器概念、原理与用法详解

    MySQL触发器概念、原理与用法详解

    这篇文章主要介绍了MySQL触发器概念、原理与用法,结合实例形势详细分析了mysql触发器相关概念、原理、创建、用法及操作注意事项,需要的朋友可以参考下
    2019-07-07
  • MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因

    MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因

    腾讯云数据库 MySQL 的只读实例出现了同步延迟,但是监控的延迟时间显示为 0,而且延迟的 binlog 距离非 0,且数值越来越大。临时解决之后,仔细想了一想,Seconds_Behind_Master 虽然计算方式有点坑,但是出现这么“巨大”的误差还是挺奇怪的,本文就来分析下这个问题
    2021-06-06
  • MySQL实现两张表数据的同步

    MySQL实现两张表数据的同步

    本文将介绍mysql 触发器实现两个表的数据同步,需要学习MySQL的童鞋可以参考。
    2016-10-10
  • 详解 MySQL的FreeList机制

    详解 MySQL的FreeList机制

    这篇文章主要介绍了MySQL的FreeList机制的相关资料,帮助大家更好的理解和使用MySQL 数据库,感兴趣的朋友可以了解下
    2020-11-11
  • mysql中用于数据迁移存储过程分享

    mysql中用于数据迁移存储过程分享

    mysql 数据迁移用的一个存储过程,需要的朋友可以收藏下。
    2011-05-05
  • MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    这篇文章主要给大家介绍了关于MySQL中通过EXPLAIN如何分析SQL的执行计划的相关资料,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的安康学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • MySQL深分页问题及三种解决方案

    MySQL深分页问题及三种解决方案

    本文主要介绍了MySQL深分页问题及三种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论