第三章 关系数据库标准语言SQL语言

合集下载

关系数据库标准语言SQL讲义模版(PPT105张)

关系数据库标准语言SQL讲义模版(PPT105张)

3.2.1 操作数据库
【例3-1】创建“salesystem”数据库,参数取系统默认值
Create Database salesystem
必须有 空格
必须有 空格
3.2.1 操作数据库
补充 内容
主数据 文件
日志 文件
Create Database salesystem On Primary (Name =' salesystem ', Filename ='C:\Program Files\Microsoft SQL Server\MSSQL\Data\ salesystem.Mdf', Size=10mb, Maxsize=30mb, Filegrowth=1mb ) Log On (Name = ' salesystem _Log' , Filename ='C:\Program Files\Microsoft SQL Server\MSSQL\Data\ salesystem _Log.Ldf', Size=2mb, Maxsize=6mb, Filegrowth=10%)
于Unique所约束的唯一键,允许有一个数据项为 空值。 ③不允许为一列既定义 Unique 约束,又定义 Primary Key约束。
3.2.2 操作表
【例3-6】在salesystem数据库中建立一个orders (订单) 表,注意外键约束的设置。
Create Table orders
( oid
picture varchar(100)
使用空格
)
分开
若为表中的一列同时设定两种约束,格式为:
pname varchar(30) not null unique,

第3章:关系数据库标准语言SQL

第3章:关系数据库标准语言SQL

例6:建立一个“课程”表Course. :建立一个“课程” Create table Course (Cno Cpno Char(4) Primary Key, , Char (4) , Cname Char (40) , Ccredit Smallint, , Foreign Key (Cpno) References Course(Cno) );
不论基本表中原来是否已有数据, 不论基本表中原来是否已有数据 , 新增加 的列一律为空值。 的列一律为空值。
例9:将年龄的数据类型改为整型。
ALTER TABLE Student Alter Column Sage Int; ;
修改原有的列定义有可能会破坏已有数据。 修改原有的列定义有可能会破坏已有数据。
group by:此短语将查询结果按某一列或某几 :
列的值进行分组。Having子句用于与group 列的值进行分组。Having子句用于与group by 子句用于与 子句配合使用,用于说明分组条件。 子句配合使用,用于说明分组条件。
查询分类
单表查询 连接查询 嵌套查询 集合查询
CREATE TABLE Student (Sno Ssex Sage Sdept
CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20) UNIQUE, ,
CHAR(1) , INT, , CHAR(15)); ;
修改
Alter table <表名 表名> 表名
Add <新列名> <新列类型> (列宽度)[完整性约束] Drop Column <列名>|<完整性约束名> Alter Column <列名> <列类型> (列宽度) P87例8,例9,例10 , ,

关系数据库标准语言SQL 全 255页

关系数据库标准语言SQL 全 255页
子句。
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定 义子句>|<视图定义子句>|<授权定义子句>]
定义模式(续)
[例3.3]为用户ZHANG创建了一个模式TEST,并且在其中定义 一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
操作方式
创建
删除
CREATE SCHEMA
DROP SCHEMA
CREATE TABLE
DROP TABLE
CREATE VIEW
DROP VIEW
CREATE INDEX
DROP INDEX
修改 ALTER TABLE ALTER INDEX
模式
数据库(有的系统称为目录)
模式
表以及视图、索引等
• 现代关系数据库管理系统提供了一个层次化的数据库对象命名机制
5.语言简洁,易学易用
• SQL功能极强,完成核心功能只用了9个动词。
表 3.2 SQL 的动词
SQL 功 能
动词
数据查询
SELECT
数据定义
CREATE,DROP,ALTER
数据操纵
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE
3.1 SQL概述
3.1.1 SQL 的产生与发展 3.1.2 SQL的特点 3.1.3 SQL的基本概念
第三章 关系数据库标准语言SQL
3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结

第3章 关系数据库标准语言SQL

