数据查询
一、单表查询
1.查询仅涉及一个表,选择表中的若干列
用到的数据——>点这里下载数据
查询指定列
[例1] 查询全体学生的学号与姓名。
SELECT Sno,Sname
FROM Student;
[例2] 查询全体学生的姓名、学号、所在系。
SELECT Sname,Sno,Sdept
FROM Student;
查询全部列
- 选出所有属性列:
- 在SELECT关键字后面列出所有列名
- 将<目标列表达式>指定为 *
[例3] 查询全体学生的详细记录
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
或
SELECT *
FROM Student;
查询经过计算的值
-
SELECT子句的<目标列表达式>不仅可以为表中的属性列,也可以是表达式
[例4] 查全体学生的姓名及其出生年份。 SELECT Sname,2014-Sage /*假设当时为2014年*/ FROM Student; 输出结果: Sname 2014-Sage 李勇 1994 刘晨 1995 王敏 1996 张立 1995
使用列别名改变查询结果的列标题:
SELECT Sname NAME,'Year of Birth:' BIRTH,
2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
输出结果:
NAME BIRTH BIRTHDAY DEPARTMENT
李勇 Year of Birth: 1994 cs
刘晨 Year of Birth: 1995 cs
王敏 Year of Birth: 1996 ma
张立 Year of Birth: 1995 is
2.选择表中的若干元组
消除取值重复的行
如果没有指定DISTINCT关键词,则缺省为ALL
[例5] 查询选修了课程的学生学号。
SELECT Sno FROM SC;
等价于:
SELECT ALL Sno FROM SC;
执行上面的SELECT语句后,结果为:
Sno
201215121
201215121
201215121
201215122
201215122
指定DISTINCT关键词,去掉表中重复的行
SELECT DISTINCT Sno
FROM SC;
执行结果:
Sno
201215121
201215122
常用的查询条件:
1. 比较大小:
[例6] 查询计算机科学系全体学生的名单。
SELECT Sname
FROM Student
WHERE Sdept=‘CS’;
[例7]查询所有年龄在20岁以下的学生姓名及其年龄。
SELECT Sname,Sage
FROM Student
WHERE Sage < 20;
[例8]查询考试成绩有不及格的学生的学号。
SELECT DISTINCT Sn
FROM SC
WHERE Grade<60;
2. 确定范围:
谓词: BETWEEN … AND …
NOT BETWEEN … AND …
[例9] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
[例10] 查询年龄不在20~23岁之间的学生姓名、系别和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
3. 确定集合:
谓词:IN <值表>, NOT IN <值表>
[例11]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN ('CS','MA’,'IS' );
[例12]查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN ('IS','MA’,'CS' );
4. 字符匹配:
-
谓词: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]
-
<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _
-
% (百分号) 代表任意长度(长度可以为0)的字符串
- 例如a%b表示以a开头,以b结尾的任意长度的字符串
-
_ (下横线) 代表任意单个字符。
- 例如a_b表示以a开头,以b结尾的长度为3的任意字符串
匹配串为固定字符串 [例13] 查询学号为201215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE ‘201215121'; 等价于: SELECT * FROM Student WHERE Sno = ' 201215121 '; 匹配串为含通配符的字符串 [例14] 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE