数据查询语言
-- 语法格式
SELECT [ALL | DISTINCT | DISTINCTROW ] 列名或表达式 ... /*SELECT子句*/
[FROM 源表... ] /*FROM子句*/
[WHERE 条件] /*WHERE子句*/
[GROUP BY {列名| 表达式 | position} [ASC | DESC], ... [WITH ROLLUP]] /*GROUP BY子句*/
[HAVING 条件] /*HAVING 子句*/
[ORDER BY {列名 | 表达式 | position} [ASC | DESC] , ...] /*ORDER BY子句*/
[LIMIT {[offset,] row_count | row_count OFFSET offset}] /*LIMIT子句*/
单表查询
1、SELECT子句
SELECT [DISTINCT] 列名或表达式; -- DISTINCT可去掉重复行
SELECT 列名 [AS 列别名];
-- 例1
SELECT teacherno, tname, school -- 在teacher表中查询这三列
FROM teacher;
-- 例2
SELECT * -- 查询teacher表中的所有列
FROM teacher;
--例3
SELECT studentno AS 学号, tc AS 学分, tc+2 AS 增加2分后的学分
FROM student; -- 在student表中查这俩列,并将学分一栏全部+2
2、WHERE子句
SELECT 列名或表达式
FROM 表明
WHERE 条件;
(1)比较运算(>、<、= 等)
<表达式1> { = | < | <= | > | >= | <> | != } <表达式2>
-- 例1
SELECT * --在student表中,查询specialityno为080903或ssex为男的学生
FROM student
WHERE specialityno='080903' or ssex='男';
-- 例2
SELECT * -- 在student表中查询tc>50的学生
FROM student
WHERE tc>50;
(2)指定范围
BETWEEN、NOT BETWEEN、IN是用于指定范围的三个关键字,用于查找字段值在(或不在)指定范围的行。语法格式如下。
<表达式> [ NOT ] BETWEEN <表达式1> AND <表达式2>
<表达式> [ NOT ] BETWEEN in (区间)
-- 例1
SELECT * -- 在student表中查询tc在(48,50)区间内的记录
FROM student
WHERE tc in (48,50);
-- 例2
SELECT * -- 在teacher表中,查询不在20世纪80年代出生的教师。
FROM teacher
WHERE tbirthday NOT BETWEEN '19800101' AND '19891231’;
(3)空值判断
<表达式> IS [ NOT ] NULL
-- 例
SELECT * -- 查询score表中grade非空的记录
FROM score
WHERE grade IS null;
(4)使用LIKE 关键字的字符串匹配查询
<字符串表达式1> [ NOT ] LIKE <字符串表达式2> [ ESCAPE '<转义字符>' ]
在使用LIKE关键字时,<字符串表达式2>可以含有通配符,通配符有以下两种:
%:代表0或多个字符。 例子:%abc% , %abc , abc%
_:代表一个字符。 例子:_t_ ; a_b
LIKE匹配中使用通配符的查询也称模糊查询。
-- 例
SELECT * -- 查找teacher表中姓杨的教师
FROM teacher
WHERE tname LIKE '杨%’;
(5)正则表达式
match_表达式 [ NOT ][ REGEXP | RLIKE ] match_表达式
-- 例
SELECT * -- 在课程表中,查询含有“系统”或“工程”的所有课程名称。
FROM course
WHERE cname REGEXP '系统|工程’;
3、GROUP BY子句和HAVING子句
(1)聚合函数
聚合函数实现数据的统计计算,用于计算表中的数据,返回单个计算结果。聚合函数包括COUNT、SUM、AVG、MAX、MIN等函数
COUNT函数用于计算组中满足条件的行数或总行数。
COUNT ( { [ ALL | DISTINCT ] <表达式> } | * ) -- DISTINCT去掉重复值
-- 例
SELECT COUNT(*) AS 总人数 -- 在教师表中,求教师的总人数
FROM teacher;
SUM函数用于求出一组数据的总和,AVG函数用于求出一组数据的平均值。
SUM / AVG ( [ ALL | DISTINCT ] <表达式> )
-- 例
SELECT SUM(grade) AS 课程号8001总分 --统计课程号为8001的总分。
FROM score;
MAX函数用于求出一组数据的最大值,MIN函数用于求出一组数据的最小值,这两个函数都可以适用于任意类型数据。
MAX / MIN ( [ ALL | DISTINCT ] <表达式> )
-- 例
SELECT MAX(grade) AS 课程号4008最高分, MIN(grade) AS 课程号4008最低分
FROM score;
(2)GROUP BY子句
GROUP BY子句用于指定需要分组的列。
GROUP BY [ ALL ] <分组表达式> [,…n]
-- 例
SELECT courseno AS 课程号, MAX(grade) AS 最高分, MIN(grade) AS 最低分
FROM score
GROUP BY courseno; -- 查询成绩表中各门课程的最高分和最低分。
(3)HAVING子句
HAVING子句用于对分组按指定条件进一步进行筛选,过滤出满足指定条件的分组。
[ HAVING <条件表达式> ] -- 条件表达式为筛选条件,可以使用聚合函数
-- 例
SELECT studentno AS 学号, AVG(grade) AS 平均分
FROM score
GROUP BY studentno
HAVING AVG(grade)>90; -- 查询平均分在90分以上的学生的学号和平均分。
4、ORDER BY子句和LIMIT子句
(1)排列查询(对查询结果进行排序)
[ ORDER BY { <排序表达式> [ ASC | DESC ] } [ ,…n ]
-- ASC 升序; DESC 降序
-- 例
SELECT * -- 将080703专业的学生按出生时间降序排序
FROM student
WHERE specialityno='080703'
ORDER BY sbirthday DESC;
(2)LIMIIT子句(限制SELECT语句返回的行数)
LIMIT {[第几行开始显示,] 显示几行 | 显示几行 OFFSET 第几行开始显示}
-- 例
SELECT studentno,courseno, grade -- 查询成绩表中成绩排名前3位的学生的信息
FROM score
ORDER BY grade DESC
LIMIT 0, 3; -- 或 LIMIT 3 OFFSET 0;
LIMIT子句有两种语法格式,例如,显示表中第2行到第4行,可写为:”LIMIT 1, 3”,也可写为: ”LIMIT 3 OFFSET 1”。
标签:实用教程,--,数据库,MySQL,查询,grade,子句,WHERE,SELECT From: https://blog.csdn.net/m0_73930473/article/details/143867642