景县做个油管的网站怎么做,如何申请百度定位地址,电商推广方法有哪些,高明骏域网站建设多表查询 内连接外连接自连接自连接查询联合查询 子查询 学习黑马MySQL课程#xff0c;记录笔记#xff0c;用于复习。 添加外键
alter table emp add constraint fk_emp_dept_id foreign key
(dept_id) references dept(id);多表查询
select * from emp , dept where emp… 多表查询 内连接外连接自连接自连接查询联合查询 子查询 学习黑马MySQL课程记录笔记用于复习。 添加外键
alter table emp add constraint fk_emp_dept_id foreign key
(dept_id) references dept(id);多表查询
select * from emp , dept where emp.dept_id dept.id;笛卡尔积
select * from empdept;内连接
1隐式内连接
select 字段列表 from 表1 , 表2 where 条件 ... ;
select emp.name , dept.name from emp , dept where emp.dept_id dept.id ;
#起别名 简化
select e.name,d.name from emp e , dept d where e.dept_id d.id;2显式内连接
select 字段列表 from 表1 [ inner ] join 表2 on 条件 ... ;
select e.name, d.name from emp e inner join dept d on e.dept_id d.id;注意 一旦为表起了别名就不能再使用表名来指定对应的字段了 隐式先做笛卡尔积然后过滤 显式先匹配链接条件再返回。性能和时间复杂度都是显式要好
外连接
1左外连接——相当于左表的所有数据
select 字段列表 from 表1 left [ outer ] join 表2 on 条件 ... ;
select e.*, d.name from emp e left outer join dept d on e.dept_id d.id;
# outer可以省略
select e.*, d.name from emp e left join dept d on e.dept_id d.id;2右外连接——相当于右表的所有数据
select 字段列表 from 表1 right [ outer ] join 表2 on 条件 ... ;
select d.*, e.* from emp e right outer join dept d on e.dept_id d.id;自连接
自连接查询
自连接查询就是把一张表连接查询多次。
select 字段列表 from 表A 别名A join 表A 别名B on 条件 ... ;
# 查询员工 及其 所属领导的名字
select a.name , b.name from emp a , emp b where a.managerid b.id;
# 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导, 也需要查询出来
# 用左外连接
select a.name 员工, b.name 领导 from emp a left join emp b on a.managerid b.id;联合查询
联合查询就是把多次查询的结果合并起来形成一个新的查询结果集。
select 字段列表 from 表A ...
union [ all ]
select 字段列表 from 表B ...;
# 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来.
select * from emp where salary 5000
union
select * from emp where age 50;对于联合查询的多张表的列数必须保持一致字段类型也需要保持一致。union all 会将全部的数据直接合并在一起union 会对合并之后的数据去重。
子查询
SQL语句中嵌套select语句称为嵌套查询又称子查询。
select * from t1 where columnl ( select column1 from t2 );根据子查询结果不同分为
子查询类型子查询结果标量子查询单个值列子查询一列行子查询一行表子查询多行多列
根据子查询位置不同分为
子查询类型where 之后from 之后select 之后标量子查询
-- 1. 查询 销售部 的所有员工信息
-- a. 查询 销售部 部门ID
select id from dept where name 销售部;-- b. 根据销售部部门ID, 查询员工信息
select * from emp where dept_id (select id from dept where name 销售部);列子查询
操作符描述in在指定的集合范围之内多选一not in不在指定的集合范围之内any子查询返回列表中有任意一个满足即可some与ANY等同使用SOME的地方都可以使用ANYall子查询返回列表的所有值都必须满足
select id from dept where name in(销售部,市场部);
select * from emp where dept_id in ( select id from dept where name in(销售部,市场部));行子查询 常用的操作符 、 、in 、not in。用法与行子查询类似。 表子查询 常用的操作符in 查询入职日期是 “2006-01-01” 之后的员工信息 , 及其部门信息 1.入职日期是 “2006-01-01” 之后的员工信息
select * from emp where entrydate 2006-01-01;2.查询这部分员工, 对应的部门信息
select e.*, d.* from (select * from emp where entrydate 2006-01-01) e left
join dept d on e.dept_id d.id ;