门户网站界面设计模板下载,新干做网站,电子商务企业 网站前台建设 苏宁,赣州网站建设-赣州做网站个人简介#xff1a;Java领域新星创作者#xff1b;阿里云技术博主、星级博主、专家博主#xff1b;正在Java学习的路上摸爬滚打#xff0c;记录学习的过程~ 个人主页#xff1a;.29.的博客 学习社区#xff1a;进去逛一逛~ 内连接、外连接、自连接、子查询、多表查询 ⑧… 个人简介Java领域新星创作者阿里云技术博主、星级博主、专家博主正在Java学习的路上摸爬滚打记录学习的过程~ 个人主页.29.的博客 学习社区进去逛一逛~ 内连接、外连接、自连接、子查询、多表查询 ⑧MySQL数据库查询1. 多表关系2. 多表查询内连接 —— INNER JOIN左外连接 —— LEFT OUTER JOIN右外连接 —— RIGHT OUTER JOIN自连接 —— JOIN联合查询 —— UNION、UNION ALL子查询嵌套查询 ⑧MySQL数据库查询 1. 多表关系
多表关系
一对一 在任意一方加入外键关联另一方的主键并设置外键为唯一UNIQUE。一对多多对一 在多的一方建立外键指向一的一方的主键。多对多 建立第三张表作为中间表中间表至少包含两个外键分别关联双方主键。 2. 多表查询
多表查询
在多张表中查询数据。笛卡尔积两个集合集合A 与 集合B中元素的所有组合情况在多表查询时需要使用WHERE关键字或 JOIN ON关键字消除笛卡尔积。 内连接 —— INNER JOIN
连接查询 —— 内连接 内连接 ①隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 连接条件...;②显示内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;内连接查询的是两张表交集的部分 -- 演示-- 查询员工姓名以及关联的部门名称隐式内连接
-- 表员工表emp、部门表dept
SELECT emp.name,dept.name
FROM emp,dept
WHERE emp.dept_id dept.id;-- 查询员工姓名以及关联的部门名称显示内连接
-- 表员工表emp、部门表dept
SELECT emp.name,dept.name
FROM emp INNER JOIN dept ON emp.dept_id dept.id; 左外连接 —— LEFT OUTER JOIN
连接查询 —— 左外连接 外连接 —— 左外连接 ①查询表1所有数据包含表1和表2交集部分的数据。 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件...;-- 演示-- 查询emp表所有数据以及对应部门信息dept表数据
-- 左外连接实现
SELECT emp.*,dept.name
FROM emp LEFT JOIN dept
ON emp.dept_id dept.id;右外连接 —— RIGHT OUTER JOIN
连接查询 —— 右外连接 外连接 —— 右外连接 ①查询表2所有数据包含表1和表2交集部分的数据。 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 连接条件...;-- 演示-- 查询emp表所有数据以及对应部门信息dept表数据
-- 右外连接实现
SELECT emp.*,dept.name
FROM dept RIGHT JOIN emp
ON emp.dept_id dept.id;自连接 —— JOIN
连接查询 —— 自连接 自连接 ①自连接查询可以是内连接查询也可以是外连接查询 SELECT 字段列表 FROM 表1 别名A JOIN 表1 别名B ON 连接条件...;-- 演示-- 查询emp表员工 及其 所属领导的名字
-- 使用内连接
SELECT e1.name 员工,e2.name 领导
FROM emp e1 JOIN emp e2 ON e1.managerid e2.id;-- 查询emp表员工 及其 所属领导的名字,如果员工没有领导也需要查询出来
-- 使用外连接
SELECT e1.name 员工,e2.name 领导
FROM emp e1 LEFT JOIN emp e2 ON e1.managerid e2.id;联合查询 —— UNION、UNION ALL
联合查询 UNION查询就是把多次查询的结果合并行程新的结果集 -- 使用UNION,对结果去重
-- 使用UNION ALL,不对结果去重
-- 要求联合的多个查询字段列表的 类型与数量 需要保持一致
SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;-- 演示-- 查询薪资低于5000 以及 年龄大于50的员工
-- 使用UNION,对结果去重
-- 使用UNION ALL,不对结果去重
SELECT * FROM emp WHERE emp.salary 5000
UNION
SELECT * FROM emp WHERE emp.age 50;子查询嵌套查询
子查询 子查询SQL语句中嵌套SELECT语句称为嵌套查询又称子查询。 SELECT * FROM 表1 WHERE 字段1 (SELECT 字段1 FROM 表2);子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 。 子查询分类根据子查询结果不同 ①标量子查询子查询结果为单个值 -- 演示-- ①标量子查询
-- 1.查询“销售部”的所有员工信息
SELECT * FROM emp
WHERE dept_id (SELECT id FROM dept WHERE dept.name 销售部);-- 2.查询在“方东白”之后入职的员工信息
SELECT * FROM emp
WHERE entrydate (SELECT entrydate FROM emp WHERE NAME 方东白);②列子查询子查询结果为一列 常见操作符 IN在指定的集合范围之内多选一。NOT IN不在指定的集合范围之内。ANY子查询返回列表内有任意一个满足即可。SOME与ANY相同使用SOME的地方都可以使用ANY。ALL子查询返回列表的所有值都必须满足。 -- 演示-- ②列子查询
-- 1. 查询“销售部” 和 “市场部” 所有员工信息
SELECT * FROM emp
WHERE emp.dept_id IN(SELECT id FROM dept WHERE NAME IN(销售部,市场部));-- 2. 查询比财务部所有人工资都高的员工信息
SELECT * FROM emp
WHERE emp.salary ALL(SELECT salary FROM emp WHERE dept_id (SELECT id FROM dept WHERE dept.name 财务部));-- 3. 查询比财务部 任意一人 工资高的员工信息
SELECT * FROM emp
WHERE emp.salary ANY(SELECT salary FROM emp WHERE dept_id (SELECT id FROM dept WHERE dept.name 财务部));③行子查询子查询结果为一行 -- 演示-- ③行子查询
-- 查询与“张无忌” 薪资 以及 直属领导 相同的员工信息
SELECT * FROM emp
WHERE (salary,managerid)
(SELECT salary,managerid FROM emp WHERE NAME 张无忌);④表子查询子查询结果为多行多列 -- 演示-- ④表子查询
-- 查询入职时间是“2006-01-01”之后入职的员工信息及其部门信息
SELECT e.*,dept.name
FROM(SELECT * FROM emp WHERE emp.entrydate 2006-01-01) e
LEFT JOIN dept ON e.dept_id dept.id;