笛卡尔积

笛卡尔积,举个例子,有几个球队,他们之间要踢球,每个球队都要与除啦自身踢个遍, 说白啦就是拿一个表中的一行去匹配另一个表的所有行

  1. SELECT t1.`name` 主场, t2.`name` 客场
  2. FROM football as t1, football as t2
  3. WHERE t1.u_id != t2.u_id

左连接

左连接,就是以其中一个表为基准,比对左的表,看哪一行符合条件当没有符合条件,左边哪一行最少出现一次

  1. -- 联表查询/左连接,以一张表为基准 查询左边的表,看哪一行符合条件, 没有符合条件为null
  2. -- department的每一行为基准 比对左边的表employee 看哪一行符合条件d.id = e.deptId
  3. -- 如果没有一行符合条件,左表的哪一行最少出现一次
  4. SELECT *
  5. FROM department AS d LEFT JOIN employee AS e
  6. ON d.id = e.deptId

右连接

以右边为基准,拿右边的每一行比对左表的每一行,看能否符合条件 ,当没有符合条件,右边哪一行最少出现一次

  1. -- 联表查询右连接
  2. -- 以右边为基准,拿右边的每一行比对左表的每一行,看能否符合条件 ,当没有符合条件,右边哪一行最少出现一次
  3. SELECT *
  4. FROM department AS d RIGHT JOIN employee AS e
  5. ON d.id = e.deptId

内连接

内连接就是条件必须满足,如果条件满足不了不能出现

  1. --联表查询-内连接-查询渡一教学部的所有员工姓名、性别、入职时间、部门名、公司名
  2. SELECT
  3. e.`name` 员工姓名,
  4. CASE
  5. e.ismale
  6. WHEN 1 THEN
  7. '男' ELSE '女'
  8. END 性别,
  9. e.joinDate 入职时间,
  10. d.`name` 部门,
  11. c.`name` 公司名
  12. FROM
  13. employee AS e
  14. INNER JOIN department AS d ON d.id = e.deptId
  15. INNER JOIN company AS c ON c.id = d.companyId
  16. WHERE
  17. c.`name` = '渡一教育'
  18. AND d.`name` = '教学部'

练习

  1. 联表查询-内连接-显示出所有员工的姓名、性别(使用男或女显示)、入职时间、薪水、所属部门(显示部门名称)、所属公司(显示公司名称)
  2. SELECT
  3. e.`name` 员工姓名,
  4. CASE
  5. e.ismale
  6. WHEN 1 THEN
  7. '男' ELSE '女'
  8. END 性别,
  9. e.joinDate 入职时间,
  10. e.salary 薪水,
  11. d.`name` 所属部门,
  12. c.`name` 所属公司
  13. FROM
  14. employee e
  15. INNER JOIN department d ON e.deptId = d.id
  16. INNER JOIN company c ON d.companyId = c.id
  1. --联表查询-内连接-查询腾讯和蚂蚁金服的所有员工姓名、性别、入职时间、部门名、公司名
  2. SELECT e.`name` 员工姓名,
  3. CASE
  4. e.ismale
  5. WHEN 1 THEN
  6. '男'
  7. ELSE
  8. '女'
  9. END 性别,
  10. e.joinDate 入职时间,
  11. d.`name` 部门名,
  12. c.`name` 公司名
  13. FROM employee AS e
  14. INNER JOIN department AS d ON d.id = e.deptId
  15. INNER JOIN company AS c ON c.id = d.companyId
  16. WHERE c.`name` IN('腾讯科技', '蚂蚁金服')