关于SQL单表查询语句总结:
一 基础查询:
1. SELECT 字段名.... FROM 表名;
2. SELECT * FROM 表名;
二 条件查询
(第一个字段名可以为*,代表从全部数据中查找)
1. SELECT 字段名... FROM 表名
WHERE 条件表达式;
2. SELECT 字段名... FROM 表名
WHERE 条件表达式 AND 条件表达式....;
3. SELECT 字段名... FROM 表名
WHERE 条件表达式 OR 条件表达式....;
(或者是OR和AND一起灵活使用)
三 关键字查询/精确查询
(第一个字段名可以为*,代表从全部数据中查找)
1. IN或者NOT IN
SELECT 字段名... FROM 表名
WHERE 字段名 [NOT] IN (元素....);
元素是限定条件,查询包含某些元素的数据或者是不包含某些元素的数据;
2. IS NULL 或者 IS NOT NULL
SELECT 字段名... FROM 表名
WHERE 字段名 [NOT] IN NULL;
查询字段为空或者不为空的数据;
3. BETWEEN AND
SELECT 字段名... FROM 表名
WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;
查询某个字段的值在或不在某个范围内的数据;
四 模糊查询
1. LIKE
SELECT 字段名... FROM 表名
WHERE 字段名 [NOT] LIKE ‘匹配字符串’;(这个字符串可以是一个普通的字符串,也可 以是包含百分号(%)和下画线(_)的通配字符串,其中百分号表示任意0~n个字符,下划 线表示任意一个字符。)
例子:
查询姓名由5个字母构成的学生的信息
mysql> SELECT * FROM stu
-> WHERE sname LIKE '_____';
查询姓名由5个字母构成,并且第5个字母为i的学生的信息
mysql> SELECT * FROM stu
-> WHERE sname LIKE '____i';
查询姓名以z开头的学生的信息
mysql> SELECT * FROM stu
-> WHERE sname LIKE 'z%';
查询姓名第二个字母为i的学生的信息
mysql> SELECT * FROM stu
-> WHERE sname LIKE '_i%';
查询姓名中包含a的学生的信息
mysql> SELECT * FROM stu
-> WHERE sname LIKE '%a%';
2. DISTINCT(用于去除重复数据)
SELECT DISTINCT 字段名 FROM 表名;
例子: 查询所有员工的月薪,并且去重。
SELECT DISTINCT sal FROM emp;
五 高级查询
1. 排序查询
SELECT 字段.... FROM 表名
ORDER BY 字段名.... [ASC|DESC];(ORDER BY关键字后的字段名表示指定排序的字段, ASC代表按升序排序,DESC代表按降序排序,如果不写,默认按升序排序)
(如果按多个字段排序,则优先按ORDER BY后排的靠前的字段排序)
例子: 查询所有学生记录,按年龄升序排序
mysql> SELECT * FROM stu
-> ORDER BY age ASC;
或mysql> SELECT * FROM stu
-> ORDER BY age ASC;
2. 聚合函数
MySQL提供了一系列函数实现数据统计,也称为聚合函数。
1) COUNT()函数
SELECT COUNT (*|1|列名) FROM 表名;
(该函数有三个可选参数,COUNT(*)是返回行数,包括NULL;
COUNT(列名)是返回特定列的值具有的行数,不包括NULL;
COUNT(1)与COUNT(*)的返回结果一样,不过数据表没有主键.)
例子:
查询员工表中的记录数
mysql> SELECT COUNT (*) FROM emp;
查询员工中有奖金的人数
mysql> SELECT COUNT (comn) AS total FROM emp;
查询员工表中月薪大于2500元的人数
mysql> SELECT COUNT (*) AS total FROM emp
-> WHERE sal > 2500;
IFNULL()函数,可以判断字段是否为NULL,若为NULL,则可以将NULL替换为数值0;
例子:
查询月薪与奖金之和大于2500的人数
mysql> SELECT COUNT (*) AS total FROM emp
-> WHERE sal+IFNULL(comn,0)> 2500;
2) SUM()函数
用于计算指定列的数值和,若类型不是数据类型,则计算结果是0
SELECT SUM(字段名) FROM 表名;
例子:
查询员工表中所有员工的月薪和
mysql> SELECT SUM(sal) FROM emp;
查询员工表中所有员工的月薪加奖金的和,查询出的列名指定为total
mysql> SELECT SUM(sal+IFNULL(comn,0)) AS total FROM emp;
3) AVG()函数
用于计算指定列的平均值,若类型不是数据类型,则计算结果是0
SELECT AVG(字段名) FROM 表名;
例子:
查询员工表中所有员工的平均月薪
mysql> SELECT AVG(sal) FROM emp;
4) MAX()函数
用于计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
SELECT MAX(字段名) FROM 表名;
5) MIN()函数
用于计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
SELECT MIN(字段名) FROM 表名;
六 分组查询
1. GROUP BY
查询数据时需要按一定的类别进行统计
例子:
查询员工表中每个部门编号以及每个部门工资大于1500元的人数
mysql> SELECT deptno,COUNT (*) FROM emp
-> WHERE sal>1500
-> GROUP BY deptno;
2. HAVING子句
用于在分组后对数据进行过滤
SELECT 字段名.... FROM 表名
GROUP BY 字段名..... [HAVING 条件表达式];
例子:
查询员工表中工资总和大于9000元的部门编号以及工资和
mysql> SELECT deptno,SUM(sal) FROM emp
-> GROUP BY deptno;
-> HAVING SUM(sal) > 9000;
过程,先分组查询每个部门编号的工资和,再过滤出工资和大于9000元的部门
3. LIMIT分页
用于限制查询结果的数量
SELECT 字段名.... FROM 表名
LIMIT [M,]N;
(第一个参数m可选代表开始索引,默认值为0,代表第一条记录;第二个参数n必选,代表 从第m+1条记录开始取n条记录)
例子:
查询学生表中从第三条开始的记录,总共查询五条记录
mysql> SELECT * FROM stu LIMIT 2,5;