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
MySQL:单表查询的更多相关文章
- Mysql 单表查询 子查询 关联查询
数据准备: ## 学院表create table department( d_id int primary key auto_increment, d_name varchar(20) not nul ...
- python 3 mysql 单表查询
python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...
- Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- Mysql 单表查询where初识
Mysql 单表查询where初识 准备数据 -- 创建测试库 -- drop database if exists student_db; create database student_db ch ...
- MySQL单表查询
MySQL之单表查询 创建表 # 创建表 mysql> create table company.employee5( id int primary key AUTO_INCREMENT not ...
- python mysql 单表查询 多表查询
一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...
- mysql 单表查询
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 ...
- SQL学习笔记四(补充-1)之MySQL单表查询
阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录 ...
- python开发mysql:单表查询&多表查询
一 单表查询,以下是表内容 一 having 过滤 1.1 having和where select * from emp where id > 15; 解析过程;from > where ...
- 0x06 MySQL 单表查询
一 单表查询语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字 ...
随机推荐
- CENTOS7 使用YUM安装MARIADB
现在在服务器配置数据库,一般都会直接配置MariaDB,它可以实现mysql数据库连接. 1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server ...
- 2019牛客暑期多校训练营(第五场)H-subsequence 2 (拓扑排序+思维)
>传送门< 题意: 给你几组样例,给你两个字符a,b,一个长度len,一个长度为len的字符串str,str是字符串s的子串 str是s删掉除过a,b两字符剩下的子串,现在求s,多种情况输 ...
- 【noi 2.6_9285】盒子与小球之三(DP)
题意:有N个相同的球,M个不同的盒子,每个盒子最多放K个球.请计算将这N个球全部放入盒子中的方案数模1000007后的结果. 解法:f[i][j]表示i个盒子里放j个球的方案数. 1.得到3重循环的坐 ...
- 【noi 2.6_9270】&【poj 2440】DNA(DP)
题意:问长度为L的所有01串中,有多少个不包含"101"和"111"的串. 解法:f[i][j]表示长度为i的01串中,结尾2位的十进制数是j的合法串的个数.那 ...
- hdu 6795 Little W and Contest 并查集+排列组合
题意: t组输入,有n个人,刚开始谁也不认识谁.每一个人有一个权值w[i](1<=w[i]<=2),你要挑选3个互相不认识的人组成一个队,且要保证3个人权值之和大于等于5(也就意味着最少要 ...
- keras fit_generator 并行
虽然已经走在 torch boy 的路上了, 还是把碰到的这个坑给记录一下 数据量较小时,我们可直接把整个数据集 load 到内存里,用 model.fit() 来拟合模型. 当数据集过大比如几十个 ...
- woj1005-holding animals-01pack woj1006-Language of animals-BFS
title: woj1005-holding animals-01pack date: 2020-03-05 categories: acm tags: [acm,woj,pack] 01背包.中等题 ...
- IFIX 目录结构
iFIX使用了许多目录存储程序和数据文件.用路径配置对话框来指定iFIX目录的位置和名称.可在SCU工具箱中单击"路径"按钮显示该对话框. 当iFIX安装后它将创建一个目录,该目录 ...
- K8s(一)----容器编排工具基础概念
kubernetes(k8s)容器编排工具基础概念 Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controlle ...
- bili & library bundler
bili & library bundler https://bili.egoist.sh/#/#quick-start # Node.js 8 or above: $ npm i -D bi ...