MySQL(三)之dql

前言

  • – 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(*)用作统计行数
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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值