MySQL--day04

索引

概述

1.好处:给加完索引的列,提高查询效率

2.坏处:索引本质上就是一张表,如果表的体积太大,比较占内存

3.主键本身就有索引---唯一索引

分类:

单值索引:
#一个索引只包含着一个列
CREATE INDEX index_ename ON emp(ename)
复合索引:

最左特性:如果查找的字段中没有最左边的字段,索引就会失效

#一个索引包含着多个列
ALTER TABLE emp ADD INDEX loc_index(sal,job)
唯一索引:
#创建 唯一索引:索引列的值不能重复
ALTER TABLE emp ADD UNIQUE(hiredate)

展示索引和观察索引有没有生效

show index from 表名  #展示表中的所有索引
expiain#用来观察索引有没有生效,主要看key和possible_key
select * from emp where ename='jack'

多表联合

表的关系:一对一,一对多,多对一,多对多

尽量少使用多表查询,多表查询中会生成一个巨大的结果集,非常耗费内存

笛卡尔积

select * from emp,dept#查出两表中的所有数据
select * from emp,dept
where emp.deptno=dept.deptno#两表的关联关系
and dept.dname='Java开发'#查询时,最好带上前面的表名

#select  emp.* from emp,dept#只查询emp表中的数据
SELECT  dept.* FROM emp,dept#只查询dept表中的数据
WHERE emp.`deptno`=dept.`deptno` #两张表的关联关系
AND dept.`dname`='java开发'

连接查询

#inner join:两表都满足的数据
#left join:左边所有的数据和右表满足的
#工作中常用的是:小表 left join 大表,小表驱动大表
#right join:右边的所有数据和左表满足的
SELECT * FROM emp e 
INNER JOIN dept d 
#left JOIN dept d 
#right JOIN dept d 
ON e.deptno=d.deptno #描述字段
WHERE e.ename='jack'#具体的过滤条件

子查询

#3.子查询:把上次查询的结果作为条件再次查询
#查询部门名称是Java开发的所有信息
#根据部门名称查部门编号
#把查到的编号作为条件,查员工信息
SELECT deptno FROM dept WHERE dname='java开发'
SELECT * FROM emp WHERE deptno=1
#相当于下面的语句
SELECT * FROM emp WHERE deptno=(
    SELECT deptno FROM dept WHERE dname='java开发'
)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值