3.4 数据查询
3.4.1 单表查询
1 选择表中的若干列
(3)查询经过计算的值
select子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式。
<目标表达式>是算数表达式
【例3.19】查询全体学生的姓名及其出生年份。
Student表中存储的是年龄Sage,所以出生年份是一个表达式:2020-Sage
select Sname,2020-Sage
from Student;
其结果显示了学生的出生年份,但显示无列名,因为没有指定它的列名。
<目标表达式>也可以是字符串常量、函数等。
【例3.20】查询全体学生的姓名、出生年份和所在院系,系名用小写字母表示。
select Sname,'Year of Birth:',2020-Sage,lower(Sdept)
from Student;
这里加入了一列字符串,便于看表。
可以看到,上面两个表中皆有<无列名>的列名,可以通过指定别名来改变查询结果的列标题,比如:
select Sname NAME,'Year of Birth:'BIRTH,2020-Sage BIRTHDAY,lower(Sdept)DEPARTMENT--小写
from Student;
这样就可以给每列取列名了。当然,这里的系名要求是小写,也可改为大写。
lower() | 小写 |
---|---|
upper() | 大写 |
select Sname NAME,'Year of Birth:'BIRTH,2020-Sage BIRTHDAY,upper(Sdept)DEPARTMENT--大写
from Student;
2 选择表中的若干元组
(1)消除取值重复的行
用distinct消除重复的行,缺省为all,即保留重复的行。
【例3.21】查询选修了课程的学生学号
select Sno from SC;
此时未指定distinct关键字,默认为all,结果包含重复行:
select distinct Sno from SC--消去重复行;
(2)查询满足条件的元组
通过where子句实现。其包含的常用的查询条件如如下表:
查询条件 | 谓词 |
---|---|
比较 | =,>,<,>=,<=,!=,<>,!>,!<;not+上述比较运算符 |
确定范围 | between and,not between and |
确定集合 | in,not in |
字符匹配 | like,not like |
空值 | is null,is not null |
多重条件(逻辑运算) | and,or,not |
a. 比较
【例3.22】查询计算机科学系全体学生的名单。
select Sname
from Student
where Sdept='CS'