第3章 关系数据库标准语言SQL
第3章 关系数据库标准语言SQL
3.1 SQL概述
关系数据库语言(Structured Query Language, SQL)是一种标准数据库语言,从对数据库的随机查 询到数据库的管理和程序的设计,几乎无所不能,而 且书写非常简单,使用方便。
3.1.2 SQL的组成
1. 数据定义(主要用于定义数据库的逻辑结构,包括定义基 本表、索引和视图三个部分)
例 对学生表Student,按姓名sname升序建立索引,索引名 为stusname。 CREATE INDEX stusname ON Student (sname); 例 对选修表SC,按学号sno升序和课程号cno降序建立唯一 性索引。索引名为scno。 CREATE UNIQUE INDEX scno ON SC(sno ASC, cno DESC); 例如,要在Student表的Sname列上建立一个聚簇索引,并 按升序排列的命令为: CREATE Cluster INDEX Student ON Student(Sname); 例 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO ASC)
說明:<表名>是所要建立的基本表的名字。在同一个数据库 中可以建立多个基本表,但表不能同名。一个基本表中至少 由一个或多个属性列组成。对于同一表中的各列要有不同的 <列名>,并要指明<数据类型>等。 在建表时还可以定义有关的完整性约束。完整性约束有两个 层次,即针对表中某一列的【列级完整性约束】和针对表的 【表级完整性约束】(方括号表示任选项)。用户可以根据 实际需要对于每列指明列级完整性约束,如用来指明该列的 值是否允许为空值(NULL)、值是否唯一(UNIQUE)等; 也可以对表指明表级完整性约束,如用来指明该表的主码 (PRIMARYKEY)、外码(FOREGIN KEY)和被参照关系 (REFERENCES)等。这些完整性约束将存入系统的数据 字典中。当用户对表进行数据更新时,由DBMS自动检查用 户操作是否违背所定义的完整性约束。

关系数据库标准语言SQL最新课件

关系数据库标准语言SQL最新课件
② 查找所有在CS系学习的学生。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept= ' CS ';
结果为:
Sno 201215121 201215122
Sname 李勇 刘晨
Sdept CS CS
2024/3/2
关系数据库标准语言SQL最新课件
30
常用于=连接 首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找满足
连接条件的元组,找到后就将表1中的第一个元组与该 元组拼接起来,形成结果表中一个元组。当遇到表2中 第一条大于表1连接字段值的元组时,对表2的查询不再 继续
2024/3/2
关系数据库标准语言SQL最新课件
接条件的元组一并输出 左外连接
列出左边关系中所有的元组
右外连接
列出右边关系中所有的元组
2024/3/2
关系数据库标准语言SQL最新课件
18
外连接(续)
[例 3. 53] 改写[例 3.49]
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUT JOIN SC ON
2024/3/2
关系数据库标准语言SQL最新课件
13
2. 自身连接
❖ 自身连接:一个表与其自己进行连接 ❖ 需要给表起别名以示区别 ❖ 由于所有属性名都是同名属性,因此必须使用别
名前缀
[例 3.52]查询每一门课的间接先修课(即先修课的先修课)
SELECT o, SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno = o;

关系数据库标准语言SQL

关系数据库标准语言SQL

