第3章 单表查询
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-8-23
2.4 在WHERE子句中使用LIKE来匹配字符 如果用户要查询的字符串本身就含有%或_,这时 就要使用ESCAPE ’<转义字符>’断语对通配符进 行转义 例:查询DB_design的课程的课程号和学分 select Cno,Ccredit from Course where Cname like ‘db\_design’ escape ‘\’
2013-8-23
1.1 剖析SELECT语句 查询指定列
通过指定SELECT子句的<目标表达式>来完成
例1、 查询全体学生的学号和姓名。
5
SELECT Sno , name FROM Student;
例2 、查询全体学生的姓名、学号、年龄。 SELECT Sname , Sno , Sage FROM Student;
7
查询经过计算的值
–
select子句的<目标表达式>可以是表达式
例4 给出所有学生的姓名及其出生年份。 select SNAME ,2007-Sage from Student
2013-8-23
1.1 剖析SELECT语句
8
<目标表达式>不仅可以是算术表达式,还 可以是字符串常量、函数。
例5 给出所有学生姓名、出生年份和所在系编号 (小写)。 select Sname , ’Year of Birth’, 2005-Sage , LOWER(Sdept) from STUDENT;
from SC
Order by 2
2013-8-23
20
2.5 SQL 中的条件设置:使用WHERE子 句 – 2.5.1 在WHERE子句中使用逻辑运算符 – 2.5.2 在WHERE子句中使用IN子句 – 2.5.3 在WHERE子句中使用BETEEN子 句 – 2.5.4 在WHERE子句中使用LIKE来匹 配字符
2013-8-23
1.5 对查询结果排序
19
在ORDER BY子句中可以使用别名及数字
select s# as 学号,c# as 课程号,grade
from SC
Order by c# 等价与select s# as 学号,c# as 课程号,grade
from SC
Order by 课程号
等价与select s# as 学号,c# as 课程号,grade
3
2013-8-23
1.1 剖析SELECT语句
4
基本结构 select <目标表达式>[,<目标表达式>] from <表名或者视图名>[, <表名或者视图 名>] where <条件表达式>
含义:根据where子句的条件表达式,从from子句 指定的表或视图找出满足条件的元组,再按 SELECT子句中的目标列表达式,选出元组中的属 性值形成结果表。
22
检索”可住人数”为2或3,且价目大于200的”房型”
SELECT 房型 FROM 房型价目 WHERE ( 可住人数=2 OR 可住人数=3 ) and 价目>200
2013-8-23
2.1在WHERE子句中使用逻辑运算符 NOT运算符: 检索”可住人数”不为2的”房型”
SELECT 房型 FROM 房型价目 WHERE ( NOT 可住人数=2 )
2013-8-23
1.4 处理空值
16
涉及空值的查询
例: 某些学生选修课程后没有参加考试,所以 有选课记录,但没有考试成绩。查询缺少成绩 的学生的学号和相应的课程号 不可写为:where select Sno , Cno from SC score = null where Score IS NULL 例:查询所有有成绩的学生学号和课程号 select Sno , Cno from SC where Score IS NOT NULL
2013-8-23
2.4 在WHERE子句中使用LIKE来匹配字符
28
例:查询所有姓刘的学生姓名、学号和性别
select Sname,Sno,Ssex from Student
where Sname like ‘刘%’ 例:查询姓“欧阳”且全名为三个汉字的学 生的姓名 select Sname from Student where Sname like ‘欧阳_ ’
关系数据库与sql语言
第三章 SQL语言—单表查询
福建农林大学软件工程学院
2
1 数据库中数据的查询 2 SQL中的条件设置:使 用WHERE子句 3 聚集查询
2013-8-23
讲课中所用的表结构
学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,score)
2013-8-23
2.3 在WHERE子句中使用BETWEEN子句 确定范围:BETWEEN
25
例: 查询年龄在20~23岁之间的学生姓名、系别、 年龄 select Sname,Sdept,Sage from Student where Sage BETWEEN 20 AND 23;
例:查询年龄不在20~23岁之间的学生姓名、 系别、年龄 select Sname,Sdept,Sage from Student
排序的时候对空值的处理 若按升序排,空值的元组最后显示;若按降序排,空值 的元组最先显示
2013-8-23
1.5 对查询结果排序
18
例: 查询全体学生情况,查询结果按所在系的系号 排列,同一系中的学生按年龄降序排列。 SELECT * FROM STUDENT ORDER BY Sdept , Sage desc
如查询学生的学号、姓名、出生年月,起出生年月 别名为year of birth select Sno ,sname, 2007-sage as year of birth “year of birth” from Student
2013-8-23
1.3 使用WHERE子句筛选查询结果
14
查询满足条件的元组 查询满足指定条件的元组可以通过WHERE子句来 实现。WHERE子句常用的查询条件如下表所示: 查询条件 比较 确定范围 确定集合 字符匹配 空值 多重条件 谓词 =,>,<,>=,<=,!=,<>,!>,!< BETWEEN AND, NOT BETWEEN AND IN,NOT IN LIKE,NOT LIKE IS NULL ,IS NOT NULL AND,OR
9
STUDENT
;
2013-8-23
1.2 对属性或表达式使用AS取别名 select sname NAME,'year of birth' BIRTH, 2007-sage BIRTHDAY, lower(sdept) AS DEPARTMENT from student;
10
2013-8-23
27
有通配符%和_。其中: %(百分号) 代表任意长度(可以为0)的字符 串。 例如a%b表示以a开头,以b结尾的任意长度 的字符串。如acb,addgb,ab等都满足该匹配 串。 _(下横线) 代表任意单个字符 例如a_b代表以a开头,以b结尾的长度为3 的任意字符串,比如acb,afb都满足该匹配串.
21
Sdept =„IS‟ OR Sdept =„MA‟ OR Sdept =„CS‟
2013-8-23
2.1在WHERE子句中使用逻辑运算符 如果这两个运算符同时出现在同一个WHERE 条件子句中,则AND的优先级高于OR,但用户可 以用括号改变优先级。 [示例] 房型价目表(房型,价目,可住人数)
2013-8-23
1.5 对查询结果排序
用ORDER BY子句对查询结果 按照一个或多个属性列排序
•
17
命令
order by
列名 [asc | desc]
缺省时是升 序排列,即 asc
例: 查询选修了C03号课程的学生的学号及其成 绩,查询结果按分数的降序排列 select Sno, Score from SC where cno=„c03‟ order by score desc
该条件等价与“可住人数 <>2”
23
检索”可住人数”不为2或3,且价目大于200的”房 型” SELECT 房型
FROM 房型价目 WHERE ( NOT ( 可住人数=2 OR 可住人数=3 ) ) and 价目>200
2013-8-23
2.2 在WHERE子句中使用IN子句
24
确定集合
• 谓词IN可以用来查找属性值属于指定集合的元组 例: 查询信息系(IS)、数学系(MA)和计算 机系(CS)学生的姓名和性别 select Sname ,Ssex from Student where Sdept in ( ‘IS’, ’MA’, ’CS’) 例:查询既不是信息系、数学系,也不是计算 机系的学生姓名和性别: select Sname, Sage from Student where Sdept NOT in ( ‘IS’, ’MA’, ’CS’)
12
例7: select s#,sname,2007-age as birthday from S
没有as情况下的检索结果 有as情况下的检索结果
2013-8-23
1.2 对属性或表达式使用AS取别名
13
注意:别名当要使用一些特殊符号,如#, %,逗号,空格等需要引号。另外where 子句中不能用列别名,必须使用准确的全 名。
2013-8-23
1.1 剖析SELECT语句
6
查询全部列
“*”:表示“所有的属性”。
例3 给出所有学生的信息。
select Sno,Sname,Ssex,Sage,Sdept from Student;
等价于: select * from
Student;
2013-8-23
1.1 剖析SELECT语句
2013-8-23
2.1在WHERE子句中使用逻辑运算符 多重条件查询 逻辑运算符AND和OR可用来联结多个查询条件。 例:查询计算机系年龄在20岁以下的学生姓名 select Sname from student where Sdept=„cs‟and Sage <20 例:查询信息系(IS)、数学系(MA)和计算 机系(CS)学生的姓名和性别 select Sname,Ssex from Student where
2013-8-来自百度文库3
1.3 使用WHERE子句筛选查询结果 比较大小 例 :查询计算机系全体学生的名单 select Sname from Student
15
where Sdept=‘CS’
例:查询所有年龄在20岁以下的学生姓名及其年龄 select Sname, Sage from Student where Sage<20
2013-8-23
1.2 对属性或表达式使用AS取别名 用户可以通过AS指定别名来改变查询结果的列 标题,格式如下: oldname as newname,其中as可选。 select Sname NAME ,’Year of Birth’ BIRTH ,2004-Sage BIRTHDAY , LOWER(Sdept) as DEPARTMENT from
含义:查找指定的属性列值与<匹配串>相匹配的元组
例:查询姓名为李勇的学生信息 select * from Student where Sname like ‘李勇’
相当于: Sname=„李勇’
2013-8-23
2.4 在WHERE子句中使用LIKE来匹配字符
匹配串可以是一个完整的字符串,也可以含
where Sage NOT BETWEEN 20 AND 23;
2013-8-23
2.4 在WHERE子句中使用LIKE来匹配字符
26
字符匹配
谓词LIKE可以用来进行字符串的匹配。其一般语法 格式: [ NOT ] LIKE ‘<匹配串>‟ [ ESCAPE escape_character ]
属性更名
S(S# , SNAME ,AGE,SEX )
11
SC(S#,C#,GRADE)
例6:
from SC
C(C#, CNAME ,TEACHER)
select s# as 学号,c# as 课程号,grade as 成绩
没有as情况下的检索结果
有as情况下的检索结果
2013-8-23
1.2 对属性或表达式使用AS取别名