全连接(笛卡尔积)
返回左表和右表中所有记录,如果某个表中没有与另一个表匹配的记录,则补充 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;
MySql👉 单表基本查询
上一篇