全连接(笛卡尔积)

返回左表和右表中所有记录,如果某个表中没有与另一个表匹配的记录,则补充 NULL

SELECT
	* 
FROM
	department AS d, 
  employee AS e;

左连接(左外连接)

返回左表中所有记录以及右表中符合连接条件的记录,如果某个表中没有与另一个表匹配的记录,则补充 NULL

SELECT
	* 
FROM
	department AS d 
  LEFT JOIN employee AS e ON d.id = e.deptId;

右连接(右外连接)

返回右表中所有记录以及左表中符合连接条件的记录,如果某个表中没有与另一个表匹配的记录,则补充 NULL

SELECT
	* 
FROM
  employee as e 
  right join department as d on d.id = e.deptId;

内连接

只返回两个表中符合连接条件的匹配记录

SELECT 
  e.`name` as empname, d.`name` as dptname, c.`name` as companyname
from 
  employee as e 
  inner join department as d on d.id = e.deptId 
  inner join company c on d.companyId = c.id;

练习

-- 1. 创建一张 team 表,记录足球队,查询出对阵表
SELECT 
  t1.name 主场, t2.name 客场 
FROM 
  team as t1, team as t2
WHERE 
  t1.id != t2.id;

-- 2. 显示出所有员工的姓名、性别(使用男或女显示)、入职时间、薪水、所属部门(显示部门名称)、所属公司(显示公司名称)
SELECT 
  e.`name` 员工姓名, 
  case ismale 
    when 1 then '男' 
    else '女' 
    end 性别,
  e.joinDate 入职时间,
  e.salary 薪水,
  d.`name` 部门名称,
  c.`name` 公司名称
FROM 
  employee e 
  inner join department d on e.deptId = d.id
  inner join company c on d.companyId = c.id

-- 3. 查询腾讯和蚂蚁金服的所有员工姓名、性别、入职时间、部门名、公司名
SELECT 
  e.`name` 员工姓名, 
  case ismale 
    when 1 then '男' 
    else '女' 
    end 性别,
  e.joinDate 入职时间,
  e.salary 薪水,
  d.`name` 部门名称,
  c.`name` 公司名称
FROM 
  employee e 
  inner join department d on e.deptId = d.id
  inner join company c on d.companyId = c.id
WHERE 
  c.`name` in ('腾讯科技', '蚂蚁金服');

-- 4. 查询渡一教学部的所有员工姓名、性别、入职时间、部门名、公司名
SELECT 
  e.`name` 员工姓名, 
  case ismale 
    when 1 then '男' 
    else '女' 
    end 性别,
  e.joinDate 入职时间,
  e.salary 薪水,
  d.`name` 部门名称,
  c.`name` 公司名称
FROM 
  employee e 
  inner join department d on e.deptId = d.id
  inner join company c on d.companyId = c.id
WHERE 
  c.`name` like '%渡一%' AND d.`name` = '教学部';

-- 5. 列出所有公司员工居住的地址(要去掉重复)
select DISTINCT location from employee;
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 全连接(笛卡尔积)
  2. 2. 左连接(左外连接)
  3. 3. 右连接(右外连接)
  4. 4. 内连接
  5. 5. 练习