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;

  • 相关阅读:
    SQL SERVER 2005 行转列
    为什么jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON
    Silverlight 布局控件
    python socket connection
    linux下缓存的查看/修改
    openstackflat 网络问题
    Fail to start neutronserver
    copy module
    python ConfigParser
    itertools 介绍
  • 原文地址:https://www.cnblogs.com/rmxd/p/11416328.html
Copyright © 2011-2022 走看看