一、索引
为了提高查询的效率,索引会单独生成一张表,要合理的使用索引。
单值索引:一个索引只包含一个字段。
唯一索引:一个索引只包含一个字段,但字段的值不能重复,允许有空值
复合索引:一个索引可以包含着多个字段。
使用:1、创建索引。2、使用索引
查询索引格式:show index from 表名
创建索引:create index 索引名 on 表名(字段名);
使用索引:按照索引列去查。还是输入查询语句去查
想要查看SQL语句的执行性能、计划,来看看SQL有没有使用索引去查。关键字是-----explain
位置在使用在SQL语句前面。
例:EXPLAIN
SELECt * FROM emp WHERe ename='任愉悦'
1、创建唯一索引:通常是表刚创建完,就添加唯一索引,---关键字是unique
#创建唯一索引--索引列的值必须唯一
CREATE UNIQUE INDEX 索引名 ON 表名(字段名)
CREATE UNIQUE INDEX bindex ON dept(loc)
2、创建复合索引
#如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX 索引名 ON 表名 (字段1, 字段2)
CREATE INDEX PIndex ON Persons (LastName, FirstName)
复合索引拥有最左特性:当我们创建一个联合索引(复合索引)的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则,也称为最左特性。如果没有查询的时添加k1查询,那么复合索引会失效。
3、删除表里的索引---格式:alter table 表名 drop index 索引名
二、视图
概述:和索引一样,都是对数据库优化的有效方案,缓存SQL语句的执行结果,可以当作表来用
创建视图:语法:create view 视图名 as 查询的SQL语句。
查询视图:select * from 视图名。
特点:1、可以把视图当作表来使用
2、视图可以被共享,视图屏蔽了真实业务表的复杂性,里面的数据都是SQL查询到的数据
坏处:无法被优化,视图一旦被创建,SQL无法被优化。
三、多表联查
1、笛卡尔积:通过逗号连接表名-----------select * from 表1,表2。后面可以加where判断
表名1.字段名= 表名2.字段名,用这个来连接两个表的关系。
格式:select * from 表名1,表名2,表名3----最多可以一起查三张表。
2、连接查询:1、内连接:inner join --取两张表的交集
2、左连接:left join---取左表的所有与右表满足条件的
3、右连接:right join ---取右表的所有与左表满足条件的
连接查询的格式:select * from 表1 join 表2 on 描述两张表关系的 where 业务代码
内连接格式:select * from 表1 inner join 表2 on 描述两张表关系的 where 业务代码
左连接格式:select * from 表1 left join 表2 on 描述两张表关系的 where 业务代码
右连接格式:select * from 表1 right join 表2 on 描述两张表关系的 where 业务代码
练习:
#SQL的练习: #练习1:查询部门编号是1的员工姓名 SELECt NAME FROM emp WHERe id=1001; #练习2:查询员工姓名叫jack的部门信息 SELECt dept.name FROM emp JOIN dept ON emp.dept_id=dept.id WHERe emp.name='王海涛' #练习3:查询岗位是总监所在的部门信息 SELECt dept.* FROM emp JOIN dept ON emp.dept_id=dept.id WHERe emp.job='经理' #练习4:列出java开发部 部门下的所有员工的信息 SELECt emp.* FROM emp JOIN dept ON emp.dept_id=dept.id WHERe dept.name='培优部' #练习5:查询部门地址在北京和广州的员工信息 SELECt emp.* FROM emp JOIN dept ON emp.dept_id=dept.id WHERe dept.loc='北京' OR dept.loc='上海' SELECt * FROM emp JOIN dept ON emp.dept_id=dept.id



