- 1.1 +的作用
- 1.2 is null pk <=>
- 1.3 模糊查询
- 1.4 别名+排序
- 1.5 字符函数
- 1.length 获取参数值的字节个数
SELECT LENGTH(null); null
SELECT LENGTH(‘null’); 4
SELECT LENGTH(‘john’); 4
SELECT LENGTH(‘张三丰hahaha’);15
SHOW VARIABLES LIKE ‘%char%’;
客户端编码是utf8,一个中文对应3个字节,如果是gbk,一个中文对应2个字节 - 2.SELECT CONCAT(lastname,’‘,first_name) 姓名 FROM employees;
- 3.大小写
SELECT UPPER(‘john’);
SELECT LOWER(‘joHn’); - 4.SUBSTR 注意:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR(‘李莫愁爱上了陆展元’,7) out_put;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR(‘李莫愁爱上了陆展元’,1,3) out_put; - 5.instr 返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(‘杨不殷六侠悔爱上了殷六侠’,’殷八侠’) AS out_put; - 6.trim
SELECT LENGTH(TRIM(‘ 张翠山 ‘)) AS out_put;
SELECT TRIM(‘a’ FROM ‘aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’) AS out_put;
SELECT TRIM(‘aa’ FROM ‘aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’) AS out_put; - 7.lpad 用指定的字符实现左填充指定长度, rpad同左
SELECT LPAD(‘殷素素’,10,’‘) AS out_put;—-**殷素素
SELECT LPAD(‘殷素素’,2,’‘) AS out_put;——殷素
SELECT LPAD(‘殷素素’,0,’‘) AS out_put; ——‘’
SELECT LPAD(‘殷素素’,-1,’*’) AS out_put;——null - 9.replace 替换(全部替换)
SELECT REPLACE(‘周芷若周芷若周芷若周芷若张无忌爱上了周芷若’,’周芷若’,’赵敏’) AS out_put; - round 四舍五入
SELECT ROUND(-1.55); (-2 负数先进行数值四舍五入,在加上负号)
SELECT ROUND(1.567,2); - ceil 向上取整,返回>=该参数的最小整数
SELECT CEIL(-1.02); (-1,结果要大于-1.02) - floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.99);(—10,结果要小于-9.99) - truncate 截断:(后面的都不要)
SELECT TRUNCATE(1.69999,1); 1.6 - mod取余
/
mod(a,b) : a-a/bb
mod(-10,-3):-10- (-10)/(-3)(-3)=-1
mod(-10,3):-10- (-10)/33=-1
mod(10,3):10- 10/33=1
mod(10,-3):10- 10/-3-3=1
结论就是符号是根据被除数即分子的符号一致
*/
SELECT MOD(10,-3); 1
SELECT 10%3; - now 返回当前系统日期+时间
SELECT NOW(); - curdate 返回当前系统日期,不包含时间
SELECT CURDATE(); - 可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) 年;
SELECT YEAR(‘1998-1-1’) 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;
SELECT STR_TO_DATE(‘1998-3-2’,’%Y-%c-%d’) AS out_put;
#查询入职日期为1992—4-3的员工信息
SELECT FROM employees WHERE hiredate = ‘1992-4-3’;
SELECT FROM employees WHERE hiredate = STR_TO_DATE(‘4-3 1992’,’%c-%d %Y’);">str_to_date 将字符通过指定的格式转换成日期
SELECT STR_TO_DATE(‘1998-3-2’,’%Y-%c-%d’) AS out_put;
#查询入职日期为1992—4-3的员工信息
SELECT FROM employees WHERE hiredate = ‘1992-4-3’;
SELECT FROM employees WHERE hiredate = STR_TO_DATE(‘4-3 1992’,’%c-%d %Y’);- date_format 将日期转换成字符
SELECT DATE_FORMAT(NOW(),’%y年%m月%d日’) AS out_put;
#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,’%m月/%d日 %y年’) 入职日期 FROM employees
WHERE commission_pct IS NOT NULL; - 1.if函数: if else 的效果
SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,’没奖金,呵呵’,’有奖金,嘻嘻’) 备注
FROM employees; - case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
…
else 要显示的值n或语句n;
end - 案例1:查询有员工的部门名,两种方式
- in
SELECT department_name FROM departments d
WHERE d.department_idIN(
SELECT department_id FROM employees
) - exists
SELECT department_name FROM departments d
WHERE EXISTS(
SELECT * FROM employees e WHERE d.department_id=e.department_id
); - 案例1:查询前五条员工信息(第一个参数从0开始,第二个参数是size)
SELECT FROM employees LIMIT 0,5;
SELECT FROM employees LIMIT 5;
1.1 +的作用
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
1.2 is null pk <=>
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
1.3 模糊查询
%:代表0~n个字符
_:代表一个字符
like ‘%%’ 查询结果中,不包含null
1.4 别名+排序
select ifNUll(salary,0)12 年薪 from employee ;
select ifNUll(salary,0)12 AS 年薪 from employee ;
select ifNUll(salary,0)12 from employee order by ifNUll(salary,0)12 desc;
select ifNUll(salary,0)*12 AS 年薪 from employee order by 年薪 desc;
1.5 字符函数
1.length 获取参数值的字节个数
SELECT LENGTH(null); null
SELECT LENGTH(‘null’); 4
SELECT LENGTH(‘john’); 4
SELECT LENGTH(‘张三丰hahaha’);15
SHOW VARIABLES LIKE ‘%char%’;
客户端编码是utf8,一个中文对应3个字节,如果是gbk,一个中文对应2个字节
2.SELECT CONCAT(lastname,’‘,first_name) 姓名 FROM employees;
3.大小写
SELECT UPPER(‘john’);
SELECT LOWER(‘joHn’);
4.SUBSTR 注意:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR(‘李莫愁爱上了陆展元’,7) out_put;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR(‘李莫愁爱上了陆展元’,1,3) out_put;
5.instr 返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(‘杨不殷六侠悔爱上了殷六侠’,’殷八侠’) AS out_put;
6.trim
SELECT LENGTH(TRIM(‘ 张翠山 ‘)) AS out_put;
SELECT TRIM(‘a’ FROM ‘aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’) AS out_put;
SELECT TRIM(‘aa’ FROM ‘aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’) AS out_put;
7.lpad 用指定的字符实现左填充指定长度, rpad同左
SELECT LPAD(‘殷素素’,10,’‘) AS out_put;—-**殷素素
SELECT LPAD(‘殷素素’,2,’‘) AS out_put;——殷素
SELECT LPAD(‘殷素素’,0,’‘) AS out_put; ——‘’
SELECT LPAD(‘殷素素’,-1,’*’) AS out_put;——null
9.replace 替换(全部替换)
SELECT REPLACE(‘周芷若周芷若周芷若周芷若张无忌爱上了周芷若’,’周芷若’,’赵敏’) AS out_put;
1.6 数学函数
round 四舍五入
SELECT ROUND(-1.55); (-2 负数先进行数值四舍五入,在加上负号)
SELECT ROUND(1.567,2);
ceil 向上取整,返回>=该参数的最小整数
SELECT CEIL(-1.02); (-1,结果要大于-1.02)
floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.99);(—10,结果要小于-9.99)
truncate 截断:(后面的都不要)
SELECT TRUNCATE(1.69999,1); 1.6
mod取余
/
mod(a,b) : a-a/bb
mod(-10,-3):-10- (-10)/(-3)(-3)=-1
mod(-10,3):-10- (-10)/33=-1
mod(10,3):10- 10/33=1
mod(10,-3):10- 10/-3-3=1
结论就是符号是根据被除数即分子的符号一致
*/
SELECT MOD(10,-3); 1
SELECT 10%3;
1.7 日期函数
now 返回当前系统日期+时间
SELECT NOW();
curdate 返回当前系统日期,不包含时间
SELECT CURDATE();
可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) 年;
SELECT YEAR(‘1998-1-1’) 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;
str_to_date 将字符通过指定的格式转换成日期