3. 带子查询旳删除语句
[例11] 删除计算机科学系全部学生旳选课 统计。
DELETE FROM SC WHERE 'CS'=
子查询:在Student表 中找出选修了课程 旳学生所在旳系名
( SELETE Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
4. 更新操作与数据一致性
F_Student1视图旳映象关系被破坏,造成该视 图不能正常工作。
常见旳视图形式
行列子集视图 WITH CHECK OPTION旳视图 基于多种基表旳视图 基于视图旳视图 带体现式旳视图 分组视图
2. 删除视图
DROP VIEW <视图名>;
该语句从数据字典中删除指定旳视图 定义
由该视图导出旳其他视图定义仍在数 据字典中,但已不能使用,必须显式 删除
删除视图(续)
[例9] 删除视图IS_S1
DROP VIEW IS_S1;
DROP VIEW IS_S2;
3.5 视 图
3.5.1 定义视图 3.5.2 查询视图 3.5.3 更新视图 3.5.4 视图旳作用
3.5.2 查询视图
new
对顾客来说,查询视图与查询基本表相同
DBMS实现视图查询旳措施:视图消解法 进行有效性检验,检验查询旳表、视图等是否存
查询视图(续)
[例2] 查询信息系选修了1号课程旳学生学号 和姓名 SELECT Sno,Sname FROM IS_S1
SELECT Sno,Sname FROM IS_Student,SC WHERE IS_Student.Sno = SC.Sno AND
o= '1';

第三章关系数据库标准语言SQL精品PPT课件

第三章关系数据库标准语言SQL精品PPT课件
数据库系统概论
第三章关系数据库标准语言SQL
3.1SQL概述
3.1.1SQL的产生与发展
3.1.2SQL的特点
SQL集数据查询、数据操纵、数据定义和数据 控制功能于一体。
主要特点包括:
1. 综合统一:SQL语言风格统一,可以独立完 成数据库生命周期中的全部活动,包括定义 关系模式、建立数据库、插入数据、查询、 更新、维护、数据库重构、数据库安全性控 制等一系列操作要求,这就为数据库应用系 统的开发提供了良好的环境。
语句格式约定符号:“<>”中为实际语义; “[]”中的内容为任性项;“{}”或“|”中的内 容为必选项,即必选其一;“[,…n]”表示前面 的项可重复多次;
一般语法规定:SQL中的数据项分隔符 “,”,其字符串常数的定界符用单引号 “ ’ ”表示;
SQL特殊语法规定:SQL的关键字一般使用大 写字母;SQL语句的结束符为“;”;SQL一 般应采用格式化书写方式。
2. 高度非过程化:SQL语言进行数据操作,只 要提出“做什么”,而无须指明“怎么做”, 因此无需了解存取路径,存取路径的选择以 及SQL语句的操作过程由系统自动完成。
3. 面向集合的操作方式:SQL语言采用集合操 作方式,不仅操作对象、查找结果可以是元 组的集合,而且一次插入、删除、更新操作 的对象也可以是元组的集合。
3.2学生-课程数据库
学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 选修表:SC(Sno,Cno,Grade)
3.3数据定义
SQL的数据定义包括定义基本表、定义索 引、定义视图和定义数据库,如下表
1. 建立索引

第3章 关系数据库标准语言SQL

第3章 关系数据库标准语言SQL

6.字符串类型
字符数据类型是使用最多的数据类型之一,它可以用来存储各 种字母、数字符号、特殊符号。
(1)CHAR
(2)NCHAR (3)VARCHAR (4)NVARCHAR
(5) TEXT (6) NTEXT
7.二进制数据类型
(1)BINARY (2)VARBINARY。 (3)IMAGE
3.2.2
组成。
CREATE TABLE D
(Dno CHAR(10),Dept CHAR(15));
【例3-2】建立一个课程表C,由课程号(Cno)、课程名(Cn)、课时
数(Ct)、开课学期(Term)、课程性质(Cx)和课程先行课(Cpno) 组成,其中课程号不能为空。
CREATE TABLE C (Cno CHAR(8) CONSTRAINT cno_cons NOT NULL, Cn CHAR(20), Ct INT DEFAULT 64, Term CHAR(20) NULL,
[CONSTRAINT <约束名>] CHECK (<条件>)

(5)FOREIGN KEY约束(外键约束)
主表
从表
主键
引用
外部键
[CONSTRAINT<约束名>] FOREIGN KEY REFERENCES <主表名> (<列名>[{,<列名>}])
【例3-1】 创建部门表D,由部门号(Dno)和部门(Dept)两个属性
1.定义基本表
CREATE TABLE <表名> (<列名> <数据类型> [列级完整性约束条件] [,<表级完整性约束条件>]);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章关系数据库标准语言SQL语言一、选择题1. 在SQL语言中授权的操作是通过________________语句实现的。

C A.CREATEB.REVOKEC.GRANTD.INSERT2. 假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。

要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系____。

DA.S B.SC,C C.S,SC D.S,C,SC3. 在 MS SQL Server中建立了表 Student(no,name,sex,birthday),no为表的主码,其他属性的默认值为 null。

表中信息如图所示:能够正确执行的插入操作是________。

A No Name Sex Birthday 101 张丽丽女 1967/05/07 102 李芳女 1970/04/14103 王朋男 1982/10/27 A.INSERT INTO student (no,sex) VALUES(102,′男′) B.INSERT INTO student (name,sex) VALUES(′王中′,′男′)D.INSERT INTO student VALUES(106,′王中′,′男′,′1984/03/08′) C.INSERT INTO stude nt VALUES(102,′男′,′王中′,′1984/03/08′) 4. SQL语言中,删除一个表的命令是________。

B A. DELETE B. DROP C. CLEAR D. REMORE 5. 为数据表创建索引的目的是________ AA.提高查询的检索性能B.创建唯一索引C.创建主键D.归类6. 在SQL语言中,条件“RETWEEN 20 AND 30”表示年龄在20到30之间,且________A. 包括20岁和30岁B. 不包括20岁和30岁C. 包括20岁不包括30岁D. 不包括20岁包括30岁7. 为了使索引键的值在基本表中唯一,在建立索引语句中应使用保留字________ AA. UNIQUEB. COUNTC. DISDINCTD. UNION 8. 下面关于SQL语言的说法中,哪一种说法是错误的? ________ AA. 一个SQL数据库就是一个基本表B. SQL语言支持数据库的三级模式结构C. 一个基本表可以跨多个存储文件存放,一个存储文件可以存放一个或多个基本表D. SQL的一个表可以是一个基本表,也可以是一个视图二、简答题1. 什么是基本表?什么是视图?两者的区别和联系是什么?【解答】基本表是本身独立存在的表,在SQL中一个关系就对应一个表。

视图是从一个或1 几个基本表导出的表。

视图本身不独立存储在数据库中,是一个虚表。

即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。

2. 试述视图的优点。

⑴视图能够简化用户的操作。

⑵视图使用户能从多种角度看待同一数据。

⑶视图对重构数据库提供了一定程度的逻辑独立性。

⑷视图能够对机密数据提供安全性。

3. 所有的视图是否都可以更新?为什么?不是。

视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。

因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以并不是所有的视图都是可更新的。

如对视图S_G(学生的学号及其平均成绩)而言,要修改平均成绩,必须修改各科成绩,但无法知道哪些课程成绩的变化导致了平均成绩的变化。

CREATE VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;三、应用题1. 设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式:1)πA(R) (2)σB='17'(R)(3)R×S (4))πA,F(σC=D(R×S))(1)SELECT A FROM R(2)SELECT * FROM R WHERE B='17' (3)SELECT A,B,C,D,E,F FROM R,S(4)SELECT A,F FROM R,S WHERE R.C=S.D2. 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:(1)R∪S (2)R∩S (3)R-S (4)πA,B(R)πB,C(S)(1)SELECT A,B,C FROM R UNIONSELECT A,B,C FROM S (2)SELECT A,B,C FROM R INTERSECTSELECT A,B,C FROM S (3)SELECT A,B,C FROM R WHERE NOT EXISTS (SELECT A,B,C FROM SWHERE R.A=S.A AND R.B=S.B AND R.C=S.C) (4)SELECT R.A,R.B,S.C FROM R,S WHERE R.B=S.B2 3. 根据下面所给的商品库表,写出SQL语句商品表1(商品代号char(8),分类号char(8),单价float数量int) 商品表2(商品代号char(8),产地char(8),品牌char(8) ) (1)从商品库中查询出数量在10和20之间的商品种数 (2)从商品库中查询出每类(即分类名相同)商品的总数量 (3)从商品库中查询出比所有商品单价的平均值要低的全部商品 (4)从商品库中查询出所有商品的不同产地的总数 (1)select * from 商品表1 where 数量 between 10 and 20(2)select 分类名,sum(数量) as 总数量 from 商品表1 group by 分类名(3)select * from 商品表1where 单价< (select avg(单价) from 商品表1 ) (4)select count(distinct产地) as产地数from商品表2 4. 教学数据库的三个基本表如下:学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询。

