语句格式:
SELECT[ALL|DISTINCT]<目标列表达式>…
FROM<表名或视图名>…
[WHERE<条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC|DESC]];
SELECT子句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
HAVING短语:只有满足指定条件的组才予以输出
ORDER BY子句:对查询结果表按指定列的升序或降序排序
1.1 选择表中的若干列
查询指定列:
例1.1:查询全体学生的姓名、学号、所在系:
SELECT Sname,Sno,Sdept
FROM Student;
查询全部列:
在SELECT关键字后面列出所有列名的表示:**SELECT ***
例1.2:查询全体学生的详细记录:
SELECT *
FROM Student;
查询经过计算的值:
SELECT子句的<目标表达式>可以为:算术表达式、字符串常量、函数、列别名
例1.3:查全体学生的姓名及其出生年份:
SELECT Sname,2020-Sage
FROM Student;
1.2 选择表中的若干元组
消除取值重复的行:
如果没有指定DISTINCT关键词,则缺省为ALL
例1.4:查询选修了课程的学生学号:
SELECT Sno FROM SC;
SELECT DISTINCT Sno FROM SC;
查询条件 | 谓词 |
---|---|
比较 | =,<,>,>=,<=,!=,<>,!>,!<,NOT; |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
字符匹配 | LIKE,NOT LIKE |
确定集合 | IN,NOT IN |
空值 | IS NULL,IS NOT NULL |
多重条件(逻辑运算) | AND,OR,NOT |
查询满足条件的元组–比较大小:
例1.5:查询计算机科学系全体学生的名单:
SELECT Sname FROM Student
WHERE Sdept='CS';
例1.6:查询所有年龄在20岁以下的学生姓名及其年龄:
SELECT Sname,Sage FROM Student
WHERE Sage<20;
查询满足条件的元组–确定范围:
BETWEEN…AND…
NOT BETWEEN…AND…
例1.7:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄:
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
查询满足条件的元组–确定集合:
IN<值表>,NOT IN<值表>
例1.8:查询信息系(IS),数学系(MA)和计算机科学系(CS)学生的姓名和性别:
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('IS','MA','CS');
查询满足条件的元组–字符匹配:
谓词:[NOT] LIKE ’ <匹配串>’ [ESCAPE ‘<换码字符>’]
例1.9:查询学号为200215121的学生的详细情况:
SELECT *
FROM Student
WHERE Sno LIKE'200215121';
<匹配串>可以是一个完整的字符串,也可以含有通配符%和_
%:代表任意长度的字符串,例如:a%b表示以a开头,以b结尾的任意长度的字符串
_:代表任意单个字符,例如:a_b表示以a开头,以b结尾的长度为3的任意字符串。
例2.0:查询所有姓刘学生的姓名、学号和性别:
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE'刘%';