数据库 下载本文

四、给定一个查询需求,构造其关系代数表达式的步骤如下: 1、明确该查询涉及哪些属性。 2、明确该查询涉及哪些关系。

3、根据数据库模式导航图,通过多对一联系(或一对多联系)把所有涉及的关系连接起来,每一个多对一联系(或一对多联系)都可以表示为外码属性的自然连接。

4、由于多对多关系都要借助于“联系”关系转化为多对一联系(或一对多联系),因此将所有关系连接起来的过程中可能会涉及更多的关系。

第三章 SQL语言

一、SQL发展:

1、第一个SQL标准是SQL-86,由美国国家标准局公布,1987念国际标准化组织通过,该标准也称为SQL-1.

2、SQL语言由4部分组成: A、数据定义语言DDL B、数据操纵语言DML C、数据控制语言DCL D、其他

二、SQL语言的特点:

1、综合统一 2、高度非过程化

3、面向集合的操作方式

4、同一种语法结构提供两种使用方式 5、语言简洁,易学易用: A、数据查询:SELECT

B、数据定义:CREATE、DROP、ALTER 3、数据操纵:INSERT、UPDATE、DELETE 4、数据控制:GRANT、REVOKE

三、SQL查询语句

1、基本结构包括3个子句:SELECT、FROM、WHERE 2、SELECT子句对应于关系代数中的投影运算 3、FROM子句对应于关系代数中的笛卡尔积 4、WHERE子句对应于关系代数中的选择运算

四、语句实例

1、查询所有班级的班级编号、班级名称和所属学院 SELECT calssNO, className, institute FROM Class

2、消除重复元组

A、查询所有学院的名称(不消除) SELECT institute FROM Class

B、查询所有学员的名称(消除) SELECT DISTINCT institute FROM Class

3、查询所有列:

A、将所有的列在SELECT子句中列出:

SELECT classNo, className, classNum, grade, institute FROM Class

B、用*符号,*表示所有属性 SELECT * FROM Class

4、给属性列取别名:

A、查询所有班级的所属学员、班级编号和班级名称,要求用中文显示列名 SELECT institute所属学院, classNo班级编号, className班级名称 FROM Class

B、用AS关键字来取别名

SELECT institute AS 所属学院, classNo AS 班级编号, className AS 班级名称 FROM Class

5、查询经过计算的列:即将计算的结果显示出来

例:查询每门课程的课程号、课程名以及周课时(周课时为课时数除以16),并将课程名中大写字母改为小写字母输出:

SELECT courseNo 课程号, lower (courseName) 课程名, courseHour/16 AS周课时 FROM Course

其中:函数lower()表示将大写字母改成小写字母。

6、比较运算:

例:A、查询2007级的班级编号、班级名称和所属学院: SELECT classNo, className, institute FROM Class

WHERE grade=2007

B、在学生Student表中查询年龄大于或等于19岁的同学学号、姓名和出生日期:

SELECT studentNo, studentName, birthday FROM Student

WHERE year(getdate())-year(birthday)>=19

其中:getdate() 可获取当前系统的日期,函数year()用于提取日期中的年份。

7、范围查询:BETWEEN??AND可用于查询属性值在某一个范围内的元组,NOT BETWEEN??AND 可用于查询属性值不在某一个范围内的元组。BETWEEN后是属性的下限值,AND 后是属性的上限值。 例:在选课Score 表中查询成绩在80~90分之间的同学学号、课程号和相应成绩。 SELECT StudentNo, courseNo, score FROM Score

WHERE score BETWEEN 80 AND 90

8、集合查询:IN 可用于查询属性值在某个集合内的元组,NOT IN 可用于查询属性值不在某个集合内的元组。IN 后面是集合,可以是具体的集合,也可以是查询出来的元组集合。

例:

A、在选课Score 表中查询选修了001、005、或003课程的同学学号、课程号和相应成绩。

SELECT StudentNo, courseNo, Score FROM Score

WHERE CourseNo IN (‘001’ , ’005’ , ‘003’)

B、在学生Student表中查询籍贯既不是“南昌”也不是“上海”的同学姓名、籍贯和所属班级编号。

SELECT StudentName, native, ClassNo FROM Student

WHERE native NOT IN (‘南昌’ , ‘上海’)

9、空值查询:空值表示为未知或不确定的值,空值表示为null。IS null 可以用于查询属性值为空值;IS NOT null 可用于查询属性值不为空值。这里的IS 不能用“=”替代。 例:A、在课程Course表中查询选修课程为空值的课程信息。 SELECT * FROM Course

WHERE priorCourse IS nul

B、在课程Course表中查询选修课程不为空值的课程信息。

SELECT * FROM Course

WHERE priorCourse IS NOT null

10、字符串匹配查询:

例:A、在班级Class表中查询班级名称中含有会计的班级信息。 SELECT * FROM Class

WHERE className LIKE ‘%会计%’

注意:匹配字符串必须用一对引号括起来。

B、在学生Student表中查询所有姓王且全名为三个汉字的同学学号和姓名。 SELECT* FROM Class

WHERE StudentName LIKE ‘王_ _’

C、在学生Student表中查询名字中不含有“福”的同学学号和姓名。 SELECT* FROM Class

WHERE StudentName NOT LIKE ‘%福%’

D、在学生Student表中查询蒙古族的同学学号和姓名。 SELECT*

FROM Student

WHERE nation LIKE ‘蒙古族’ 等价于: SELECT*

FROM Student

WHERE nation = ‘蒙古族’

E、在班级Class表中查询班级名称中含有“08_”符号的班级名称。 SELECT className FROM Class

WHERE ClassName LIKE ‘ \\_% ’ ESCAPE ’ \\’

ESCAPE’ \\ ’表示\\为换码字符,这样紧跟在\\符号后的_不是通配符,而是普通用户要查询的符号。如果将#字符作为换码字符,则该查询可改写为: SELECT className FROM Class

WHERE ClassName LIKE ‘ #_% ’ ESCAPE ’ # ’

11、逻辑查询: