DQL(数据查询语言)下、DML(数据管理语言))
多表查询的join on连接
左外连接:left join on
右外连接:right join on
使用on子句的好处:
自然连接中是以具有相同名字的列为连接条件的。
可以使用 ON 子句指定额外的连接条件。
这个连接条件是与其它条件分开的。
ON 子句使语句具有更高的易读性。
案例:查询哪个部门没有员工
注意:左外连接,左边的表就是主表,右边的表就是从表,右外连接同理。
常见函数
1、字符函数
作用 | 函数 | 结果 |
---|---|---|
转小写 | LOWER(‘SQL Course’) | sql course |
转大写 | UPPER(‘SQL Course’) | SQL COURSE |
拼接 | CONCAT(‘Hello’, ‘World’) | HelloWorld |
截取 | SUBSTR(‘HelloWorld’,1,5) | Hello |
长度 | LENGTH(‘HelloWorld’) | 10 |
字符出现索引值 | INSTR(‘HelloWorld’, ‘W’) | 6 |
字符截取后半段 | TRIM(‘H’ FROM ‘HelloWorld’) | elloWorld |
字符替换 | REPLACE(‘abcd’,‘b’,‘m’) | amcd |
2、数字函数
作用 | 函数 | 结果 |
---|---|---|
四舍五入 | ROUND(45.926, 2) | 45.93 |
截断 | TRUNC(45.926, 2) | 45.92 |
求余 | MOD(1600, 300) | 100 |
3、日期函数
作用 | 函数 | 结果 |
---|---|---|
获取当前日期 | now() | |
将日期格式的字符转换成指定格式的日期 | STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’) | 1999-09-13 |
将日期转换成字符 | DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’) | 2018年06月06日 |
日期的相关格式符
序号 | 格式符 | 功能 |
---|---|---|
1 | %Y | 4位的年份 |
2 | %y | 2位的年份 |
3 | %m | 月份(01、02、03…) |
4 | %c | 月份(1、2、3…) |
5 | %d | 日(01、02、03…) |
6 | %H | 小时(24小时制) |
7 | %h | 小时(12小时制) |
8 | %i | 分钟(00、01、…、59) |
9 | %s | 秒(00、01、…、59) |
子查询
含义:出现在其他语句中的select语句,称为子查询或内查询。外部的查询语句,称为主查询或外查询
特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
案例:谁的工资比 Abel 高?
注意:子查询不是很难,着重注意下逻辑部分就好。
分页查询
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始,如果是从0开始的话,0可以省略不写, 只写偏移量)
size 要显示的条目个数(偏移量)
#案例1:查询前五条员工信息
写法一:
SELECT
*
FROM
t_mysql_employees
LIMIT 0,5;
写法二:(起始索引是0,忽略不写)
SELECT
*
FROM
t_mysql_employees
LIMIT 5;
DML(数据管理语言)
1、插入数据
使用 INSERT 语句向表中插入数据。
语法:
INSERT INTO 表名 (列段1,列段2,列段3)VALUES (值1,值2,值3)
需要注意的是,字符和日期型数据应包含在单引号中。
INSERT INTO table (id, fname)
VALUES (113, 'Louis');
使用案例:从其他表中拷贝数据
在 INSERT 语句中加入子查询。
INSERT INTO 新表
SELECT *
FROM 旧表
WHERE id = 90;
当我们需要拷贝一张表的时候,但是表的列名又太多,建表的列名可以用下图上面的这串代码;而下图下面的代码就是拷贝旧表中的数据。
WHERE 1=2 是恒不等的,所有就只复制了列名
2、更新数据
使用 UPDATE 语句更新数据。
语法:
UPDATE 表名
SET 列名1 = 值1 [,列名2 = 值2, ...]
[WHERE 筛选条件]
注意:
使用 WHERE 子句能指定需要更新的数据,而如果忽略 WHERE,则表中的所有数据都将被更新。
实例、把id为113,修改为70
UPDATE 表名
SET id = 70
WHERE id = 113;
3、删除数据
使用 DELETE 语句从表删除数据。
语法:
DELETE FROM 表名
[WHERE 筛选条件];
注意:
使用 DELETE 子句能删除指定的数据,而如果忽略 DELETE,则表中的所有数据都将被删除。
划重点,要考:
delete 和 truncate 的区别:
1、delete可以加where条件,truncate不能加;
2、truncate效率会要高些;
3、delete有返回值,truncate没有返回值;
4、delete可以回滚,truncate不能回滚;
5、如果要删除的表中有自增长列,那么:
-------delete之后,再插入数据,自增长列的值从断点开始;
-------而truncate之后,再插入数据,自增长列的值从1开始。