多表查询
表用逗号隔开,查询结果相当于笛卡尔积,可以通过增加条件来消除无效的结果
select * from tb_emp,tb_dept where tb_emp.dept_id=tb_dept.id;
连接查询
内连接:相当于查询交集部分的数据
外连接:
左外链接:查询左表数据
右外链接:查询右表数据
内连接
语法
//隐式内链接
select 字段列表 from 表一,表二 where 条件;
//显式内连接
select 字段列表 from 表一 [inner] join 表二 on 连接条件;
例子
# 查询员工姓名及其所属部门,隐式(经常)
select tb_emp.name,tb_dept.name
from tb_dept,tb_emp where tb_emp.dept_id=tb_dept.id;
# 查询员工姓名及其所属部门,显式
select tb_emp.name,tb_dept.name
from tb_emp inner join tb_dept on tb_emp.dept_id=tb_dept.id;
外连接
左外连接:
select 字段列表 from 表一 left [outer] join 表二 on 连接条件;
右外连接:
select 字段列表 from 表一 right [outer] join 表二 on 连接条件;
select tb_emp.name,tb_dept.name
from tb_emp left join tb_dept on tb_emp.dept_id=tb_dept.id;
select tb_emp.name,tb_dept.name
from tb_dept right join tb_emp on tb_emp.dept_id=tb_dept.id;
子查询
SQL语句中嵌套select语句,称为嵌套查询或者子查询,其外部语句可以是select/delete/insert/update等,最常用的外部语句是select
分类
标量子查询 | 子查询返回的结果为单个值 |
---|---|
列子查询 | 子查询返回的值为一列 |
行子查询 | 子查询返回的值为一行 |
表子查询 | 子查询返回的值为多行多列 |
标量子查询
# 标量子查询
# 查询教研部的所有员工信息
select * from tb_emp where dept_id=(select id from tb_dept where name ='教研部');
# 查询在方东白入职之后的员工信息
select *
from tb_emp where entrydate > (select entrydate from tb_emp where name ='方东白');
列子查询
#列子查询
# 查询教研部和咨询部的所有员工信息
select *
from tb_emp where dept_id in (select id from tb_dept where name='教研部' or name='咨询部');
行子查询
#行子查询
#常见的操作符:=,<>,in,not in
# 查询与韦一笑的入职日期及职位都相同的员工信息
select *
from tb_emp where (entrydate,job)=(select entrydate,job from tb_emp where name='韦一笑');
表子查询
# 表子查询
# 查询入职日期是2006-01-01之后的员工信息,及部门名称
# 1.查询入职日期2006-01-01之后的员工信息
select * from tb_emp where entrydate >'2006-01-01';
# 2.查询这部分员工信息和部门
select e.*,d.name from (select * from tb_emp where entrydate >'2006-01-01') e,tb_dept d where e.dept_id=d.id;
事务
开启事务:start transaction; / begin;
提交事务:commit;
回滚事务:rollback;
索引
索引****是帮助数据库高校获取数据的数据结构**
语法:
#创建索引
create [unique] index 索引名 on 表名(字段名,...)
#查看索引
show index from 表名;
#删除索引
drop index 索引名 on 表名;
注意事项:
主键字段,在建表的时候,会自动创建主键索引
添加唯一约束时,数据库实际上会添加唯一索引
标签:数据库,查询,dept,emp,tb,id,select From: https://www.cnblogs.com/gyg1222/p/17973200