(1) 检索LIU老师所授课程的课程号和课程名。

(2) 检索年龄大于23岁的男学生的学号和姓名。

(3) 检索至少选修LIU老师所授课程中一门课程的女学生姓名。

(4) 检索WANG同学不学的课程的课程号。

(5) 检索至少选修两门课程的学生学号。

(6) 检索全部学生都选修的课程的课程号与课程名。

(7) 检索选修课程包含LIU老师所授课的学生学号。

【解答】(1)SELECT C#,CNAME FROM C WHER E TEACHER=‘LIU’ (2)SELECT S#,SNAME FROM S WHERE (AGE>23) AND (SEX=‘M’) (3)SELECT SNAME FROM S WHERE SEX=‘F’ AND S# IN (SELECT S# FROM SC WHERE C# IN(SELECT C# FROM C WHERE TEACHER=‘LIU’)(4)SELECT C# FROM C WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN(SELECT S# FROM S WHERE SNAME='WANG'))(5)SELECT DISTINCT X.SNO FROM SC X,SC Y WHERE X.SNO=Y.SNO ANDO<>O(6)SELECT C#,CNAME FROM C WHERE NOT EXISTS3(SELECT * FROM S WHERE S# NOT IN(SELECT * FROM SC WHERE SC.C#=C.C#)) (7) SELECT DISTINCT S# FROM SC WHERE C# IN(SELECT C# FROM C WHERE TEACHER='LIU')) 5. 有三个关系如下:教师:(教师编号整数型 ,教师姓名字符型(4) ,职称字符型(10)) ,教师编号是主码。

