⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

这篇具有很好参考价值的文章主要介绍了⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询,SQL,拿来即用。,数据库,mysql,自然连接,笛卡尔积,database

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询,SQL,拿来即用。,数据库,mysql,自然连接,笛卡尔积,database


⑧MySQL数据库查询


1. 多表关系

多表关系

  • 一对一 :在任意一方加入外键,关联另一方的主键,并设置外键为唯一(UNIQUE)。
  • 一对多(多对一) :在的一方建立外键,指向的一方的主键。
  • 多对多 :建立第三张表作为中间表,中间表至少包含两个外键,分别关联双方主键



2. 多表查询

多表查询

  • 在多张表中查询数据。
  • 笛卡尔积:两个集合,集合A 与 集合B中元素的所有组合情况,在多表查询时需要使用WHERE关键字JOIN ON关键字消除笛卡尔积。

🚀内连接 —— INNER JOIN

连接查询 —— 内连接

  • 内连接:

    • ①隐式内连接

      • SELECT 字段列表 FROM1,2 WHERE 连接条件...;
        
    • ②显示内连接

      • SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件...;
        
  • == 内连接查询的是两张表交集的部分 ==

  • ⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询,SQL,拿来即用。,数据库,mysql,自然连接,笛卡尔积,database

    • -- 演示:
      
      -- 查询员工姓名,以及关联的部门名称(隐式内连接)
      -- 表:员工表emp、部门表dept
      SELECT emp.name,dept.name 
      FROM emp,dept 
      WHERE emp.dept_id = dept.id;
      
      -- 查询员工姓名,以及关联的部门名称(显示内连接)
      -- 表:员工表emp、部门表dept
      SELECT emp.name,dept.name 
      FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
      
      



🚀左外连接 —— LEFT OUTER JOIN

连接查询 —— 左外连接

  • 外连接 —— 左外连接:

    • 查询表1所有数据,包含表1和表2交集部分的数据。

      • SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 连接条件...;
        
    • -- 演示:
      
      -- 查询emp表所有数据,以及对应部门信息(dept表数据)
      -- 左外连接实现
      SELECT emp.*,dept.name 
      FROM emp LEFT JOIN dept 
      ON emp.`dept_id` = dept.`id`;
      



🚀右外连接 —— RIGHT OUTER JOIN

连接查询 —— 右外连接

  • 外连接 —— 右外连接:

    • 查询表2所有数据,包含表1和表2交集部分的数据。

      • SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 连接条件...;
        
  • -- 演示:
    
    -- 查询emp表所有数据,以及对应部门信息(dept表数据)
    -- 右外连接实现
    SELECT emp.*,dept.name 
    FROM dept RIGHT JOIN emp 
    ON emp.`dept_id` = dept.`id`;
    



🚀自连接 —— JOIN

连接查询 —— 自连接

  • 自连接:

    • ①自连接查询,可以是内连接查询,也可以是外连接查询

      • SELECT 字段列表 FROM1 别名A JOIN1 别名B ON 连接条件...;
        
    • -- 演示
      
      -- 查询emp表员工 及其 所属领导的名字
      -- 使用内连接
      SELECT e1.`name` 员工,e2.`name` 领导
      FROM emp e1 JOIN emp e2 ON e1.`managerid` = e2.`id`;
      
      -- 查询emp表员工 及其 所属领导的名字,如果员工没有领导,也需要查询出来
      -- 使用外连接
      SELECT e1.`name` 员工,e2.`name` 领导
      FROM emp e1 LEFT JOIN emp e2 ON e1.`managerid` = e2.`id`;
      



🚀联合查询 —— UNION、UNION ALL

联合查询

  • UNION查询就是把多次查询的结果合并,行程新的结果集

    • -- 使用UNION,对结果去重
      -- 使用UNION ALL,不对结果去重
      -- 要求联合的多个查询字段列表的 类型与数量 需要保持一致
      SELECT 字段列表 FROM 表A ...
      UNION [ALL]
      SELECT 字段列表 FROM 表B ...;
      
  • -- 演示
    
    -- 查询薪资低于5000 以及 年龄大于50的员工
    -- 使用UNION,对结果去重
    -- 使用UNION ALL,不对结果去重
    SELECT * FROM emp WHERE emp.`salary` < 5000
    UNION
    SELECT * FROM emp WHERE emp.`age` > 50;
    



🚀子查询(嵌套查询)

