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;

  • 相关阅读:
    phonegap(cordova)环境配置
    Mobile Web调试工具Weinre (reproduce)
    webstorm快捷键
    学习笔记:乘性操作符之求模
    消息队列原理笔记
    运维wiki
    supervisor 文档
    redis 批量删除 keys
    linux命令和工具
    urllib urllib2学习笔记
  • 原文地址:https://www.cnblogs.com/rmxd/p/11416328.html
Copyright © 2011-2022 走看看