Mysql之多表查询上篇

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

多表查询

什么是多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。

前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联

笛卡尔积(交叉连接)

在学习MySQL的表连接时,笛卡尔积是必须知道的一个概念。
在没有任何限制条件的情况下,两表连接必然会形成笛卡尔积。

如果表1有m行a列,表2有n行b列,两表无条件连接时会将两表里所有行两两组合到一起,所形成的表就有m*n行,a+b列。
如果表1或表2的记录数很多时,连接后会形成一张非常大的表,在这种大表里查询效率特别低,所以在数据库查询时,应尽量避免笛卡尔积的出现

产生笛卡尔积的条件

  1. 省略多个表的连接条件(或关联条件)
    2.连接条件(或关联条件)无效
    3.所有表中的所有行互相连接

避免笛卡尔积的方法

用where,添加连接条件

注意:
如果表中有相同的列,那么要在这列前面加上表的前缀Mysql之多表查询上篇,MySQL,mysql,数据库

多表查询的分类

1.等值连接 VS 非等值连接

等值连接

Mysql之多表查询上篇,MySQL,mysql,数据库

如果所示,这种的就是等值连接,表中有相同的列,并且列的值都对应相等

非等值连接

Mysql之多表查询上篇,MySQL,mysql,数据库

如图所示,这就是非等值连接的例子

扩展1表的别名

用表的别名

  1. 使用别名可以简化查询。
    2.列名前使用表名前缀可以提高查询效率

需要注意的是,如果我们使用了表的别名,在查询字段中、过滤条件中就只能使用别名进行代替, 不能使用原有的表名,否则就会报错

扩展2:连接多个表

连接 n个表,至少需要n-1个连接条件。
比如,连接三个表,至少需要两个连接条件

2.自连接与非自连接

扩展3:SQL语法标准

SQL的语法标准,主要的就是SQL92语法和SQL99语法
92语法就是1992年颁布的,99语法就是1999年颁布的
99语法比92语法更多,完善了一些92语法

Mysql之多表查询上篇,MySQL,mysql,数据库

内连接

内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

SQL92语法实现内连接
#SQL 92语法 实现内连接
SELECT employee_id, department_name
FROM employees e, departments d 
WHERE e.employee_id = d.department_id

Mysql之多表查询上篇,MySQL,mysql,数据库

SQL99语法实现内连接

99语法中,去掉了92语法的 ,
改成以JOIN ON的形式,来实现内连接

#SQL99语法实现内连接
SELECT employee_id, department_name, city
FROM employees e JOIN departments d
ON e.employee_id = d.department_id
JOIN locations l 
ON d.department_id = l.location_id;

实际上这里内连接,是省略了INNER, 这里默认是INNER,你也可以加上

#SQL99语法实现内连接
SELECT employee_id, department_name, city
FROM employees e INNER JOIN departments d
ON e.employee_id = d.department_id
JOIN locations l 
ON d.department_id = l.location_id;

外连接

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时

结果表中相应的列为空(NULL)。 如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。
如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表

注意:SQL92语法不支持实现外连接
所以我们采用SQL99语法来实现外连接
其实在JOIN前面,加一个OUTER,关键字便可以实现外连接

左外连接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

当然这里JOIN前面的OUTER, 可以省略
直接就LEFT JOIN

SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT JOIN departments d
ON (e.department_id = d.department_id) ;
右外连接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

当然这里JOIN前面的OUTER, 可以省略
直接就LEFT JOIN

SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT JOIN departments d
ON (e.department_id = d.department_id) ;
满外连接

满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据

SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
需要注意的是,MySQL不支持FULL JOIN

具体怎么实现,多表查询下篇将为大家介绍文章来源地址https://www.toymoban.com/news/detail-744836.html

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

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

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

相关文章

  • MySQL数据库基础(三):多表查询,子查询,开窗函数

    表与表之间的关系 在SQL语句中,数据表与数据表之间,如果存在关系,一般一共有3种情况: ① 一对一关系(高级) 比如有A、B两张表,A表中的每一条数据,在B表中有一条唯一的数据与之对应。 用户表user user_id(用户编号) 账号username 密码password 001 admin admin888 002 itheima

    2024年02月12日
    浏览(45)
  • ⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 多表关系 : 一对一 :在 任意一方 加入外键,关联另一方的主键,并设置外键为唯一(UNIQUE)。 一对多(

    2024年02月05日
    浏览(54)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(48)
  • [SQL Server]数据库入门之多表查询

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(58)
  • MySQL数据库——多表操作

    在日常的数据库使用过程中,我们处理的数据不只是单张表,而是需要我们同时处理多个表的数据,那么今天我将为大家分享关于MySQL的多表操作。 在学习多表操作之前,我们需要知道有哪些多表关系:一对一关系、一对多关系/多对一关系、多对多关系。 一对一关系是指一

    2024年02月14日
    浏览(50)
  • 【Mysql系列】——详细剖析数据库“索引”【上篇】

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法,数据库等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮

    2024年02月02日
    浏览(57)
  • 【MySQL多表查询】:让你的数据检索更高效

    前言 ✨ 欢迎来到小K的MySQL专栏,本节将为大家带来 MySQL 中多表查询相关知识的讲解 一、多表关系 ✨项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基

    2024年02月09日
    浏览(40)
  • [MySQL] MySQL复合查询(多表查询、子查询)

      前面我们学习了MySQL简单的单表查询。但是我们发现,在很多情况下单表查询并不能很好的满足我们的查询需求。 本篇文章会重点讲解MySQL中的 多表查询 、 子查询 和 一些复杂查询 。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积

    2024年02月04日
    浏览(37)
  • 连接查询(多表查询)——MySQL

    又称多表查询,当 查询的字段涉及多个表 的时候,就要用到连接查询 分类: 为表起别名: 提高语句的简洁度 区分多个重名字段 注意 :如果为表起了别名,则查询的字段就 不能使用原来的别名去限定 查询A、B 交集部分数据 语法: 隐式内连接 select 字段列表 from 表1,表

    2024年02月04日
    浏览(49)
  • SQL查询数据之多表(关联)查询

      数据表: 关联查询主要分为:(inner join)交叉关联、(left join)左关联、(right join)右关联 (inner join)交叉关联: 定义:(inner join)交叉关联只返回两个表联结相等的字段的行 语法:select * from 表1 inner join 表2 on 表1.字段号=表2.字段号 比如我要查学生表和成绩表的交叉

    2023年04月08日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包