子查询

  • 子查询:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询

    • SELECT * FROM1 WHERE 字段1 = (SELECT 字段1 FROM2);
      
    • 子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT

  • 子查询分类(根据子查询结果不同):

    • 标量子查询(子查询结果为单个值)

      • -- 演示
        
        -- ①标量子查询
        -- 1.查询“销售部”的所有员工信息
        SELECT * FROM emp 
        WHERE dept_id = (SELECT id FROM dept WHERE dept.`name` = '销售部');
        
        -- 2.查询在“方东白”之后入职的员工信息
        SELECT * FROM emp 
        WHERE entrydate > (SELECT entrydate FROM emp  WHERE NAME = '方东白');
        
    • 列子查询(子查询结果为一列)

      • 常见操作符:

        • IN:在指定的集合范围之内,多选一
        • NOT IN不在指定的集合范围之内。
        • ANY:子查询返回列表内,有任意一个满足即可
        • SOME与ANY相同,使用SOME的地方都可以使用ANY。
        • ALL:子查询返回列表的所有值都必须满足
      • -- 演示
        
        -- ②列子查询
        -- 1. 查询“销售部” 和 “市场部” 所有员工信息
        SELECT * FROM emp
        WHERE emp.`dept_id` IN(SELECT id FROM dept WHERE NAME IN('销售部','市场部'));
        
        -- 2. 查询比财务部所有人工资都高的员工信息
        SELECT * FROM emp 
        WHERE emp.`salary` > 
        	ALL(SELECT salary FROM emp WHERE dept_id = 
        		(SELECT id FROM dept WHERE dept.`name` = '财务部'));
        		
        -- 3. 查询比财务部 任意一人 工资高的员工信息
        SELECT * FROM emp 
        WHERE emp.`salary` > 
        	ANY(SELECT salary FROM emp WHERE dept_id = 
        		(SELECT id FROM dept WHERE dept.`name` = '财务部'));
        
    • 行子查询(子查询结果为一行)

      • -- 演示
        
        -- ③行子查询
        -- 查询与“张无忌” 薪资 以及 直属领导 相同的员工信息
        SELECT * FROM emp 
        WHERE (salary,managerid) = 
        (SELECT salary,managerid FROM emp WHERE NAME = '张无忌');
        
    • 表子查询(子查询结果为多行多列)

      • -- 演示
        
        -- ④表子查询
        -- 查询入职时间是“2006-01-01”之后入职的员工信息及其部门信息
        SELECT e.*,dept.name 
        FROM(SELECT * FROM emp WHERE emp.`entrydate` > '2006-01-01') e
        LEFT JOIN dept ON e.dept_id = dept.`id`;
        




⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询,SQL,拿来即用。,数据库,mysql,自然连接,笛卡尔积,database文章来源地址https://www.toymoban.com/news/detail-751575.html

到了这里,关于⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数据库MySQL(五):多表查询

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在则会各种联系。 一对多/多对一 案例:部门与员工的关系 关系:一个部门对应多个员工,一个员工对应一个部门 实现

    2024年02月08日
    浏览(15)
  • 数据库系统头歌实验二 SQL的多表查询

    数据库系统头歌实验二 SQL的多表查询

    第一关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表) 工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图

    2024年02月07日
    浏览(9)
  • 【MySQL数据库 | 第十三篇】多表查询

    【MySQL数据库 | 第十三篇】多表查询

    多表查询是指在一个SQL语句中使用多个表进行数据查询和操作。多表查询可以对数据表之间的关系进行查询,例如可以通过连接多个表来获取更完整的数据信息。关于单表查询我们也介绍过,已经整理成文章发布:【MySQL数据库 | 第九篇】DQL操作_我是一盘牛肉的博客-CSDN博客

    2024年02月08日
    浏览(19)
  • MySQL数据库基础(三):多表查询,子查询,开窗函数

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

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

    2024年02月12日
    浏览(15)
  • Navicat恢复数据库连接及查询sql的解决办法

    Navicat恢复数据库连接及查询sql的解决办法

    因为公司给电脑加域,导致使用新的用户账户,原先的很多配置都失效了,本篇是讲述一下如何恢复数据库连接工具Navicat的连接数据。 这里需要指出说明一下: Navicat的数据sql查询文件、备份文件存储在 C:UsersAdministratorDocumentsNavicatMySQLservers navicat的数据库链接信息存储在

    2024年02月08日
    浏览(44)
  • Mysql查询数据库连接状态及连接信息

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小、字符集、用户等等。下面总结了一些查看数据库相关信息的命令 查看显示所有数据库 查看当前使用的数据库 查看数据库使用端口 查看当前数据库大小 例如,我要查看INVOICE数据库的大小,那么可以通过下面

    2024年02月11日
    浏览(13)
  • Mysql数据库(五) Mysql命令行客户端:内连接查询、左连接查询、右连接查询、自连接查询、子查询

    Mysql数据库(五) Mysql命令行客户端:内连接查询、左连接查询、右连接查询、自连接查询、子查询

    目录 一、 连接查询 对多个表进行查询 1.0 数据准备 1.1 连接查询 1.2 内连接 INNER JOIN 1.3 左连接 LEFT JOIN 1.4 右连接 RIGHT JOIN 1.5 FULL OUTER JOIN 1.6 自连接查询 1.7 子查询-嵌套在查询中 在之前的文章当中,我们在 base_1 当中有了一个 stu 表,记录的是学生的name age height等信息 第一步

    2024年02月13日
    浏览(14)
  • 数据库多表查询

    数据库多表查询

    1、创建表格 2、插入数据 3.查询student表的所有记录 4.查询student表的第2条到4条记录 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 6.从student表中查询计算机系和英语系的学生的信息 7.从student表中查询年龄18~22岁的学生信息 由于表中没有年龄1

    2024年01月16日
    浏览(47)
  • 数据库多表查询作业

    数据库多表查询作业

    创建数据库 插入数据 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号(id)、姓名 (name)和院系(department)的信息 4.从student表中查询计算机系和英语系的学生的信息 5.从student表中查询年龄18~22岁的学生信息 6.从student表中查询每个院

    2024年02月16日
    浏览(7)
  • 数据库基础——7.多表查询

    数据库基础——7.多表查询

    这篇文章来讲一下数据库中的多表查询 目录 1. 一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 1.3 案例分析与问题解决 2. 多表查询分类讲解 2.1 等值连接 vs 非等值连接 2.1.1等值连接 2.1.2 非等值连接 2.2 自连接 vs 非自连接  2.3 内连接 vs 外连接  3.实

    2024年02月06日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包