笛卡尔积
笛卡尔积,举个例子,有几个球队,他们之间要踢球,每个球队都要与除啦自身踢个遍, 说白啦就是拿一个表中的一行去匹配另一个表的所有行
SELECT t1.`name` 主场, t2.`name` 客场FROM football as t1, football as t2WHERE t1.u_id != t2.u_id
左连接
左连接,就是以其中一个表为基准,比对左的表,看哪一行符合条件当没有符合条件,左边哪一行最少出现一次
-- 联表查询/左连接,以一张表为基准 查询左边的表,看哪一行符合条件, 没有符合条件为null-- 以department的每一行为基准 比对左边的表employee 看哪一行符合条件d.id = e.deptId-- 如果没有一行符合条件,左表的哪一行最少出现一次SELECT *FROM department AS d LEFT JOIN employee AS eON d.id = e.deptId
右连接
以右边为基准,拿右边的每一行比对左表的每一行,看能否符合条件 ,当没有符合条件,右边哪一行最少出现一次
-- 联表查询右连接-- 以右边为基准,拿右边的每一行比对左表的每一行,看能否符合条件 ,当没有符合条件,右边哪一行最少出现一次SELECT *FROM department AS d RIGHT JOIN employee AS eON d.id = e.deptId
内连接
内连接就是条件必须满足,如果条件满足不了不能出现
--联表查询-内连接-查询渡一教学部的所有员工姓名、性别、入职时间、部门名、公司名SELECTe.`name` 员工姓名,CASEe.ismaleWHEN 1 THEN'男' ELSE '女'END 性别,e.joinDate 入职时间,d.`name` 部门,c.`name` 公司名FROMemployee AS eINNER JOIN department AS d ON d.id = e.deptIdINNER JOIN company AS c ON c.id = d.companyIdWHEREc.`name` = '渡一教育'AND d.`name` = '教学部'
练习
联表查询-内连接-显示出所有员工的姓名、性别(使用男或女显示)、入职时间、薪水、所属部门(显示部门名称)、所属公司(显示公司名称)SELECTe.`name` 员工姓名,CASEe.ismaleWHEN 1 THEN'男' ELSE '女'END 性别,e.joinDate 入职时间,e.salary 薪水,d.`name` 所属部门,c.`name` 所属公司FROMemployee eINNER JOIN department d ON e.deptId = d.idINNER JOIN company c ON d.companyId = c.id
--联表查询-内连接-查询腾讯和蚂蚁金服的所有员工姓名、性别、入职时间、部门名、公司名SELECT e.`name` 员工姓名,CASEe.ismaleWHEN 1 THEN'男'ELSE'女'END 性别,e.joinDate 入职时间,d.`name` 部门名,c.`name` 公司名FROM employee AS eINNER JOIN department AS d ON d.id = e.deptIdINNER JOIN company AS c ON c.id = d.companyIdWHERE c.`name` IN('腾讯科技', '蚂蚁金服')
