在线数据库: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

MySQL:单表查询的更多相关文章

  1. Mysql 单表查询 子查询 关联查询

    数据准备: ## 学院表create table department( d_id int primary key auto_increment, d_name varchar(20) not nul ...

  2. python 3 mysql 单表查询

    python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...

  3. Mysql 单表查询-排序-分页-group by初识

    Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...

  4. Mysql 单表查询where初识

    Mysql 单表查询where初识 准备数据 -- 创建测试库 -- drop database if exists student_db; create database student_db ch ...

  5. MySQL单表查询

    MySQL之单表查询 创建表 # 创建表 mysql> create table company.employee5( id int primary key AUTO_INCREMENT not ...

  6. python mysql 单表查询 多表查询

    一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...

  7. mysql 单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数   二 ...

  8. SQL学习笔记四(补充-1)之MySQL单表查询

    阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录 ...

  9. python开发mysql:单表查询&多表查询

    一 单表查询,以下是表内容 一 having 过滤 1.1 having和where select * from emp where id > 15; 解析过程;from > where ...

  10. 0x06 MySQL 单表查询

    一 单表查询语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字 ...

随机推荐

  1. 手把手教你从Git上导入项目

    Git上导入项目 进入Gitlab账户中的项目,点击Clone按钮,复制HTTPS路径.如果配置了SSH,则可以通过SSH导入项目. 在IDEA中,点击VCS-Checkout from Versio ...

  2. 2018 ACM-ICPC 焦作区域赛 E Resistors in Parallel

    Resistors in Parallel Gym - 102028E 吐槽一下,网上搜索的题解一上来都是找规律,对于我这种对数论不敏感的人来说,看这种题解太难受了,找规律不失为一种好做法,但是题解仅 ...

  3. java中static修改成员变量和函数和其他使用

    一.通过static修饰的成员变量初始化只会初始化一次 //静态变量初始化只会初始化一次 public class zuishuai { public static void main(String[ ...

  4. Codeforces Round #552 (Div. 3) E. Two Teams (模拟,优先队列,双向链表)

    题意:有\(n\)个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的\(k\)个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每 ...

  5. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  6. nyoj-2357

    2357: 插塔憋憋乐 时间限制: 1 秒  内存限制: 128 MB提交: 107  解决: 28提交 状态 题目描述 众所不知,LLM是一位红警3大佬,打的非常厉害,但是曾经也是一位萌新,喜欢在家 ...

  7. sdut3562-求字典序最小的最短路 按顶点排序后spfa的反例

    首先我们可以这么搞...倒序建图,算出源点s附近的点距离终点的距离,然后判断一下,终点是否能跑到源点 能跑到的话呢,我们就判断s周围的点是否在最短路上,然后我们选编号最小的点就好了 代码 #inclu ...

  8. MOOC学习成果认证及对高等教育变革路径的影响

    MOOC是网络开放教育创新发展的产物,也是备受人们欢迎的网络学习途径.当前制约MOOC能否可持续深入发展的问题聚焦于MOOC学习成果能否得到合理的认证.MOOC学习成果认证分为非学分认证和学分认证.M ...

  9. Sentry & React

    Sentry & React https://docs.sentry.io/platforms/javascript/guides/react/ https://docs.sentry.io/ ...

  10. web online code editor All In One

    web online code editor All In One 在线代码编辑器 Monaco Editor 摩纳哥编辑器 ️ 22.1k The Monaco Editor is the code ...