一、索引
为了提高查询的效率,索引会单独生成一张表,要合理的使用索引。
单值索引:一个索引只包含一个字段。
唯一索引:一个索引只包含一个字段,但字段的值不能重复,允许有空值
复合索引:一个索引可以包含着多个字段。
使用: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
in形式的子查询:因为子查询中的查询结果是多个结果,必须用in 而不能用=
in 使用的时候,查询的类型要属于同一字段 select * from emp where age in(20,16);
按照:名字降序,按照sal升序
SELECt * FROM emp ORDER BY NAME desc,sal asc;
select * from emp where dept.id in(select dept.id from dept where loc='北京' or loc='上海')
模糊查询:本身有索引,以指定元素开头,索引会生效,以指定元素在中间,或者在最后的时候,索引会失效。
#子查询--大于平均工资的员工
SELECt * FROM emp WHERe sal>(SELECt AVG(sal) FROM emp)
批量添加:INSERT INTO student (id,NAME) VALUES(4,'齐雷'),(5,'刘昱江');
SQL执行顺序:
JDBC-----全称Java Database Connectivity,专门用来完成Java程序和数据库的连接技术。
使用步骤:1、导入jar包
2、提供连接数据库的参数(用户名,密码,端口号)
3、发起SQL语句,操作数据库
4、



