一、 多表查询
join连接
内连接:
语法:select 查询列表 from 表1 别名 join 表2 别名 on 连接条件;
[inner] join on
可以添加排序、分组、筛选。inner可以省略,筛选放在where后,连接条件在on后面。inner join 和等值连接相同。
内连接又分为,等值连接、非等值连接。自连接;
等值连接:
案例:查询员工名、部门名
非等值连接:
案例:查询员工的工资级别:
自连接:
案例:查询员工的名字、上级的名字
外连接:
左外连接:join [outer] left on
案例:查询哪个部门没有员工
右外连接:join [outer] right on 和左外连接一致,只是左外连接是以左边的表为主,右外连接是以右边的表为主。
常见函数
函数的作用就是针对于列段类型值进行后期加工。
函数可以通过select之后直接使用,括号内放置需要加工的字符。
案例:通过使用字符串函数避开区分大小写的问题 ;
1.字符函数:
Lower:转小写
Upper:转大写
Concat:拼接
Substr:截取
Length:长度
Instr:字符出现索引值
Trim:字符截取后半段
Replace:字符替换
2.数字函数:
Round:四舍五入
Trunc:截断
Mod:求余
3.日期函数:
now():获取当前日期
Str_to_date():将日期格式的字符转换成指定格式的日期
date_format():将日期转换成字符
子查询
因为一个sql语句有时并不能完成我们所需要查询的数据,所以在sql语句中再嵌套一层sql语句这种语句套语句的方式就叫做子查询。
案例:找到比员工“Abel”薪资更高的员工信息:
分页查询
语法:原有查询+limit startindex,offset
在原有查询基础上加limit关键字 起始下标和选取范围就可以实现分页查询。有时候我们并不需要查到整张表所有的数据,这是就可以用分页查询选定指定的范围的数据。
注意:
如果数据量少于你设置的offset,数据也只会显示原查询的结果,如果起始下标为0,则可以省略起始下标(startindex)
案例:
二、DML语言
1.简介
Data Manipulation Language(DML)数据操作语言
2.插入数据:
向指定表中插入数据:
语法:insert into 表名 (列段名1,列段名2) values(列段名1对应的值,列段名2对应的值);一次只能插入一条数据
insert into t_mysql_departments(department_id,department_name,location_id) values (900,'pro',1700);
向指定表插入所有列段值:
insert 表名 values(...);
数据拷贝:
在 INSERT 语句中加入子查询。可以拷贝所有列的数据,也可以指定拷贝列段,不必写values字句,而且在子查询中的值列表应该与insert字句中的列名对应。
insert into t_mysql_departments_bak select * from t_mysql_departments
3.更新数据:
使用update更新数据,可以一次性更改多条数据。
案例:
4.删除数据:
使用delete语句从表中删除数据,使用where字句可以删除指定的记录,如果省略where字句则表中全部数据将被删除。也可以同时删除多张表的数据。
关键字:delete truncate
两个关键字的区别:
1.delete可以加where条件,truncate不能加,truncate就等于直接清空表的所有数据。
2.truncate的效率要高一点点。
3.假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚.
案例:删除张无忌的女朋友信息