SELECT STR_TO_DATE(‘1998-3-2’,’%Y-%c-%d’) AS out_put;
#查询入职日期为1992—4-3的员工信息
SELECT FROM employees WHERE hiredate = ‘1992-4-3’;
SELECT FROM employees WHERE hiredate = STR_TO_DATE(‘4-3 1992’,’%c-%d %Y’);
date_format 将日期转换成字符
SELECT DATE_FORMAT(NOW(),’%y年%m月%d日’) AS out_put;
#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,’%m月/%d日 %y年’) 入职日期 FROM employees
WHERE commission_pct IS NOT NULL;
1.8 其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
1.9 流程控制函数
1.if函数: if else 的效果
SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,’没奖金,呵呵’,’有奖金,嘻嘻’) 备注
FROM employees;
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
…
else 要显示的值n或语句n;
end
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary1.1
WHEN 40 THEN salary1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;
SELECT salary,
CASE
WHEN salary>20000 THEN ‘A’
WHEN salary>15000 THEN ‘B’
WHEN salary>10000 THEN ‘C’
ELSE ‘D’
END AS 工资级别
FROM employees;
1.10 分组函数(group by后可以用别名,where后面不行, order by 可以用别名)
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
4、count函数的单独介绍
一般使用count(*)用作统计行数
5、和分组函数一同查询的字段要求是group by后的字段
SELECT DATEDIFF(‘1995-2-7’,’1995-2-6’);这个函数不考虑时分秒
1.11 连接查询
非等值连接:
SELECT salary,grade_level FROM employees e,job_grades g
WHERE salary BETWEEN g.lowest_sal AND g.highest_sal
AND g.grade_level=’A’;
分类:
内连接(★):inner
外连接
左外(★):left 【outer】
右外(★):right 【outer】
全外:full【outer】 Mysql不支持full outer join
交叉连接:cross 相当于笛卡尔积
1.12 子查询
exists(完整的查询语句)
结果:1或0
案例1:查询有员工的部门名,两种方式
in
SELECT department_name FROM departments d
WHERE d.department_id IN(
SELECT department_id FROM employees
)
exists
SELECT department_name FROM departments d
WHERE EXISTS(
SELECT * FROM employees e WHERE d.department_id=e.department_id
);
1.13 分页查询
select 查询列表 from 表<br /> 【join type join 表2<br /> on 连接条件 where 筛选条件<br /> group by 分组字段 having 分组后的筛选<br /> order by 排序的字段】limit 【offset,】size;
