目录
数据查询
数据查询是数据库的核心操作。SQL 提供了 select 语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为:
select [all | distinct] <目标列表达式>[,<目标列表达式>]
from <表名或视图名> [,<表名或视图名>···] | (<select语句>)[ as ]<别名>
[where <条件表达式>]
[group by <列名1> [having <条件表达式>]]
[order by <列名2> [ asc | desc]] ;
整个 select 语句的含义是,根据 where 子句的条件表达式从 from 子句指定的基本表、视图或派生表中找出满足条件的元组,再按 select 子句中的目标表达式选出元组中的属性值形成结果表。如果有 group by 子句,则结果按 <列名1> 的值进行分组,该属性值相等的元组为一个组。通常会在每组中作用聚集函数。如果 group by 子句带 having 短语,则只有满足指定条件的组才予以输出。如果有 order by 子句,则结果还要按 <列名2> 的值的升序或降序排序。
select 语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。下面的例子均以前面创建的学生-课程数据库为例来说明 select 语句的各种用法。
单表查询
单表查询就是指仅涉及一个表的查询
1)、选择表中的若干列
查询指定列:
很多情况下,用户仅对表中的一部分属性感兴趣,这时可以通过在 select 子句的 <目标列表达式>中指定要查询的属性列,例:
//查询全体学生的学号与姓名
select Sno,Sname
from Student ;
//查询全体学生的姓名、学号、所在系
select Sname,Sno,Sdept
from Student ;
查询全部列:
、方法有两种,见例子:
select *
from Student ;
//这种方法查询出来的结果列的显示顺序与其在基表中的顺序的相同
//等价于下面,可调控列的显示顺序
select Sno,Sname,Ssex,Sage,Sdept
from Student ;
查询经过计算的值:
select 子句的 <目标列表达式> 不仅可以是表中的属性列,也可以是表达式。见下面例子:
select Sname,2019-Sage
from Student ;
//查询结果中第二列不是列名,而是一个表达式,是用设置的年份(如2019年)减去学生年龄,得到的就是学生出生年月
<目标列表达式> 不仅可以是算术表达式,还可以是字符串常量、函数等。
//查询全体学生的姓名、出生年份好所在的院系,要求用小写字母表示系名,并为出生年份指定别名
select Sname,2019-Sage birthday,lower(Sdept) 系别
from Student;
2)、选择表中的若干元组
消除取值重复的行:
两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行。可以用 distinct 消除它们,如果没有指定 distinct 关键词,则默认为 all ,即保留结果表中取值重复的行。表现形式为:
select distinct Sno
from SC ;
//默认情况下
select Sno
from SC ;
//等价于
select all Sno
from SC ;
查询满足条件的值:
查询满足指定条件的元组可以通过 where 子句实现,常用的查询条件如图: