一、WHERE子句(筛选出使选择表达式为真的元组)
1、SELECT-FROM子句可以实现数据的查询(会查询出所有元组),加上WHERE子句之后可以实现数据的筛选(会查询出满足条件的元组)
SELECT 【ALL|DISTINCT】<目标列表达式1>【,<目标列表达式2>,...】
FROM <表名或视图名1>【,<表名或视图名2>,...】
【WHERE <元组选择条件表达式>】
【GROUP BY <属性列名1>【,<属性列2>,...】【HAVING <组选择条件表达式>】】
【ORDER BY <目标列名1>【ASC|DESC】【,<目标列名2>【ASC|DESC】,...】】
2、元组选择表达式的构成
(1)运算符
(2)谓词:BETWEEN、LIKE、IN、IS NULL
(3)属性列或常量
二、运算符
包含有算术运算符、比较运算符、逻辑运算符
(1)例1:查询选修课编号为'003'的学生学号和成绩
关系代数表达式:
SQL语句:
select sNo,grade
from sC
where cNo='003';
(2)例2:查询“数计学院”“女”同学的学生学号和姓名
SQL语句:
select sNo,sN
from s
where sD='数计学院' and sex='女';
三、谓词
1、BETWEEN
(1)用于判断某个值是否属于一个指定的区间
格式:E 【NOT】BETWEEN E1 AND E2
注意:E、E1、E2都是表达式,且E1<E2
(2)举例:查询出生时间在2001-01-01到2003-12-31之间的学生的姓名和出生时间
select sN,sB
from s
where sB between '2001-01-01' and '2003-12-31'
2、LIKE
(1)用于部分匹配查询,即有一部分是可以通过通配符进行匹配的
(2)格式:
<属性列名> 【NOT】 LIKE 字符串表达式(要用引号引用起来)
(3)字符串表达式中的通配符:
字符"_":表示任意一个单字符
字符"%":表示长度可为0的任意长度的字符串
(4)注意:LIKE匹配的是字符串属性的属性值
(5)举例:查询姓“猪”的所有学生的学号和姓名
select sNo,sN
from s
where sN like '猪%'
(6)字符串表达式中有通配符的,要使用ESCAPE定义一个转义符‘\’
举例:查询课程名后缀为"_实验"的课程信息
select *
from c
where cN like '%\_实验'escape'\'
如果不加转义符的话,_起着通配符的作用
3、IN
(1)作用:用于判断一个值是否属于一个集合
(2)格式:E 【NOT】 IN (V1,V2,...,Vn)
(3)语义:只要E的值与集合中任何一个值相等,则谓词为真
(4)举例:查询非数计学院和非材料学院的学生的学号、姓名和所在院
select sNo,sN,sD
from s
where sD not in('数计学院','材料学院')
4、NULL(NULL只能表示元组的某个属性值时空缺的,不能作为操作数进行运算,可用来判断控空值)
(1)作用:用于判断属性值是否为空,当元组的某个属性未被赋值时,系统会将NULL放在这个属性的属性值的位置上,表示该属性值是空缺的
(2)格式:
<属性列名> IS 【NOT】NULL
(3)举例:查询所有缺少选课成绩的学生的学号和相应的课程号
select sNo,cNo
from sC
where grade is null
四、运算优先级
五、当对多个表进行查询时,可用谓词和运算符来构造更为复杂的逻辑表达式