SQL的数据查询功能之二简单查询

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、简单查询

1. 选择表中的若干列

(1)查询指定列

例5 查询全体学生的学号与姓名

SELECT Sno,Sname FROM Student;

<目标列表达式> 中各个列的先后顺序可以与表中的顺序不一致。也就是说,用户在查询时可以根据应用的需要改变列的显示顺序。

例6 查询全体学生的姓名、学号、所在系

SELECT Sname, Sno, Sdept FROM Student;

结果表中的列的顺序与基表中不同,是按查询要求,先列出姓名属性,然后再列学号属性和所在系属性。

(2)查询全部列

例7 查询全体学生的详细记录

SELECT * FROM Student;

该SELECT语句实际上是无条件地把Student表的全部信息都查询出来,所以也称为全表查询,这是最简单的一种查询。

(3)查询经过计算的值

SELECT子句的<目标列表达式>不仅可以是表中的属性列,也可以是有关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。

例8 查询全体学生的姓名及其出生年份

SELECT Sname, 2004-Sage FROM Student;

本例中,<目标列表达式>中第二项不是通常的列名,而是一个计算表达式,是用当前的年份(假设为2004年)减去学生的年龄,这样,所得的即是学生的出身年份。输出的结果为:

Sname

------ ----------

李勇1976

刘晨1977

王名1978

张立1978

不仅可以是算术表达式,还可以是字符串常量、函数等。

例9 查询全体学生的姓名、出生年份和所有系

SELECT Sname, 'Year of Birth:', 2004-Sage 出生年份FROM Student;

结果为:

Sname 出生年份

------ -------------------------

李勇Year of Birth: 1976

刘晨Year of Birth: 1977

王名Year of Birth: 1978

张立Year of Birth: 1978

用户可以通过指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列表达式尤为有用。

2.选择表中的若干元组

(1)消除取值重复的行

例10 查询所有选修过课的学生的学号

SELECT Sno FROM SC;

假设SC表中有下列数据

Sno Cno Grade

------- ------- -------

95001 1 92

95001 2 85

95001 3 88

95002 2 90

95002 3 80

执行上面的SELECT语句后,结果为:

Sno

-------

95001

95001

95001

95002

95002

该查询结果里包含了许多重复的行。如果想去掉结果表中的重复行,必须指定DISTINCT短语: SELECT DISTINCT Sno FROM SC;

执行结果为:

Sno

-------

95001

95002

(2)查询满足条件的元组

查询满足指定条件的元组可以通过WHERE子句实现。WHERE子句常用的查询条件如表3-3所示。

常用的查询条件

查询条件谓词

──────────────────────

比较(比较运算符) = 、>、>=、<、<=、<>(!=)、NOT

确定范围 BETWEEN AND, NOT BETWEEN AND

确定集合IN, NOT IN

字符匹配 LIKE, NOT LIKE

空值 IS NULL, IS NOT NULL

多重条件 AND, OR

①比较大小

例11 查询计算机系全体学生的名单

SELECT Sname FROM Student WHERE Sdept = '计算机系';

例12 查询所有年龄在20岁以下的学生姓名及其年龄

SELECT Sname, Sage FROM Student WHERE Sage <20;

或 SELECT Sname, Sage FROM Student WHERE NOT Sage>= 20;

例13查询考试成绩有不及格的学生的学号

SELECT DISTINCT Sno FROM Course WHERE Grade <60;

这里使用了DISTINCT短语,当一个学生有多门课程不及格,他的学号也只列一次。

②确定范围

例14 查询年龄在20至23岁之间的学生的姓名、系别、和年龄

SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

与BETWEEN...AND...相对的谓词是NOT BETWEEN...AND...。

例15 查询年龄不在20至23岁之间的学生姓名、系别和年龄

SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

③确定集合

例16 查询信息系、数学系和计算机系的学生的姓名和性别

SELECT Sname, Ssex FROM Student WHERE Sdept IN ('信息系', '数学系', '计算机系');

与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组。

例17 查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别

SELECT Sname, Ssex FROM Student

WHERE Sdept NOT IN ('信息系', '数学系', '计算机系');

相关文档
最新文档