前言
- – DQL 数据查询语言
– 查询是使用频率最高的语句 - – SELECT 查询的结果 FROM 表 WHERE 条件 [分组][分组后的条件] 排序 数量限制
- – 查询操作不会改变表中数据
- 对查询结果的处理
- 关键字
- 函数
- 单行函数
- 字符
- 数字
- 日期
- 分组函数
- 条件
一、查询的结果处理
– 查询的结果处理
1.查询的结果为常量
- – 查询的结果为常量
SELECT 100
– 表达式
SELECT 10+10
SELECT grade + score FROM t_student
SELECT grade + 1 FROM t_student
2.查询的结果为函数
- – 查询的结果为函数
SELECT VERSION() – 查询的版本
SELECT NOW() – 查询时间
3.查询的结果为查询表数据
- – 查询的结果为查询表数据
SELECT * FROM t_student
4.查询特定列(建议)
- – 查询特定列(建议)
SELECT num,NAME,sex FROM t_student
5.去除重复数据(重复指多行数据,所有列相同)(针对查询出的结果去重)
- – 去除重复数据(重复指多行数据,所有列相同)(针对查询出的结果去重)
SELECT DISTINCT sex FROM t_student
6.算术运算
- – 算术运算 +(加法运算,没有字符串连接功能) - * /
SELECT grade + score FROM t_student
SELECT NAME + sex FROM t_student
7.单行函数(会对每行进行处理) 字符函数
- – 单行函数(会对每行进行处理) 字符函数
SELECT LENGTH(NAME) FROM t_student
– LENGTH(列名)返回字节数量长度
SELECT CHAR_LENGTH(NAME) FROM t_student
– CHAR_LENGTH(列名)返回字数
SELECT num,NAME,CHAR_LENGTH(NAME) FROM t_student
8.合并CONCAT(str1,str2…)
- – 合并CONCAT(str1,str2…)
SELECT CONCAT (‘aa’,‘bb’,‘cc’)c
SELECT CONCAT (NAME,‘是’,sex)‘姓名+性别’ FROM t_student
9.大小写的转换
- – 大小写的转换
- – 小写转大写
SELECT UPPER(NAME) FROM t_student - – 大写转小写
SELECT LOWER(NAME) FROM t_student
- – 小写转大写
10.字符串的截取
- – 字符串的截取
– SUBSTRING(操作的字符串,开始的位置,截取长度)
– 索引的位置是从1开始的
SELECT SUBSTRING(NAME,1,2)‘截取’ FROM t_student
11.查找指定字符出现的位置
- – 查找指定字符出现的位置
SELECT INSTR(NAME,‘i’) FROM t_student
12.去掉前后空格或者去掉前后指定字符
- – TRIM
– 去掉前后空格或者去掉前后指定字符
SELECT TRIM(NAME) FROM t_student
SELECT CHAR_LENGTH(TRIM(NAME)) FROM t_student
SELECT TRIM(‘j’ FROM NAME) FROM t_student
13.LPAD 在左边前添加指定字符到指定个数
- – LPAD 在左边前添加指定字符到指定个数
SELECT LPAD(NAME,7,‘a’) FROM t_student
– RPAD 在右边前添加指定字符到指定个数
SELECT RPAD(NAME,7,‘a’) FROM t_student
14.REPLACE 把I换成A
-
– REPLACE 把I换成A
SELECT REPLACE(NAME,‘I’,‘A’) FROM t_student -
注:
- 查询是在结果中改变,原数据不发生改变
二、查询的逻辑处理
1.逻辑处理
– 逻辑处理
- – CASE WHEN 条件 THEN 成立的结果 ELSE 不成立的结果 END
- SELECT
CASE WHEN score>=90 THEN ‘A’ ELSE ‘B’ END FROM t_student
SELECT
CASE WHEN score>=90 THEN ‘A’
WHEN score>=80 AND score<=89 THEN ‘B’
ELSE ‘C’
END score – 定义别名
FROM t_student
2.if处理
-
– IFNULL (判断的列,指定的默认值)
SELECT IFNULL(phone,‘暂未登记手机号’)phone FROM t_student
SELECT IFNULL(phone,NAME)phone FROM t_student -
– IF(条件,结果1,结果2)
SELECT IF(score>=60,‘及格’,‘不及格’)score FROM t_student
3.单行函数
- – 单行函数
3.1数学函数
- – 数学函数
SELECT ROUND(5.4) – 四舍五入
SELECT CEIL(5.4) – 向上取整
SELECT FLOOR(5.6) – 向下取整
SELECT TRUNCATE(3.1495926,2) – 指(保留俩位小数,直接截断)
SELECT MOD(10,3) – 余数
SELECT RAND() – 返回0-1之间随机数
3.1日期处理函数
- – 日期处理函数
SELECT NOW() – 当前时间
SELECT CURDATE() – 年月日
SELECT CURTIME() – 时分秒
3.2日期格式化
- – 日期格式化
SELECT YEAR(reg_time) FROM t_student – 返回年
SELECT MONTH(reg_time) FROM t_student – 返回月
3.3将字符转换为日期
- – 将字符转换为日期
SELECT STR_TO_DATE(‘2000-10-01’,’%Y-%m-%d’)
3.4将日期格式化转为指定格式的字符串
- – 将日期格式化转为指定格式的字符串
SELECT DATE_FORMAT(reg_time,’%Y-%m’)m FROM t_student
3.5分组
- – 分组
SELECT DATE_FORMAT(reg_time,’%Y-%m’)m FROM t_student GROUP BY m- – 每组有几个
SELECT COUNT(*),DATE_FORMAT(reg_time,’%Y-%m’)m FROM t_student GROUP BY m
- – 每组有几个
3.6计算俩个日期的时间差
- – 计算俩个日期的时间差
SELECT DATEDIFF(NOW(),reg_time)FROM t_student
4. 组函数,聚合函数,统计函数
- – 组函数,聚合函数,统计函数
- 分类:sum求和,avg平均值,max最大值,win最小值,count计数(非空)
- 1.sum,avg一般用于处理数值型max,min,count可以处理任何类型
- 2.以上分组函数都忽略null
- 3.可以和distinct搭配实现去重计算
- 4.count函数一般使用count(*)用作统计行数
- 分类:sum求和,avg平均值,max最大值,win最小值,count计数(非空)
4.1求总和
- – 求总和
SELECT SUM(score) FROM t_student – 317
SELECT SUM(DISTINCT score) FROM t_student – 287
4.2求平均值
- – 求平均值
SELECT AVG(score) FROM t_student – 63.4
SELECT AVG(DISTINCT score) FROM t_student – 71.75
4.3求最大值
- – 求最大值
SELECT MAX(score) FROM t_student – 98
4.4求最小值
- – 求最小值
SELECT MIN(score) FROM t_student – 30
4.5COUNT统计数量
- – COUNT统计数量
SELECT COUNT(*) FROM t_student – 5
SELECT COUNT(num) FROM t_student
三、条件查询
1.条件查询
– 条件查询
- SELECT 结果 FROM 表名 WHERE 条件
条件
= != <> >< >= <=
2.等于与不等于90
- 等于或者可能等于90
SELECT * FROM t_student WHERE score>=60
SELECT * FROM t_student WHERE score=90 - – 俩种不等于90
SELECT * FROM t_student WHERE score!=90
SELECT * FROM t_student WHERE score<>90
3.逻辑 ang or not
- – 逻辑 ang or not
- – 包含60-80
SELECT * FROM t_student WHERE score>=60 AND score<=80
SELECT * FROM t_student WHERE score BETWEEN 60 AND 80
SELECT * FROM t_student WHERE score>=80 OR score<=60
SELECT * FROM t_student WHERE NOT score>=80
- – 包含60-80
4.模糊查询like
- – 模糊查询like
- – %匹配多个字符
SELECT * FROM t_student WHERE NAME LIKE ‘王%’ - – 一个下划线来匹配一个字符
SELECT * FROM t_student WHERE NAME LIKE ‘王__’
SELECT * FROM t_student WHERE NAME LIKE ‘王_’ - – 中间包含三的名字
SELECT * FROM t_student WHERE NAME LIKE ‘%三%’
- – %匹配多个字符
5.查询三个结果
- 查询三个结果
SELECT * FROM t_student WHERE num=1 OR num=2 OR num=3
SELECT * FROM t_student WHERE num IN(1,2,3)
SELECT * FROM t_student WHERE num NOT IN(1,2,3)
6. 查询没有结果
- 查询没有结果
SELECT * FROM t_student WHERE phone IS NULL
SELECT * FROM t_student WHERE phone IS NOT NULL
7.UNION UNION ALL 将多个查询结果合并
- – UNION UNION ALL
- – 将多个查询结果合并
- – UNION 多个SQL的结果列数一致 会去重复
SELECT num,NAME,sex FROM t_student WHERE sex=‘男’
UNION
SELECT num,NAME,sex FROM t_student WHERE score>60
8.UNION ALL 直接将查询到的数据简单连接,不会去重复,排序
- – UNION ALL 直接将查询到的数据简单连接,不会去重复,排序
SELECT num,NAME,sex FROM t_student WHERE sex=‘男’
UNION ALL
SELECT num,NAME,sex FROM t_student WHERE score>60