• sql语句之多表查询


    文章目录


    一、笛卡尔积(交叉连接) ---->cross join

    1、概念

     笛卡尔积又称为“交叉连接”,将两个表中所有数据行。返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
    (相当于合并两张表单为一张,表单中所有字段都保存展示)
    
    • 1
    • 2

    例如,A={a,b},B={0,1,2} 则
    AxB={,,,,,,}
    BxA={<0,a>,<0,b>,<1,a>,<1,b>,<2,a>,<2,b>}

    2. 语法

    在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用’,’

    SELECT * FROM table1 CROSS JOIN table2;

    SELECT * FROM table1 JOIN table2;

    SELECT * FROM table1 , table2;

    3.示例

    1. 示例1、合并两个表内容(纯粹连接查询)

      select * from employees,dept_emp;

    在这里插入图片描述
    在这里插入图片描述

    二、内连接---->inner join

    1、概念

      在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件INNER JOIN被划分在一起。
    
    • 1

    (1)、必须有等值条件;
    (2)、内连接可能会丢失信息;
    (内连接是从结果表中删除与其他被连接表中没有匹配行的所有行)
    (3)、重点:内连接,只查匹配行。

    2. 语法

    第一种:只使用where

    SELECT * FROM table1 a,table2 b where a.id=b.id ;

    第二种:join…on

    SELECT * FROM table1 a JOIN table2 b on a.id=b.id;

    第三种:inner join … on

    SELECT * FROM table1 a inner join table2 b on a.id=b.id;

    3.示例

    select * from salaries a,dept_manager b where a.emp_no=b.emp_no;
    
    
    select * from salaries a join dept_manager b on a.emp_no=b.emp_no;
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    三、外链接---->outer join

    1、概念

     分为左外连接( LEFT OUTER JON )和右连接(RIGHT OUTER JOIN),
     即除了返回符合连接条件的结果之外,
     还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
    
    • 1
    • 2
    • 3

    1、左外连接 left inner join
    左边主表,左所有数据都显示,右边显示相关联 ,没有数据显示null
    2、右外连接 right inner join
    右边主表,右所有数据都显示,左边显示相关联 ,没有数据显示null

    2. 语法

    SELECT * FROM table1 a left join table2 b on a.id=b.id ;

    SELECT * FROM table1 a right join table2 b on a.id=b.id;

    3.示例

    (1)两张表以左表为准

    select * from salaries a left join dept_manager b on a.emp_no=b.emp_no;
    
    • 1

    在这里插入图片描述
    (2)三张表
    A left join B on A.id=B.id left join C on B.code=C.code

    SELECT last_name, first_name, dept_name
    FROM employees a LEFT JOIN dept_emp b ON a.emp_no=b.emp_no
    LEFT JOIN departments c ON b.dept_no=c.dept_no;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    四、联合连接---->union

    1、概念

     两个sql语句,中间用union连接
     union all 分别查看&不去重
    
    • 1
    • 2

    2.示例

    select device_id, gender, age, gpa
    from user_profile
    where university='山东大学'
    
    union all
    
    select device_id, gender, age, gpa
    from user_profile
    where gender='male'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    在公司逮到一个阿里10年的测试开发,聊过之后大彻大悟...
    Python学习基础笔记七十——模块和库1
    数据在内存中的存储
    C++初阶学习第一弹——C++入门(上)
    基于高效多分支卷积神经网络的生长点精确检测与生态友好型除草
    HttpServletResponse实战之下载文件与动态验证码【Javaweb】
    JAVA计算机毕业设计信管专业毕业生就业管理信息系统Mybatis+源码+数据库+lw文档+系统+调试部署
    JAVA实现QQ登录、注册、修改密码等功能(美化版)
    Linux下C++使用Protobuf的安装步骤(vscode)
    第四章 作业【数据库原理】
  • 原文地址:https://blog.csdn.net/jiey0407/article/details/126080218