索引和多表联查

本文介绍了数据库索引的创建与使用,包括单值、唯一和复合索引,以及主键索引的运用。探讨了如何通过索引来提升查询效率,并讲解了连接查询(如INNER JOIN、LEFT JOIN、RIGHT JOIN)和子查询的应用。同时,展示了如何处理多表联查,避免笛卡尔积,并使用IN操作符优化查询条件。内容深入浅出,对于理解数据库查询性能优化具有实践指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引

#创建单值索引
create index job_index on emp(job);
show index from emp;
#使用索引
select * from emp where job='经理';
#使用主键索引
select * from emp where empno=100;
#创建唯一索引
alter table emp add unique(ename);
show index from emp;
select * from emp where  ename ='jack';

#创建复合索引(最左特性)
alter table emp add index fuhe_index(ename,job,hiredate);
show index from emp;
#没有用到索引 explain 判断
explain
select * from emp where ename='jack' or job='员工';
select *from dept where dname='accounting' and loc='一区';
select * from emp where hiredate='2017-02-02';


#删除索引
alter table emp drop index fuhe_index


#多表联查 
#笛卡尔积
select * from dept,emp;
select * from dept,emp where dept.deptno=emp.deptno and dept.dname='accounting' ;

#连接查询join
select * from dept
#inner join
#工作中,常用的是left join小表驱动大表
left join
#right join 
emp on  dept.deptno=emp.deptno 
#where dept.dname ='accounting'
;

#子查询

select deptno from dept where dname='accounting';

select* from emp where deptno=(select deptno from dept where dname='accounting');

#查询办公地址在一区的员工信息
select * from dept,emp where dept.deptno=emp.deptno and dept.loc='一区';
select * from dept left join emp on dept.deptno=emp.deptno where dept.loc='一区';
select * from emp where deptno=(select deptno from dept where loc ='一区');
#查询办公地址在二区的员工信息
select * from dept a,emp b where a.deptno=b.deptno and a.loc='二区';
select * from dept a right join emp b on a.deptno=b.deptno where a.loc='二区';

#SELECT deptno FROM dept WHERE loc ='二区';(2,3) 返回多条数据用in
select * from emp where deptno in (select deptno from dept where loc ='二区');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值