查询语句知识点汇总
一、基础查询
基本语法为:
SELECT 查询列表 FROM 表名
其中,查询列表可以是:表中字段、常量值、表达式、函数;查询的结果是一个虚拟的表格。
一些小tips:
1.可以用着重号 ''来区分字段和关键字
2.经常会使用DISTINCT 去重
3.起别名:既可以使用as,也可以使用空格
# 使用as起别名
SELECT * FROM employees AS e;
# 使用空格起别名
SELECT * FROM employees e;
4.+的作用:运算符
- 两个操作数都为数值型,则做加法运算
- 若其中一方为字符型,则尝试将字符型数值转换成数值型,转换成功则继续做运算,失败则转换为0
- 只要一方为null,结果肯定为null
二、条件查询
SELECT 查询列表 第③步
FROM 表名 第①步
WHERE 筛选条件 第②步
筛选条件分类:
- 按条件表达式筛选:=、!=、<>、<=、>=、<、>
- 按逻辑表达式筛选:&&(and) 、||(or)、!(not)
- 模糊查询:
- like:通常搭配通配符(%代表任意多个字符,包含0个字符;_代表任意单个字符)
- between and :包含临界值
- in :列表内的值类型必须一致或兼容
- is null、is not null
# 查询名字中带字母a的员工的所有信息
SELECT * FROM employees
WHERE last_name LIKE '%a%';
# 查询员工名中第二个字符为_的员工名
SELECT last_name FROM employees
WHERE last_name LIKE '_\_%'; # 这里的\起到的是转义的作用
三、排序查询
SELECT 查询列表 第③步
FROM 表名 第①步
[WHERE 筛选条件] 第②步
ORDER BY 排序列表 [DESC/ASC] 第④步
特点:
1.默认asc升序排列
2.order by 支持单个字段、多个字段、表达式、别名、函数
3.order by一般放在查询语句的最后面,LIMIT子句除外
四、常见函数
需要掌握函数名、函数功能以及具有使用方法。
4.1 单行函数
4.1.1 字符函数
- length():获取参数值的字节个数
值得注意的是,该函数获取的是字节的个数;utf8下一个英文字母占1个字节,一个汉字占3个字节;gbk下一个汉字占2个字节
SELECT LENGTH('MySQL');
# 5
# 查看字符集
SHOW VARIABLES LIKE ‘%char%’;
# 若客户端的字符集为utf8
SELECT LENGTH('数据库');
# 9
- concat(str1, str2, …) :拼接
# 将员工的first_name和last_name用‘_’进行连接
SELECT CONCAT('first_name','_','last_name') output
FROM employees;
- upper()/lower():将字符串中的小/大写全转换成大/小写
SELECT UPPER('mysQL') output;
# MYSQL
SELECT LOWER('MYSQL') output;
# mysql
- substr/substring(str,起始索引,截取长度):截取指定索引下的字符
这里,有一点需要注意一下:索引是从1开始的
SELECT SUBSTR('查询语句知识点汇总',1,4) output;
# 查询语句
SELECT SUBSTR('查询语句知识点汇总',8) output;
# 汇总
- instr(str1,str2):返回子串第一次出现的索引,如果找不到,返回0
SELECT INSTR('查询语句知识点汇总','汇总') output;
# 7
- trim():去除前后空格,也可去除指定字符
SELECT TRIM('a' from ' 数据库 ') output;
# 数据库
SELECT TRIM('a' from 'aaaa数aaaa据库aaaa') output;
# 数aaaa据库
SELECT TRIM('a' from 'aaaa数aaaa据库AAAAA') output;
# 数aaaa据库AAAAA
- lpad(str,指定长度,指定字符):用指定的字符实现左填充,使填充后的字符串达到指定长度,rpad同理
SELECT LPAD('数',3,'*') output;
# 数**
SELECT LPAD('数据库',2,'*') output;
# 数据
- replace(str,需要被替换的字符串,替换的字符串):替换
SELECT REPLACE('我爱学习','学习','看电视') output;
# 我爱看电视
4.1.2 数学函数
- rand():获取随机数,返回0-1之间的小数
SELECT RAND();
# 0.36748154868137234
- round():四舍五入
# 保留两位小数
SELECT ROUND(1.567, 2);
# 1.57
- ceil():向上取整,返回>=该参数的最小整数
floor():向下取整,返回<=该参数的最大整数
# 在0-99间随机抽取一个整数
SELECT FLOOR(RAND()* 100);
# 在1-100间随机抽取一个整数
SELECT CEIL(RAND()* 100);
- truncate():截断
SELECT TRUNCATE(1.699999,1);
# 1.6
- mod(a, b):取余;a为被除数,b为除数。等价于%
mod(a, b) = a - a/b*b
SELECT mod(10,3);
# 1
SELECT mod(-10,-3); # -10-(-10)/(-3)*(-3) = -1
# -1
SELECT mod(10,-3); # 10-(10)/(-3)*(-3) = 1
# 1
4.1.3 日期函数
- now(): 返回当前系统的日期+时间
- curdate(): 返回当前系统的日期,不包含时间
- curtime(): 返回当前时间
SELECT NOW();
# 2020-08-05T08:32:45Z
SELECT CURDATE();
# 2020-08-05<