- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WHERE studioName=‘Disney’
AND year=‘1990’
21
例6.3 同6.2
片名的列标题改为name 片长的列标题改为duration
SELECT title AS name,length AS duration
FROM Movies WHERE studioName=‘Disney’ AND year=‘1990’
WHERE Students.Sno =SC.Sno
AND o=o
37
例 : 查询计算机系每个学生选修的课程名及其成绩
SELECT Students.Sno, Sname, Cname, Grade
FROM Students, SC,Courses
WHERE Students.Sno =SC.Sno
FROM Movies
WHERE studioName=‘Disney’ AND year=1990 ORDER BY length,title ORDER BY 3,1
27
例:查找选修3号课程的学生的学号及相应成绩,
降序排列
以成绩
SELECT Sno, Grade
FROM SC WHERE Cno=‘3’
24
P147 例:查找MGM公司拍摄的: 1970年以后或片长小于90分钟的所有电影的名字 SELECT title
FROM Movies
WHERE (year>1970 OR length<90) AND studioName=‘MGM’ 优先级
25
日期时间的比较:
第一个日期早于第二个 小于 (<) 小于( <)
7
例: 查找计算机系学生的名字
SELECT Sname FROM Students WHERE Sdept=‘计算机’
8
例: 查找年龄小于19的学生的姓名和年龄
SELECT Sname, Sage FROM Students WHERE Sage<19
NOT Sage>=19
9
例:查找有过不及格成绩的学生的学号
第5章
5.1
关系数据库标准语言SQL
SQL 概述
特点:
集DDL、DML、DCL于一体 非过程化 集合操作 易学易用
与三级模式关系
1
5.2 查询
所用数据库:
1) 学生-课程数据库
Students(Sno, Sname, Ssex, Sage, Sdept)
Courses(Cno, Cname, Cpno, Ccredit)
同一天内,第一个时间早于第二个 SQL Server 2000: DATETIME ‘6/15/2000’ ‘10:20:10 am’
‘6/15/2000 10:20:10 am’ ‘6/15/2000 13:00:10’
26
P151 例6.11 查询Disney公司1990年拍摄的影片信息,以片长的 升序排列,同样片长的,以片名的字母序排列。 SELECT *
SELECT DISTINCT Sno FROM SC
6
*查询满足条件的元组----------SQL 选择 WHERE子句
运算符/关键字
比较 =, >, <, >=, <=, <>, !>, !<
确定范围 [NOT] BETWEEN ... AND ...
确定集合 [NOT] IN
字符匹配 [NOT] LIKE 空值 逻辑 串的拼接 IS [NOT] NULL AND || OR P146 NOT + SQL Server 2000以上
19
例:查找计算机系,经管系或建筑系的学生的名字和性别
SELECT Sname, Ssex FROM Students WHERE Sdept=‘计算机’ OR Sdept=‘经管’ OR Sdept=‘建筑’
20
P145 例6.2 查找Disney公司1990年拍摄的影片的片名和长度 SELECT title,length FROM Movies
WHERE
Hale Waihona Puke Moviestitle LIKE ‘Star _ _ _ _’
17
例:查找没有成绩的选课记录中的学号和课程号 SELECT Sno,Cno FROM SC WHERE Grade IS NULL 例:查找已有成绩的选课记录中的学号和课程号 SELECT Sno, Cno FROM SC
WHERE Grade
SELECT DISTINCT Sno FROM SC WHERE Grade<60
10
P144 例6.1:
查找Disney 公司,在1990年制作的所有电影的有关信息
SELECT * FROM Movies WHERE studioName=‘Disney’ AND year=1990
11
例 :查找年龄在20到23 之间的学生的姓名,所在系和年龄
SQL Server 2000: 列名 AS 别名 列名 别名 别名 = 列名
22
例6.4 进一步,片长以小时计,列标题为lengthInHours SELECT title AS name,
length *0.016667 AS lengthInHours
FROM Movies WHERE studioName=‘Disney’ AND year=‘1990’
23
P145 例6.5 进一步改,片长以小时计,且在每一个片长后加
‘hrs.’----- 加一个新的列 ,每行都是‘hrs.’
SELECT title ,length *0.016667 AS length,
‘hrs.’ AS inHours
FROM Movies WHERE studioName=‘Disney’ AND year=1990
LIKE ‘[^A-D]%’ 第1个不是A-D之间
LIKE ‘%ea_’ LIKE ‘_en’
15
P148 换码字符/转义字符
LIKE ‘X% % X%’ ESCAPE ‘X’
%……%
16
P148 例6.7 查找电影名以‘Star’开头后面紧跟4个字母的所有 电影名 SELECT title
FROM
12
例 : 查找计算机系、经管系的学生的姓名和性别 SELECT Sname, Ssex FROM Students WHERE Sdept IN (‘计算机’,’经管’) 不用IN? 例:查找非计算机系非经管系的学生的姓名和性别 SELECT Sname, Ssex FROM Students WHERE Sdept NOT IN (‘计算机’,’经管’)
WHERE Students.Sno =SC.Sno
笛卡尔积:
SELECT Students.*, SC.*
33
例:查询每个学生及其选课情况
SELECT Students.*, o, SC.Grade FROM Students, SC
WHERE Students.Sno =SC.Sno
AND o=o AND Sdept=‘计算机’
38
5.2.3 使用聚集函数 AVG ([ALL|DISTINCT] 列名 )
COUNT ([ALL|DISTINCT] 列名)
COUNT (*) MAX ( 列名 ) MIN( 列名 ) SUM ([ALL|DISTINCT] 列名)
MovieExecs(name,address,cert#,netWorth)
Studios(name,address,presC#)
3
5.2.1 单表查询 *选择若干列--------SQL 投影 例: 查找学生的学号和姓名 SELECT Sno, Sname
FROM Students
例:查找学生的姓名、学号和所在系 SELECT Sname, Sno, Sdept
ORDER BY Grade DESC
28
例:查找学生信息以所在系的升序,年龄降序排列 SELECT * FROM Students Sdept 升序
ORDER BY Sdept, Sage DESC
29
5.2.2 多表查询 *多表查询的方法之一:
连接查询-----FROM子句列出多个关系
连接条件的一般格式: 关系名1.属性名1 比较运算符 关系名2.属性名2 比较运算符 =,>,<,>=,<=,<> 连接操作选择满足条件的行
FROM Students
4
例: 查找学生的相关信息
SELECT * FROM Students
例:查找学生的姓名和出生年份 SELECT Sname, 2010- Sage
FROM Students
5
去掉重复元组
例: 查找选课学生的学号
SELECT Sno FROM SC 等价于 SELECT ALL Sno FROM SC
不用IN?
13
字符匹配
[NOT] LIKE 匹配串 [ ESCAPE 换码字符] 通配符: % 任意长度为 n 的字符串 n>=0
_(下划线)
[]
任意字符
指定范围内的任意单个字符
[ ^] 不在指定范围内的任意单个字符
14
例: LIKE ‘%been%’ LIKE ‘Ma%’ LIKE ‘[CK]%’ 第1个是C或K
学号与姓名 SELECT Students.Sno, Sname FROM Students, SC WHERE Students.Sno = SC.Sno
AND Cno=‘2’ AND Grade>90
36
例 : 查询每个学生选修的课程名及其成绩,