zoukankan      html  css  js  c++  java
  • MySQL的多表查询学习笔记

     

    一、案例准备  

    create table dept(
    id int primary key auto_increment,
    name varchar(20)
    );
    View Code
    insert into dept values(null, '财务部');
    insert into dept values(null, '人事部');
    insert into dept values(null, '科技部');
    insert into dept values(null, '销售部');
    View Code
    create table emp(
    id int primary key auto_increment,
    name varchar(20),
    dept_id int
    );
    View Code
    insert into emp values(null, '张三', 1);
    insert into emp values(null, '李四', 2);
    insert into emp values(null, '老王', 3);
    insert into emp values(null, '刘能', 5);
    View Code

    需求:查询出部门信息和部门所对应的员工信息

    二、笛卡尔积查询、内连接查询、左右外连接查询及全外连接查询

    ①笛卡尔积查询

    两张表相乘得出来的结果:select * from dept, emp;

    如果左边表有m条记录,右边有n条记录,则查询出来的结果就是m*n条。这些查询结果中包含大量错误的结果,通常不会使用这种查询。

    ②内连接查询

    左边表有且右边表也有的记录

    SQL:select * from dept d inner join emp e on e.dept_id=d.id;

    ③左外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录

    查询出部门所对应的员工信息, 同时列出那些没有员工的部门

    SQL:select * from dept d left join emp e on e.dept_id=d.id;

    ④右外连接查询:在内连接查询的基础上,加上右边表有而左边表没有的记录

    查询出部门所对应的员工信息, 同时列出那些没有部门的员工

    SQL:select * from dept d right join emp e on e.dept_id=d.id;

    ⑤全外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录 和 右边表有而左边表没有的记录。

      查询出部门所对应的员工信息,同时列出那些没有员工的部门及些没有部门的员工

    SQL:select * from dept d full join emp e on e.dept_id=d.id;(错误:mysql不支持全外连接查询

      通过union关键字来模拟全外连接查询

    SQL

    select * from dept left join emp on emp.dept_id = dept.id
    union
    select * from dept right join emp on emp.dept_id = dept.id;

  • 相关阅读:
    echarts配置折线图的点和线条的颜色
    Route的exact属性
    JS获取一个字符串中指定字符串第n次出现的位置
    谈谈react hooks的优缺点
    babel配置文件.babelrc详解
    react的Router的exact、path、component、strict属性
    FormData使用方法详解
    【转】将jmeter返回的Unicode转换成utf8
    不同场景设计非gui测试结果
    jmeter关联练习题(正则、jsonpath)--能做出来,关联就基本没问题了
  • 原文地址:https://www.cnblogs.com/rmxd/p/11416328.html
Copyright © 2011-2022 走看看