课程:(课程编号整数型 ,课程名称字符型(20) ),课程编号是主码。

授课:(教师编号整数型,课程编号整数型 ,讲课效果浮点数型),教师编号和课程编号整体是主码,教师编号是参照教师关系的外码,课程编号是参照课程关系的外码。

是完成下列问题:(1) 编写 SQL 语句,创建教师表。

(2) 编写 SQL 语句,创建讲师视图(职称为“讲师”的所有教师)。

(3) 用汉语阐述 SQL 语句的查询结果:SELECT 教师姓名,职称 FROM 教师 WHERE 教师编号IN(SELECT 教师编号 FROM 授课 WHERE 讲课效果>=8.5 ); (4) 编写 SQL 语句,统计所有教师的人数。

(5) 编写 SQL 语句,将课程名称由“多媒体”更改为“多媒体技术” 。

(6) 编写SQL 语句,删除课程名称为“多媒体”的课程信息。

【解答】(1) CREATE TABLE 教师(教师编号 int NOT NULL,教师姓名 char(4),职称char(10),PRIMARY KEY(教师编号)) ;(2) CREATE VIEW 讲师 AS SELECT * FROM 教师 WHERE 职称=’讲师’ ; (3) 查询讲课效果不低于 8.5 分的教师姓名和职称信息。

(4) SELECT COUNT(*) FROM 教师;(5) UPDATE 课程 SET 课程名称=’多媒体技术’ WHERE 课程名称=’多媒体’;(6) DELETE FROM 课程 WHERE 课程名称=’多媒体’; 6. 教学数据库的三个基本表如下:学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询。

(1)统计有学生选修的课程门数。

(2)求选修C4课程的学生的平均年龄。

(3)求LIU老师所授课程的每门课程的学生平均成绩。

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

相关文档
最新文档