关系数据库标准语言SQL概述
vf第四章关系数据库标准语言SQL
4.2.8 利用空值查询
SQL支持空值,当然也可以利用空值进 行查询。 假设在订购单关系中,一名职工正在准 备订购单,但尚未选定供应商,这样若把信 息存入数据库,则供应商号和订购日期两个 属性均为空值,在前面给出的订购单记录中 有3个这样的记录。
例4.23 找出尚未确定供应商的订购单。 SELE * FROM 订购单 WHER 供应商号IS NULL 结果是: E6 NUIL OR77 NULI E1 NULL OR80 NUIJL E3 NUIJL OR90 NUI„L 注意:查询空值时要使用IS NULL,而= NULL是无效的,因为空值不是一个确定的 值,所以不能用“=”这样的运算符进行比较。
例4.20 求在WH2仓库工作的职工的最高工资值。
SELECT MAX(工资) FROM 职工 WHERE 仓库号=”WH2”
4.2.7 分组与计算查询
利用GROUP BY子句进行分组计算查询。 GROUP BY短语的格式如下: Group by 字段名 having 条件 可以按一列或多列分组,还可以用HAVING 进一步限定分组的条件。 例4.21 求每个仓库的职工的平均工资。 SELECT 仓库号,AVG(工资) FROM 职工 GROUP BY 仓库号
可以看到,在这个命令中含有两个 SELECT—FROM—WHERE查询块,即内 层查询块和外层查询块,内层查询块检索 到的仓库号值是WHl和WH2,这样就可以 写出等价的命令: SELE 城市 FROM 仓库 WHERE 仓库号; IN(”WHl”,”WH2”) 这里IN相当于集合运算符∈。
例4.9查询所有职工的工资都多于1210元的仓 库的信息。 这个检索要求也可以描述为:没有一个职工的工 资少于或等于1210元的仓库的信息。 不在以下范围 这样可以有SQL命令: SELE * FROM 仓库 WHER 仓库号 NOT IN; (SELECT 仓库号 FROM 职工 WHERE ; 工资<=1210) 内层SELECT—FROM—WHERE查询块指出所 有职工的工资少于或等于1210元的仓库的仓库号值 的集合,然后从仓库关系中检索元组的仓库号属性 值不在该集合中的每个元组。
第5章 SQL语言
例 5.7 找出工作在面积大于 1400 的仓库的职工号 以及这些职工所在的城市
SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (面积>1400) AND(职工.仓库号=仓库.仓库号)
若使用SELECT SUM(DISTINCT工资) FROM 职工
举例
例5.15 求北京和上海的仓库职工的工资总和
SELECT SUM(工资) FROM 职工 WHERE 仓库号 IN ; (SELECT 仓库号 FFROM 仓库 WHERE 城市=”北京” OR; 城市=”上海”)
例5.16 求所有职工的 工资都多于2210元的仓库的平均 面积
[UNION …] [ORDER BY …]
• SELECT说明要查询的数据 • FROM说明要查询的数据来自哪个或哪些表, 可以对单个表或多个表进行查询; • WHERE说明查询条件,即选择元组的条件; • GROUP BY短语用于对查询结果进行分组, 可以利用它进行分组汇总; • HAVING短语必须跟随GROUP BY 短语使 用,它用来限定分组必须满足的条件; • ORDER BY 用来对查询的结果进行排序。
“武汉”的“SH4”仓库还没有职工,但该仓库的信息 也被检索出来了。
举例
• 排除那些还没有职工的仓库,检索要求描述 为: 查询所有的职工工资都多于 2210元的 仓库的信息,并且该仓库至少要有一名职工.
SELECT * FROM 仓库 WHERE 仓库号 NOT IN ; (SELECT 仓库号 FROM 职工 WHERE 工资<=2210) ; AND仓库号IN (SELECT 仓库号 FROM 职工)
VF 关系数据库标准语言S Q L
关系数据库标准语言S Q L1、SQL是结构化的查询语言,是一种高度非过程化的语言。
查询是其核心。
注意:数据定义一般是对数据表操作,数据操纵一般是对表中的记录进行操作2、查询功能格式:SELE字段名……&&说明要查询的数据FROM数据表名(有联系的多个数据表名,有公共域)&&数据来源哪些表ON 联接的字段名WHERE连接条件……AND 条件……&&说明查询条件GROUP BY 分组(字段名)HAVING 分组条件&&查询结果分组ORDER BY 排序字段&&查询结果排序成绩管理数据库有以下三个数据库表:学生(学号C,姓名C,性别C,年龄N,系C……)选课(学号C,课程号C,成绩N……)课程(课程号C,课程名C……)1基于单个数据表,SELE…FROM …WHERE…(类似VF命令LIST FOR 条件)SELE 后面接要查询输出的字段名,多个用逗号分隔,全部可以用* FROM 后面是查询的数据表(单个数据表)WHERE 后面跟查询条件教材P130SELE 工资FROM 职工(从职工表中查询所有职工的“工资”字段值)SELE * FROM 职工(从职工表中查询所有职工的元组,*表示所有属性)SELE * FROM 职工WHERE 工资>1230(从职工表中查询工资大于1230的元组)注意:1、WHERE 后面的条件可以是任意复杂的条件表达式2、DISTINCT 短语消除结果中重复值(注意)列:查询成绩大于等于60分的学生的学号、课程号、成绩(学号,课程号,成绩都在选课表中)SELE 学号,课程号,成绩FROM 选课WHERE 成绩>=60相当于VF命令:LIST FIELDS 学号,课程号,成绩FOR 成绩>=60查询有考试成绩的学生的学号SELE DIST 学号FROM 选课(DIST 去掉重复)列:在学生表中查询2系年龄小于25的女同学的学号,姓名在学生表中查询2系或6系年龄小于25的男同学的学号,姓名分析条件:性别='女' AND 年龄<25 AND (系='6' OR 系='2')等于条件:性别='男' AND 年龄<25 AND 系='6' OR性别='男' AND 年龄<25 AND 系='2'-----------------------------------------------------------------------2)基于多个数据表(两个或三个),这些数据表肯定有联系(有公用字段),而且查询输出的字段可能在几个(两个或以上有联系)数据表中。
关系数据库标准语言SQ
WHERE (职工.仓库号=仓库.仓库号) AND (工资>1230)
例4.7 找出工作在面积大于400的仓库的职工 号以及这些职工工作所在的城市. 分析 条件:面积>400 联接条件:(职工.仓库号=仓库.仓库号) 查询涉及表:仓库,职工 查询结果字段:职工号,城市 语句:SELE 职工号,城市 FROM 仓库,职工 WHERE;
(面积>400) AND (职工.仓库号=仓库.仓库号)
3、嵌套查询
外查询的条件来自内查询的结果
在SQL语句中,一个SELECT-FROM-WHERE语句称 为一个查询块。将一个查询块嵌套在另一个查询块的 WHERE子句或HAVING短语的条件中的返回多个值 NOT IN :属于关系 联接条件:公共字段名 IN SELE 公共字段名 (相当于联接中条件:表1.公共字段名=表2.公共字 段名)
6、简单的计算查询
SQL不仅具有一般的检索能力,而且还有计 算方式的检索 用于计算检索的函数: COUNT()--- ------计数 SUM()--------------求和 AVG()---------求平均值 MAX()---------求最大值 MIN()----------求最小值
查询产生新字段
例4.10 找出和职工E4工资相同的所有职工. SELE 职工号 FROM 职工 WHERE 工资 =(SELE 工资 FROM 职工 WHERE 职工号 =“E4”) 注意:= 与 IN 之间的关系,等号可以用IN 来 替换,而IN不能用=替换 =:返回的值是一个具体的值 IN:返回的是多个值
4、几个特殊运算符
第四章 关系数据库标准语言SQL
罗盛
一、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 , ,
第3章 关系数据库标准语言SQL_第4版(1-3)
学分 Ccredit 4 2 4 3 4 2 4
SC表
学号 Sno
200215121 200215121 200215121 200215122 200215122
课程号 Cno
1 2 3 2 3
成绩 Grade
92 85 88 90 80
§3.3 数据定义
SQL的数据定义功能: 模式定义、表定义、视图 和索引的定义
被参照建立一个“学生选课”表SC CREATE TABLE SC Cno CHAR(4), Grade SMALLINT, 列级完整性约束条件, Sno是外码,被参照表是 Student
(Sno CHAR(9) REFERENCES Student(Sno) , 主码由两个属性构 成,必须作为表级 完整性进行定义
用户数据库投入运行后,可根据需要随时逐步修 改模式,不影响数据的运行。 数据操作符统一
2.高度非过程化
非关系数据模型的数据操纵语言“面向过程”,
必须制定存取路径
SQL只要提出“做什么”,无须了解存取路径。 存取路径的选择以及SQL的操作过程由系统自动 完成。
3.面向集合的操作方式
SQL
数据流(Data) 元数据流(Meta Data) 对应于视图和部 分基本表
视图1
视图2
外模式
对应于基本表
基本表1 基本表2 基本表3 基本表4
数据词典
(元数据)
模式
对应于存储 文件
存储文件1 存储文件2 内模式
SQL的基本概念(续)
基本表(BASE TABLE):
是独立存在的表, 一个关系对应一个基本表,
嵌入式语言:嵌入高级语言如C,COBOL, FORTRAN,PB等
《关系数据库SQL语言》
[DataName!]TableName [[AS] Local_Alias] [ON JoinCondition]…] [WHERE JoinCondition [AND JoinCondition…] [AND|OR FilterCondition [AND|OR FilterCondition…]]] [ORDER BY Order_Item [ASC|DESC][,Order_Item [ASC|DESC]…]] [GROUP BY GroupColumn [,GroupColumn…] [HAVING FilterCondition]] [TO SCREEN|FILE FileName [ADDITIVE]|PRINTER [PROMPT]] [INTO TABLE TableName|CURSOR CursorName|ARRAY ArrayName]
(1)简单条件查询
【例5-5】在Zgjk.dbf表中,查询基本工资在1000元以上(含 1000元)职工的姓名和部门(要求不重复显示)。
在命令窗口中键入:
SELECT DISTINCT 姓名,部门,基本工资 FROM Zgjk WHERE 基本工资>=1000
(2)复合条件查询
【例5-6】在Zgjk.dbf表中,查询家电部门已婚的职工的信息。
1000 AND 1200 该命令等价于:
SELECT * FROM Zgjk WHERE 基本工资>=1000 AND ;
基本工资<=1200
3.对查询结果进行排序
在SELECT-SQL命令中,使用ORDER BY子句,可以使查询结果按 指定要求排序。 命令格式:SELECT <列名表> FROM <表名> [WHERE <条件>]; ORDER BY <排序依据> [ASC|DESC] 说明: 排序依据:备注型数据和通用型数据不能作为排序依据。排序依据 可以是字段名、由AS子句命名的列标题(在ORDER BY子句中,不能 直接使用表达式和函数)和列序号(即该列在查询结果中的位置1,2, 3…)。 排序方式:ASC表示查询结果按照排序依据项的值升序排列, DESC表示查询结果按照排序依据项的值降序排列。默认排序方式为 ASC。 排序规则:数值按大小顺序,字母按“ a ” < “ A ” < “ b ” < “ B ” … 的顺序,汉字按内码值顺序,日期按前后顺序,逻辑型数据“假”在 前“真”在后。
关系数据库查询语言SQL
关系数据库查询语⾔SQL授课⽅式:以下所有的例⼦都在sql server 中进⾏现场调试其执⾏结果,或者让学⽣上讲台练习,让学⽣体会其具体的含义第四章关系数据库查询语⾔SQL(8学时)第1节关系数据库标准语⾔SQL ——查询部分⼀、SQL概述1.SQL标准SQL(Structured Query Language):结构化数据库查询语⾔。
SQL作为⼀个ANSI标准,现在最新的标准是SQL99!是介于关系代数和关系演算之间的结构化查询语⾔,功能包括数据查询(Data Query )、数据操纵(Data Manipulation)、数据定义(Data Definition)、数据控制(Data Control)2.SQL的特点1)综合统⼀SQL语⾔集数据定义语⾔DDL、数据操纵语⾔DML、数据控制语⾔DCL功能于⼀体,语⾔风格统⼀。
可独⽴完成数据库⽣命周期中的全部活动,包括:定义关系模式、建⽴数据库、插⼊数据、查询、更新、维护、数据库重构、数据库安全性控制等⼀系列操作要求,为数据库应⽤系统开发提供了良好的环境。
由于关系模型中实体间连续军⽤关系表⽰,这种数据结构单⼀性带来了数据操作的统⼀,查找、插⼊、删除、修改等每⼀种操作只需要⼀种操作符,从⽽克服了⾮关系系统由于信息表⽰⽅式多样性带来的操作复杂性。
2)⾼度⾮过程化SQL语⾔只要提出“做什么”,⽆须指明“怎么做”!!⽤户⽆须了解存取路径,存取路径的选择及SQL语句的操作过程由系统⾃动完成。
减轻了⽤户的负担,提⾼了数据独⽴性。
3)⾯向集合的操作⽅式Sql 语⾔采⽤集合操作⽅式,不仅操作对象、查询结果可以是元组集合,⽽且⼀次插⼊、删除、更新操作的对象可是元组的集合。
4)以同⼀种语法结构提供两种使⽤⽅式既是⾃含式语⾔,⼜是嵌⼊式语⾔。
⾃含式语⾔:能独⽴的⽤于联机交互的使⽤⽅式,⽤户可以在终端键盘上直接键⼊SQL 命令对数据库进⾏操作。
在SQL SERVER 2000种现场演⽰SQL语句的操作。
db3
第三章关系数据库标准查询语言SQL●3.1 SQL概述●3.2数据定义语言(DDL)●3.3 SQL的数据查询(DML)●3.4 SQL的数据更新(DML)●3.5视图●3.6数据控制语言(DCL)●3.7嵌入式SQL语言●3.8 存储过程*(T-SQL)3.1 SQL概述●SQL(Standard/Structured Query Language)是关系数据库标准●1986年10月,美国国家标准局(American National Standard Institute ANSI)公布第一个标准ANSI X3.135-1986,国际标准化组织(International Organization for Standardization ISO)也通过这一标准称SQL-86●1989年ANSI再次公布标准ANSI X3.135-1989 ,ISO 相应SQL-89●1999年,ISO公布SQL-1999(SQL99,SQL3)●2003年,ISO公布SQL-20033.1.1 SQL语言的组成●数据定义(DDL Data Definition/Description Language )–定义数据库的逻辑结构,包括基本表、视图、索引等●数据操纵(DML Data Manipulation Language)–包括查询和更新,更新又包含插入、删除和修改●数据控制(DCL Data Control Language )–授权、完整性规则描述、事务控制等●嵌入式SQL(ESQL)–在宿主语言中使用SQL的规则3.1.2 SQL语言的特点●综合统一:集DDL、DML、DCL于一体,语言风格统一●面向集合的操作方式:操作对象、查询结果都可以是元组的集合●高度非过程化:存取路进透明。
●以统一的语法结构提供两种使用方式:自含式、嵌入式●语言简洁,易学易用,主要共使用11个关键词–DDL:create drop alter–DML:select insert delete update–DCL:grant revoke commit rollback3.2数据定义语言(DDL)3.2.1定义、删除与修改基本表定义基本表语法CREATE TABLE <表名> (<列名><数据类型>[列级约束条件][,<列名><数据类型>[列级约束条件]... ...][,<表级完整性约束条件>])例:CREATE TABLE S(S#CHAR(5)NOT NULL UNIQUE,SN CHAR(20),SA INT,SD CHAR(3),PRIMARY KEY (S#));修改表语法ALTER TABLE <表名>[ADD <新列名><数据类型>[列级约束条件]] [DROP <完整性约束条件>][MODIFY <列名><数据类型>];例:ALTER TABLE S ADD SCome DATE;ALTER TABLE S MODIFY SA SMALLINT; ALTER TABLE S DROP UNIQUE(S#);删除表语法DROP TABLE <表名>例:DROP TABLE S3.2.2建立和删除索引索引的建立语法CREATE [UNIQUE][CLUSTER] INDEX <索引名>ON <表名>(<列名1>[<次序>][,<列名2><次序>... ...])<次序>可以是ACS和DESC例:CREATE UNIQUE INDEX S_S# ON S(S#)CREATE UNIQUE INDEX C_C# ON C(C#)CREATE UNIQUE INDEX SC_S#_C# ON SC(S#ASC,C# DESC)索引的删除语法DROP INDEX [<表名>.]<索引名>DROP INDEX [S.]S_S#3.3 SQL的数据查询(DML)●关系代数表达式∏A1,A2,.....An(δF(R1×R2×... ...×R n)) ●SQL 语句SELECT A1,A2,......A nFROM R1,R2,... ...R mWHERE F详细语法SELECT [ALL|DISTINCT] {*|<目标表达式1> [,<目标表达式2> ... ...]}FROM <表名或视图名1> [,<表名或视图名2>]... ...[WHERE <条件表达式>][GROUP BY <列名表达式1>[,<列名表达式2>]][HAVING <条件表达式> ][ORDER BY <列名表达式1> [ASC|DESC]], <列名表达式2> [ASC|DESC]]执行过程1)先按WHERE子句条件从FROM子句指定的表/视图中找出满足条件的元组(选择);2)再按SELECT子句中的目标表达式选择出元组中的属性,形成结果表(投影);3)如有GROUP子句,则将结果按<列名表达式>的值分组,该<列名表达式>值相等的元组为一个组,通常会在每组中使用聚合函数。
关系数据库标准查询语言SQL
SELECT Sname, ‘Year of Birth:’, 2008-Sage ,
ISLOWER(Sdept)
FROM Student ; 结果为:
Sname ‘ Yearof Birth:’ 2008-Sage ISLOWER(Sdept)
李勇 Yearof Birth: 1986
第三章关系数据库标准查询语言sql第三章第三章关系数据库标准语言关系数据库标准语言sqlsql结构化查询语言sqlstructuredquerylanguage是一种介于关系代数与关系演算之间的语言它具有查询操纵定义和控制功能是一种通用的功能极强的标准的关系数据库语言
第三章 关系数据库标 准查询语言SQL
例4:删除关于学号必须取唯一值的约束。 ALTER TABLE Student DROP UNIQUE(Sno);
3.删除基本表
基本格式: DROP TABLE〈表名〉
例5. 删除student表 DROP TABLE Student ;
3.2.2.建立与删除索引
1. 建立索引 基本格式: CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>[,<列名>[〈次序>]]…..); 次序:ASC,DESC 例 6: 为Student, Course, SC 3个表 建立索引,Student
2.选择表中的若干元组
1).消除重复的行 例6.查询所有选修过课的学生学号。
SELECT Sno
FROM SC ;
Sno
Cno Grade
关系数据库标准语言
例:查询考试成绩有不及格的学生的学号。
SELECT DISTINCT 学号 FROM 选课 WHERE 成绩<60; 这里使用了DISTINCT短语,当一个学生有多门课程不及格,他 的学号也只列一次。
(2)确定范围
谓词BETWEEN…AND…和NOT BETWEEN…AND…可以用来查找属 性值在(或不在)指定范围内的元组,其中BETWEEN后是范围 的下限,AND后是范围的上限。 例:查询所有年龄在20岁到23岁之间的学生姓名、系别及其 年龄。
学号 95001
95001
95001
学号
95001 95002
95002
95002 95002
看书上的例子
2、查询满足条件的元组——条件查询
通过WHERE子句来实现, WHERE子句常用的查询条件有: 比较、确定范围、确定集合、字符匹配、空值与多重条件, 其谓词如书上P16所列。
(1)综合统一
SQL语言集DDL、DML、DCL的于一体,包括定义关系模式、录 入数据、建立数据库、查询、更新、维护、数据库重构、数据库安全性 控制等一系列功能。
(2)高度非过程化 用户无需了解存取路径,用户只需提出“做什么”,而不 必指明“怎么做”。存取路径的选择以及SQL语句的操作过 程由系统自动完成。 (3) SQL语言是一种面向集合的语言,每个命令的操作对 象是一个或多个关系,结果也是一个关系。 (4)以统一的语法结构提供两种使用方式——自含式和嵌 入式 自含式语言可以独立使用交互命令,适用于终端用户、 应用程序员和DBA; 嵌入式语言使其嵌入在高级语言中使用,供应用程序员 开发应用程序。
数据库系统概论:第4章 关系数据库标准语言——SQL语言1
4)删除完整性约束
例:删除“Height”属性列上的CHECK约束。 ALTER TABLE Student DROP
CONSTRAINT Chk1;
27
5)删除属性列
例:删除Student表中新增加的“Height”属性列。 ALTER TABLE Student DROP COLUMN Height;
2
2、SQL语言应用情况
(1) Oracle、Sybase、Informix、Ingres、 DB2、SQL Server、Rdb等大型数据库管理系统 实现了SQL语言; (2) Dbase、Foxpro、Acess等PC机数据库管理 系统部分实现了SQL语言; (3)可以在HTML(Hypertext Markup Language, 超文本标记语言)中嵌入SQL语句,通过WWW访 问数据库; (4)在VC、VB、Delphi、PB也可嵌入SQL语句。
/*外键约束*/ Credit NUMBER);
21
例3:建立一个学生选课表SC,所有约束条件均为表
级完整性约束。
CREATE TABLE SC
( Sno CHAR(8),
Cno CHAR(8),
Grade NUMBER,
PRIMARY KEY(Sno,Cno),
/*主键约束*/
FOREIGN KEY(Sno) REFERENCES Student(Sno)
25
3)增加完整性约束
例:给Student表中“Height”属性列增加一 个CHECK约束,要求学生的身高要超过140厘 米才行。 ALTER TABLE Student ADD CONSTRAINT Chk1 CHECK(Height>140);
关系数据库语言SQL(ch)
LEFT JOIN(LEFT OUTER JOIN):返回左表中的 所有行,以及右表中满足连接条件的行。如果右表 中没有匹配的行,则返回NULL。
FULL JOIN(FULL OUTER JOIN):返回两个表中 的所有行,无论是否满足连接条件。如果某个表中 没有匹配的行,则返回NULL。
删除自定义函数
使用`DROP FUNCTION`语句删除不再需要的自定义函数。
视图创建及使用场景
01
02
03
04
创建视图
使用`CREATE VIEW`语 句定义视图名称、列名 和查询语句,将复杂的 SQL查询封装为可重用的 视图。
使用视图
在SQL查询中,通过视图 名称引用视图,简化查 询语句的编写。
修改表名
使用`ALTER TABLE`语句修改表 的名称。
删除数据库和表
删除数据库
使用`DROP DATABASE`语句删除现有的数据库 ,需要指定数据库名称。
删除索引
使用`DROP INDEX`语句删除现有的索引,需要 指定索引名。
删除表
使用`DROP TABLE`语句删除现有的表,需要指定 表名。
关系数据库语言sql(ch)
目录
• SQL语言概述 • 数据定义语言(DDL) • 数据操纵语言(DML) • 数据查询语言(DQL) • 数据控制语言(DCL) • 存储过程与触发器 • 函数与视图 • SQL优化与性能提升
01 SQL语言概述
SQL语言定义
1
SQL(Structured Query Language,结构化查 询语言)是用于管理关系数据库的标准编程语言。
第03章-关系数据库标准语言SQL
语句 CREATE
功能 创建数据库或数据库对象
ALTER
修改数据库或数据库对象
DROP
删除数据库或数据库对象
说明 不同数据库对象参数不同 不同数据库对象参数不同 不同数据库对象参数不同
SQL的组成(续) ❖ 数据操纵语言DML(Data Manipulation Language):用于执行对数据库检索和更新。
定义基本表(续)
❖ 表的完整性约束条件 创建表时可指定表的完整性约束条件,也称为约束: 列级完整性约束条件 完整性约束条件涉及到该表的当前一个属性列 表级完整性约束条件 完整性约束条件涉及到该表的一个或多个属性列
➢ RDBMS自动检查对表的操作是否违背表的完整性约束条件
学生表Student
数据库 模式
表 视图
模式 表
索引
定义模式(续)
❖ 基本格式: CREATE SCHEMA [<模式名>] AUTHORIZATION <用户名> CREATE、SCHEMA 、AUTHORIZATION为保留字 保留字习惯使用大写 CREATE SCHEMA 为定义模式的语句 <模式名>为所创建的模式的名称 尖括号表示用户提供的参数 方括号表示参数可选 AUTHORIZATION <用户名> 子句用于指定模式的所有者 <用户名>指定一个用户
❖ 也可以使用带指定参数值的命令创建数据库
3.3 数据定义
3.3.1 模式的定义与删除 3.3.2 基本表的定义、删除与修改 3.3.3 索引的建立与删除
定义模式
❖ 模式(SCHEMA) 定义模式实际上是定义了一个命名空间(或容器)。 在这个空间中可以定义该模式包含的数据库对象 例如基本表、视图、索引、存储过程等。 定义模式能更好的管理数据库中的对象
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
比较运算符:=、>、<、>=、<=、!= [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2>
AND [<表名2>.]<列名3>
连接查询 (续)
连接字段 连接谓词中的列名称为连接字段 连接条件中的各连接字段类型必须是可比的, 但不必是相同的
对表2按连接字段建立索引 对表1中的每个元组,依次根据其连接字段
值查询表2的索引,从中找到满足条件的元 组,找到后就将表1中的第一个元组与该元 组拼接起来,形成结果表中一个元组
连接查询 (续)
SQL中连接查询的主要类型 广义笛卡尔积 等值连接(含自然连接) 非等值连接查询 自身连接查询 外连接查询 复合条件连接查询
一、广义笛卡尔积
不带连接谓词的连接 很少使用 例:
SELECT Student.* , SC.* FROM Student, SC
二、等值与非等值连接查询
等值连接、自然连接、非等值连接
[例32] 查询每个学生及其选修课程的情况。
SELECT Student.*,SC.* FROM Student,SC
重复上述操作,直到表1中的全部元组都处理完毕
排序合并法(SORT-MERGE)
常用于=连接
首先按连接属性对表1和表2排序 对表1的第一个元组,从头开始扫描表2,顺序查找
满足连接条件的元组,找到后就将表1中的第一个 元组与该元组拼接起来,形成结果表中一个元组。 当遇到表2中第一条大于表1连接字段值的元组时, 对表2的查询不再继续
自身连接(续)
FIRST表(Course表)
Cno Cname
1
数据库
2
数学
3
信息系统
4
操作系统
5
数据结构
6数据处理7Fra bibliotekPASCAL语言
Cpno 5
1 6 7
6
Ccredit 4 2 4 3 4 2 4
自身连接(续)
SECOND表(Course表)
Cno Cname
1
数据库
2
数学
3
信息系统
4
操作系统
5
数据结构
6
数据处理
7
PASCAL语言
Cpno 5
1 6 7
6
Ccredit 4 2 4 3 4 2 4
自身连接(续)
查询结果
cno cpno
1
7
3
5
5
6
四、外连接(Outer Join)
外连接与普通连接的区别
普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表
中不满足连接条件的元组一并输出
排序合并法
找到表1的第二条元组,然后从刚才的中断点处继 续顺序扫描表2,查找满足连接条件的元组,找到 后就将表1中的第一个元组与该元组拼接起来,形 成结果表中一个元组。直接遇到表2中大于表1连接 字段值的元组时,对表2的查询不再继续
重复上述操作,直到表1或表2中的全部元组都处理 完毕为止
索引连接(INDEX-JOIN)
等值连接
结果表
Student.Sno Sname Ssex Sage Sdept
95001
李勇 男 20
CS
95001
李勇 男 20
CS
95001
李勇 男 20
CS
95002
刘晨 女 19
IS
95002
刘晨 女 19
IS
SC.Sno
95001 95001 95001 95002 95002
Cno Grade
Sno Sname Ssex Sage Sdept
95001 李勇 男 20 CS 95002 刘晨 女 19 IS 95003 王敏 女 18 MA 95004 张立 男 19 IS
等值连接
SC表
Sno
Cno
95001
1
95001
2
95001
3
95002
2
95002
3
Grade
92
85
88 90 80
数据库系统概论
关系数据库标准语言SQL概述
技术创新,变革未来
查询
3.3.1 概述 3.3.2 单表查询 3.3.3 连接查询 3.3.4 嵌套查询 3.3.5 集合查询 3.3.6 小结
3.3.3 连接查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件或连接谓词 一般格式:
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用 别名前缀
自身连接(续)
[例34] 查询每一门课的间接先修课(即先 修课的先修课)
SELECT o,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = o;
非等值连接查询
连接运算符 不是 = 的连接操作
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
比较运算符:>、<、>=、<=、!=
[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>
三、自身连接
一个表与其自己进行连接,称为表的自身连接
WHERE Student.Sno = SC.Sno;
等值连接
连接运算符为 = 的连接操作
[<表名1>.]<列名1> = [<表名2>.]<列名2> 任何子句中引用表1和表2中同名属性时,都必须加
表名前缀。引用唯一属性名时可以加也可以省略表 名前缀。
等值连接
假设Student表、SC表分别有下列数据: Student表
连接操作的执行过程
嵌套循环法(NESTED-LOOP)
首先在表1中找到第一个元组,然后从头开始扫描表2, 逐一查找满足连接件的元组,找到后就将表1中的第一 个元组与该元组拼接起来,形成结果表中一个元组。
表2全部查找完后,再找表1中第二个元组,然后再从 头开始扫描表2,逐一查找满足连接条件的元组,找到 后就将表1中的第二个元组与该元组拼接起来,形成结 果表中一个元组。
外连接(续)
[例 33] 查询每个学生及其选修课程的情况包括 没有选修课程的学生----用外连接操作
SELECT Student.Sno,Sname,Ssex, Sage,Sdept,Cno,Grade
1 92 2 85 3 88 2 90 3 80
自然连接
等值连接的一种特殊情况,把目标列中 重复的属性列去掉。
[例33] 对[例32]用自然连接完成。
SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade
FROM Student,SC WHERE Student.Sno = SC.Sno;