zoukankan      html  css  js  c++  java
  • MySQL:单表查询

    在线数据库:http://sqlfiddle.com/

    建表脚本:https://gitee.com/bqzzz/sql/tree/master/Scripts


    基本查询

    ①、查询所有记录

    SELECT * FROM t_emp;
    

    ②、查询特定字段

    SELECT ename,job FROM t_emp;
    

    ③、查询时指定别名

    # AS可省略
    SELECT 
    ename AS '姓名',
    job AS '职位'
    FROM t_emp;
    

    ④、对查询结果做运算

    SELECT ename, sal*12 FROM t_emp;
    

    条件查询

    • 算术运算符:+、-、*、/、%
    • 比较运算符:>、>=、<、<=、=、!=、IN(a,b,c)、IS NULL、IS NOT NULL、BETWEEN ... AND ...、LIKE、REGEXP
    • 逻辑运算符:AND、OR、NOT、XOR
    • 按位运算符:&、|、~、^ 、<<、>>
    SELECT * FROM t_emp WHERE (deptno=10 OR deptno=20) AND sal>2000;
    

    注:WHERE子句中的条件表达式的执行顺序从左到右,应尽量把索引条件、筛选掉最多记录的条件写在左侧。


    分页查询

    # LIMIT + 起始位置,偏移量
    SELECT * FROM t_emp LIMIT 0,5; 
    
    # 查询前五条数据 简写
    SELECT * FROM t_emp LIMIT 5; 
    

    排序

    # 默认升序
    SELECT * FROM t_emp ORDER BY sal; 
    
    # 降序
    SELECT * FROM t_emp ORDER BY sal DESC; 
    
    # 指定多个排序规则,当第一个规则无法排序时使用第二个,以此类推,兜底使用主键来排序
    SELECT * FROM t_emp 
    ORDER BY sal DESC,hiredate DESC; 
    

    去重

    # DISTINCT用于筛去结果集中完全相同的记录
    SELECT DISTINCT deptno FROM t_emp;
    SELECT DISTINCT deptno,job FROM t_emp;
    

    聚合查询

    聚合函数可以对查询到的记录做简单的计算,常用聚合函数:

    函数 说明
    AVG (列名) 平均值
    COUNT (列名) 非空记录数
    MAX (列名) 非空最大值
    MIN (列名) 非空最小值
    SUN (列名) 合计

    示例:

    SELECT SUM(sal) FROM t_emp ;
    SELECT SUM(IFNULL(sal,0)) FROM t_emp ;
    
    SELECT AVG(IFNULL(sal,0)) FROM t_emp ;
    SELECT MAX(IFNULL(sal,0)) FROM t_emp ;
    SELECT MIN(IFNULL(sal,0)) FROM t_emp ;
    
    SELECT COUNT(*) FROM t_emp ;
    SELECT COUNT(sal) FROM t_emp ;
    

    注:聚合函数是对查询结果做统计,不能用在WHERE条件子句中。


    分组查询

    一般使用GROUP BY子句将结果集分组处理,用法示例:

    SELECT deptno,AVG(sal) FROM t_emp GROUP BY deptno;
    

    如果分组后的结果集还需要再分组,可使用逐级分组

    SELECT deptno,job,AVG(sal) FROM t_emp 
    GROUP BY deptno,job
    ORDER BY deptno,AVG(sal) DESC;
    

    如果需要对分组的结果再做相应的汇总计算,使用WITH ROLLUP

    SELECT deptno,AVG(sal) FROM t_emp
    GROUP BY deptno WITH ROLLUP;
    

    如果使用 GROP BY 子句,SELECT子句就只能出现 分组列 和 聚合函数,不能出现其他列的字段,如果需要获得某个字段对应结果集(如获得按班级分组后,要显示每个班对应的人)可以使用 GROP_CONCAT 函数,将该字段拼接成字符串显示:

    SELECT deptno,COUNT(*),GROUP_CONCAT(ename) FROM t_emp 
    GROUP BY deptno ;
    

    使用 HAVING 子句

    由于WHERE子句的优先级高,执行WHERE时还没有检索出数据,所以WHERE子句中不能使用聚合函数。

    但如果有这样查询逻辑:查询部门平局工资大于2000的部门

    # 这样查肯定报错,要配合HAVING子句
    SELECT deptno FROM t_emp
    WHERE AVG(sal)>=2000
    GROUP BY deptno;
    
    # 使用HAVING子句配合GROUP BY字句做筛选,HAVING子句在GROUP BY后执行
    SELECT deptno FROM t_emp
    GROUP BY deptno HAVING AVG(sal)>=2000;
    

    注:HAVING子句与WHERE子句的功能类似,但普通条件还是要用WHERE条件,WHERE执行顺序靠前,可以提前剔除大量无关数据


    查询语句的执行顺序:FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

  • 相关阅读:
    python通过标准输入读取内容,读取键盘输入的内容?接收用户输入?
    Centos修改时间显示的时区,将UTC修改为CST
    python中注释的写法
    python中,数字类型计算
    python中,获取字符串的长度
    python中的字符串常量,是否支持通过下标的方式赋值
    python,如何获取字符串中的子字符串,部分字符串
    python中是否有单独的字符类型,通过下标的方式表示字符串中的字符
    python中,如何将两个变量值进行拼接
    python中,如有个非常长的字符串,在写的时候如何将其分隔
  • 原文地址:https://www.cnblogs.com/bqzzz/p/14405436.html
Copyright © 2011-2022 走看看