作者:小啊小二饼(iconfont)

🌑

Spaghetti.ink

Appreciation, Modesty, Persistence


SQL01-DQL01

条件查询

  • 按条件表达式筛选
    常见的条件运算符:>, <, !=, =, <>, <=, >=
  • 按逻辑表达式筛选
    常见的逻辑运算符:&&, ||, !, and, or, NOT
  • 模糊查询
    LIKE, BETWEEN AND, IN, IS NULL
  • LIKE:

    1. 一般和通配符一起使用。
      通配符:
       %: 任意多个字符 // 特别注意通配符是%不是*
       _: 任意单个字符
      
      转义 ESCAPE:
       默认 ESCAPE
           /: /_ -> 下划线
       指定 ESCAPE
           LIKE '_$_' ESCAPE '$'; -> 使用$作为转义符号
      
    2. LIKE的查询结果并不包括NULL的情况!!
  • BETWEEN AND 可以取到临界值但是不能调换位置

  • IN的值类型必须一致或者兼容,且不支持通配符
  • IS NULL
    普通的 =, != 并不能用于判断 NULL, 只能使用 IS NULL
    • ISNULL(exp) 函数,如果表达式为null,返回1,否则0
  • IS 后面只能跟 boolean_value, can be TRUE, FALSE, or UNKNOWN.
    • IS NULL 和 IS 是两个不同的关键词
  • NULL-safe equal <=> 可以判断 NULL 但是可读性不高

排序查询:

  • Syntax:
    SELECT 查询列表
    FROM 表
    【WHERE CONDITION】
    ORDER BY 排序列表 [asc|desc], field_2 [asc|desc];

ORDER BY 一般放在查询语句最后 除 LIMIT 子句

  • 查询列表:
  1. 表中的字段;2.常量;3.表达式;4.函数
  • ORDER BY:

    1. 默认 asc;
    2. asc | desc
  • 常见错误:

    SELECT
        *, salary*12*(1+IFNULL(commission_pct,0)) AS `annual salary`
    FROM 
        employees
    ORDER BY
        "annual salary" DESC; <-- 无效
        `annual salary` DESC; <-- Right

    反引号、单引号、双引号的区别:

      `: 用于区别 保留关键字 与 变量名(字段名)等
      ': 用于表示文本值
      ": 只在MYSQL适用,推荐使用'
    
  • 字节长度 LENGTH(str)


常用函数:

封装的一组逻辑语句,对外暴露方法名

Syntax:

SELECT FUNCTION(args) [FROM TABLE_NAME]

  • Category:
  1. 单行函数
    CONCAT(str1,str2,...), LENGTH(str), IFNULL(expr1,expr2)...
  • 字符函数;
    • LENGTH(str): 字节数。UTF-8下,汉字的字节数为3
    • CONCAT(str1,str2,…): 拼接字符
    • UPPER(str): Upper case
    • LOWER(str): Lower case
    • SUBSTR: 索引从 1 开始
      • SUBSTR(str,pos): 截取pos后的字符串;
      • SUBSTR(str,pos,len): 从pos开始截止len长度的字符串
    • INSTR(str,substr): 返回substr在str中第一次出现的索引,找不到则为0
    • TRIM([remstr FROM] str): 去前后空格,当存在 remstr 时去掉前后的remstr
    • LPAD(str,len,padstr): 左填充len-LENGTH(str)长度的padStr
    • RPAD(str,len,padstr): 右填充
    • REPLACE(str,from_str,to_str): replace from_str to to_str
  • 数学函数;
    • ROUND(X): 四舍五入
      • ROUND(X,D): 四舍五入(保留D位小数)
    • CEIL(X): 向上取整 >=
    • FLOOR(X): 向下取整 <=
    • TRUNCATE(X,D): 截断D后位的小数
    • MOD(N,M): 取余数 a-(a/b)*b
  • 日期函数;
    • NOW(): 当前系统 日期 与 时间
    • CURDATE(): 当前日期
    • CURTIME(): 当前时间
    • 获取指定的部分 年、月、日、时、分、秒
      • YEAR(date), MONTH(date), MONTHNAME(date), DAY(date), HOUR(time)…
    • STR_TO_DATE(str,format): 日期格式字符串转换成日志
        SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d');
      
    • DATE_FORMAT(date,format): 日期转化为指定格式字符串
    • TIMEDIFF(expr1,expr2): 日期差
  • 其他函数;
    • VERSION()
    • DATABASE()
    • USER()
  • 流程控制函数;
    IF(expr1,expr2,expr3): 三元运算
  1. 分组函数 (统计作用, 聚合函数)

    • sum, avg, max, min, count
    • 参数类型:
        SUM(), AVG(): 支持 数值
        MAX(), MIN(): 支持 数值,日期,字符 (因为日期和字符都可以排序)
        COUNT(): 计算非空的个数
      
    • 是否忽略NULL? 以上分组函数都忽略NULL值
    • 与 DISTINCT 搭配:
        SUM([DISTINCT] expr)
        COUNT([DISTINCT] expr)
      
    • COUNT 函数使用:

        COUNT(*): 统计总行数(只要每条记录有一条不为null,就计数)
        COUNT(1): 统计总行数(相当于加了一个字段使值都为1)
      

      # 不使用GROUP BY对记录进行分组那么默认就是以行进行分组(哪怕说记录的值是相同的)

    • 分组函数一同查询的字段限制:
        * 要求是GROUP BY之后的字段
        如 AVG(salary), employee_id 一起查询没有意义,因为AVG输出只有一个值
      

本文由 Frank采用 署名 4.0 国际 (CC BY 4.0)许可

— 2021年9月17日

本文总阅读量

SQL
Next posts SQL01-DQL02

本站总访问量