mysql
1.DML/DDL/DCL
DML(数据库操纵语言):insert,update等等
DDL(数据库定义语言):drop,create等等
DQL(数据库查询语言):select
DCL(数据库控制语言):用户,权限,事务等等
2.索引:
3.优化:
1. 索引(占比80%)
2. 检查是否走执行计划,尽量不要走全表。
3.尽量优化sql语句。
4.执行顺序?
from>join>on>where>group by>having>select>distinct(去重)>order by>limit
5.interval?
6.如果要保留null数据,可以这样做
where LAST_NAME!="KING" and (DEPARTMENT_ID!=20 or DEPARTMENT_ID is null)
7. exists本质上是ture与false的判断,与查什么无关
例如:
select * from employees
where exists(
select * from jobs where employees.JOB_ID=jobs.JOB_ID and JOB_TITLE like "%MANAGER%"
)
8.exists与in的区别
1.in是把外表和内表做hash连接,先查询内表
2.exists是对外表做loop循环,循环后再对内表查询
3.懵懵懂懂,总之,外表大用in,内表大用exists
9.union:求交集
例如:表A union 表B
10.三范式?
1NF:要求数据达到原子性,使数据不可再分。
2NF:使每一行数据具有唯一性,并消除数据之间的“部分依赖”,使每一个表中的非主键字段,完全依赖于主键字段。
3NF:属于不依赖于其他非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字信息,非PK的字段间不能有重属关系
11.表的结构修改?
添加字段: alter,add
修改字段: alter,modify
删除字段: alter , drop
修改表名:rename to
添加检查约束条件:constraint , check
例如:
alter table emp_temp2 add constraint SALARY check(SALARY>100)
添加索引:index , on
create index emp_temp_n1 on emp_temp(EMPLOYEE_ID)
12. 函数
- round:四舍五入函数,round(123445,-3):-3代表往小数点左边舍去3位,+号则相反
- count:count里面的表达式不生效,比如:count(core>60)
13.什么情况不走索引?
1.出现数据类型转化问题。
2.出现函数。
3.有like不走索引
14.高深写法:取各科前三名
高深写法:取各科前三名
SELECT * from hand_student_core hsc
WHERE (SELECT COUNT(*) from hand_student_core hsc1
WHERE hsc.course_no = hsc1.course_no and hsc1.core <hsc.core
)<3 ORDER BY hsc.course_no,hsc.core DESC;
15. mysql 模糊查询实现不区分大小写
SELECT * FROM `table`
where lower(字段) LIKE
CONCAT(CONCAT('%',lower('WPS')),'%')