JavaWeb:MySQL进阶
多表设计
一对多(多对一)
外键
一对一
多对多
多表查询
内连接
外连接
子查询
-- 查询员工表
select * from emp;-- 查询部门表
select * from dept;-- 查询员工和部门
select * from emp, dept; -- 笛卡尔积select * from emp, dept where emp.dept_id = dept.id; -- 隐式内连接
select * from emp join dept on emp.dept_id = dept.id; -- 内连接(合集)select * from emp left join dept on emp.dept_id = dept.id; -- 左连接(左表所有 + 合集)
select * from emp right join dept on emp.dept_id = dept.id; -- 右连接(右表所有 + 合集)-- 子查询 4种
-- 一、标里子查询
-- 查询最早入职员工信息-- 1.查询最早入职的日期(最小的日期)select min(emp.entry_date) from emp ; -- group by entry_date-- 2.查询入职日期“2000-01-01”员工信息select * from emp where entry_date = '2000-01-01';-- 3.合并sqlselect * from emp where entry_date = (select min(emp.entry_date) from emp);
-- 二、列子查询
-- 查询“阮小五”入职后入职的员工信息-- 1.查询“阮小五”入职日期select entry_date from emp where name = '阮小五';-- 2.查询在“阮小五”入职日期之后的员工select * from emp where entry_date > '2015-01-01';-- 3.合并sqlselect * from emp where entry_date > (select entry_date from emp where name = '阮小五');-- 列子查询
-- 查询“教研部"、"咨询部"所有员工信息-- 1.查询“教研部"、"咨询部" idselect * from dept;select id from dept where name in ('教研部','咨询部2');-- 2.查询2,3部门下的员工信息select * from emp where dept_id in (2,3);-- 3.合并sqlselect * from emp where dept_id in (select id from dept where name in ('教研部','咨询部2'));-- 三、行子查询
-- 查询与 “李忠”薪资,以及职位都相同的员工信息-- 1.查询与 “李忠”薪资,以及职位select salary,job from emp where name = '李忠';-- 2.查询薪资为:5000和职位为:5的员工信息select * from emp where salary = 5000 and job = 5;select * from emp where (salary,job) = (5000, 5);-- 3.合并sqlselect * from emp where (salary,job) = (select salary,job from emp where name = '李忠');-- 四、表子查询
-- 查询入职日期是‘2006-01-01’之后的员工信息以及部门信息
-- 1.查询入职日期是‘2006-01-01’之后的员工信息(表1)select * from emp where entry_date > '2006-01-01';
-- 2.查询表1与部门交集select *from (select * from emp where entry_date > '2006-01-01') t1, dept t2where t1.dept_id = t2.id;
-- 或者select * from emp, dept where emp.dept_id = dept.id and emp.entry_date > '2006-01-01'
事务
介绍&操作
四大特性
索引
提高查询速度,有:主键,普通,聚合