第5章__PROC_SQL简介
数据库应用第5章-1_结构化查询语言SQL_V08_2

第5章 结构化查询语言SQL数据库系统应用Data Base System Application张建国哈工大计算机科学与技术学院2008-10-7哈工大计算机学院 张建国 Slide 5-1第5章 结构化查询语言SQL2008-10-72第5章 结构化查询语言SQL本章主要内容SQL概述 基本表的定义、修改与删除 SQL的数据更新 数据记录的插入 数据记录的修改 数据记录的删除 SQL的数据查询 索引的建立与删除 T-SQL语言2008-10-7哈工大计算机学院 张建国Slide 5-3第5章 结构化查询语言SQL5.1 SQL概述1. SQL的发展 SQL(Structured Query Language)意为结构化查询语言. 1974年由Boyce和Chamberlin提出来. 最初在System R关系数据库中实现.该语言功能丰富、语言简捷、使用灵活方便、深受各界欢迎.1986年成为美国国家标准. 1987年成为国际标准SQL86. 1989年,ISO颁布了增强完整性特征的SQL89标准. 1993年,ISO对SQL89标准进行了大量的修改和扩充,推出 SQL2(SQL92).2008-10-7哈工大计算机学院 张建国 Slide 5-4第5章 结构化查询语言SQL5.1 SQL概述(Cont.)SQL是一种通用的、功能极强的关系数据库语言. 各数据库厂家纷纷推出各自支持SQL的软件或与SQL 接 口软件,使自己的数据库可以运行SQL. 许多其他软件(例如图形处理、人工智能、软件工程工具 、软件开发工具等)也利用SQL语言的数据查询功能,作为 自身的一部分,使其数据查询功能更强大. 许多程序设计语言中也都引入了SQL.2008-10-7哈工大计算机学院 张建国Slide 5-5第5章 结构化查询语言SQL5.1 SQL概述(Cont.)2. SQL的特点 (1) 一体化 非关系模型的数据语言 模式数据定义语言:Schema DDL 外模式(子模式)数据定义语言:SubSchema DDL 存储模式数据定义语言: DSDL(Data Storage Definition Language) 数据操纵语言:DML SQL语言 SQL将数据定义语言DDL、数据操纵语言DML和数据控 制语言DCL集成在一起,各种语言风格统一.2008-10-7哈工大计算机学院 张建国 Slide 5-6第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(2) 高度非过程化 非关系语言 通过存取路径存取数据. SQL语言 SQL是一种面向问题的语言,只需提出“做什么”,不必指出“ 怎么做”.存取路径的选择和SQL的操作过程是由系统自动 完成的. (3) 面向集合的操作方式 非关系语言 一次一个记录 SQL 采用集合操作,操作对象和操作结果都是元组的集合.2008-10-7哈工大计算机学院 张建国 Slide 5-7第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(4) 两种使用方式、统一的语法结构 SQL既是自含式语言,又是嵌入式语言. 自含式语言 能独立地在联机方式下使用(命令方式),用户可以在终端键 盘上直接输入SQL命令对DB进行操作. 嵌入式语言 嵌入到高级语言(VB、PB、Java等)程序中,利用主语言(高 级语言)进行计算处理、利用DB语言进行数据管理. 同一条命令在两种操作方式中的语法结构基本一致.2008-10-7哈工大计算机学院 张建国Slide 5-8第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(5) 语言简捷、易学易用 SQL具有很强的功能,但由于其设计巧妙,使得语言十分简捷. 完成其核心功能只用9个动词:数据查询:SELECT(查询) 数据定义:CREATE(创建表、索引、视图) DROP(删除表、索引、视图) ALTER(修改表) 数据操纵:INSERT(插入) DELETE(删除) UPDATE(修改) 数据控制:GRANT(授权) REVOKE(收回授权)2008-10-7哈工大计算机学院 张建国 Slide 5-9第5章 结构化查询语言SQL5.1 SQL概述(Cont.)3. SQL支持三级模式结构 外模式 外模式对应于视图View和部分基本表Base Table 用户可以用SQL语言对基本表和视图进行操作 从用户的观点看基本表和视图是一样的 模式 模式对应于基本表 基本表是独立存在的表 每个基本表对应一个关系2008-10-7哈工大计算机学院 张建国Slide 5-105.1 SQL概述(Cont.)内模式内模式对应于存储文件存储文件是在计算机存储介质中存放的文件形式一个或若干个基本表对应一个存储文件视图视图是从一个或几个基本表或其他视图导出的表视图并不存放实际的数据,仅保存视图的定义使用视图时,根据视图定义,从基本表中取数据因此,视图实际上是一个虚表5.1 SQL 概述(Cont.)SQL 用户2视图3视图2视图1基本表3基本表2基本表1存储文件3存储文件2存储文件1基本表4外模式模式内模式SQL 用户1SQL 用户35.2 基本表的定义、修改与删除1. 基本表的定义格式:CREATE TABLE 表名(列名1 数据类型1 [列级完整性约束条件1][,列名2 数据类型2 [列级完整性约束条件2]]…[,列名n 数据类型n [列级完整性约束条件n]]);表名:基本表的表名列名:属性名数据类型:属性的数据类型,可参考具体数据库系统的数据类型5.2 基本表的定义、修改与删除列级完整性约束条件:相应属性的完整性约束条件NULL/NOT NULL: 该项是否可以取空值UNIQUE: 该项是否具有唯一性CHECK: 该项的取值范围PRIMARY KEY: 设置主码FOREIGN KEY: 设置外码5.2 基本表的定义、修改与删除(Cont.)例:建立一个”学生”表Student和一个”系”表.Student(Sno,Sname,Birthday,Score,Dno)Dpet(Dno,Dname,Dtel)设:学号Sno:CHAR(10),主码姓名Sname:CHAR(8)性别Sex: CHAR(2),取值范围:”男”或”女”出生日期Birthday:SMALLDATETIME考分Score:SMALLINT,取值范围:500~750系号Dno: CHAR(2),系的主码,学生的外码系名Dname: CHAR(30)系电话Dtel: CHAR(13)5.2 基本表的定义、修改与删除(Cont.) CREATE TABLE Dept(Dno CHAR(2) primary key,Dname CHAR(30),Dtel CHAR(13));CREATE TABLE Student (Sno CHAR(10),Sname CHAR(8),Sex CHAR(2) CHECK (Sex=‘男’or Sex=‘女’),Birthday SMALLDATETIME,Score SMALLINT CHECK(Score>=500 and Score<=750, Dno CHAR(2),PRIMARY KEY(Sno),FOREIGN KEY (Dno) REFERENCES Dept(Dno) );5.2 基本表的定义、修改与删除(Cont.)2. 修改基本表格式:ALTER TABLE 表名[ADD 列名数据类型[完整性约束条件]]| [DROP COLUMN 列名]| [ALTER COLUMN 列名数据类型];其中:ADD子句:增加新列及其完整性约束DROP子句:删除指定的列ALTER子句:修改列的定义,包括列名和数据类型5.2 基本表的定义、修改与删除(Cont.)例:在Student表中加入一列性别”民族”,6位字符.ALTER TABLE Student ADD Nation CHAR(6);例:将”民族”的数据类型改为bit.ALTER TABLE Student ALTER COLUMN NationCHAR(8);例:删除”民族”.ALTER TABLE Student DROP COLUMN Nation;5.2 基本表的定义、修改与删除(Cont.)3. 删除基本表格式:DROP TABLE 表名删除基本表时,该表的数据以及在此表上建立的视图及索引全部删除,因此执行删除操作时应特别小心.例:删除基本表Student.DROP TABLE Student;数据库实例设学生-课程数据库中包含三个表:Student(Sno ,Sname,Sex,Birthday,Score,Dname)SC(Sno,Cno ,Grade)Course(Cno ,Cname,CPno,Credit)其中:Sno: CHAR(10); Sname: CHAR(8); Sex: CHAR(2); Birthday: SMALLDATETIME; Score: INT; Dname: CHAR(30)Grade: SMALLINTCno: CHAR(6); Cname: CHAR(30); CPno: CHAR(6);credit: TINYINT学生课程选课分数m n5.3 SQL的数据更新插入数据插入单个元组插入子查询的结果数据修改修改一个元组的数据修改多个元组的数据根据查询结果修改删除数据删除一个元组删除多个元组删除子查询的结果5.3 SQL的数据更新(Cont.)1. 插入数据(1) 插入单个元组格式:INSERT INTO 表名[(列名1[,列名2>,…)]VALUES (常量1[,常量2],…);例:将一个新学生元组的全部属性插入到Student中.•INSERT INTO Student•VALUES('6053610301','李兰','女','1989-3-5',658,'实验学院');5.3 SQL的数据更新(Cont.)例:将一个新学生元组的部分属性插入到Student中. INSERT INTO Student(Sno,Sname,Dname)VALUES('1030310105','王芳','计算机系');未列出的属性列取空值.(2) 插入子查询结果INSERTINTO 表名([列名1[,列名2,……)]子查询;5.3 SQL的数据更新(Cont.)例:建立一个学生平均成绩表SG,包括学号Sno和平均成绩Gavg CREATE TABLE SG(Sno CHAR(10) NOT NULL UNIQUE, Gavg SMALLINT);INSERTINTO SG(Sno,Gavg)SELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;(3) 插入应注意的问题对于表Student和SC若在SC中插入的记录的Sno在Student不存在,则系统不允许插入.5.3 SQL的数据更新(Cont.)2. 修改数据格式:UPDATE 表名SET 列名1=表达式1[,列名2=表达式2]……[WHERE 条件];对满足条件的元组中的指定列用相应的表达式的值修改.(1) 修改一个元组的值例:将学生“6053610301”的性别改为“男”.•UPDATE Student•SET Sex='男'•WHERE Sno='6053610301';5.3 SQL的数据更新(Cont.)(2) 修改多个元组的值例:将课号为“101001”的所有成绩提高10%. UPDATE SCSET Grade=Grade*1.1 Where Cno=‘101001’;例:计算每种商品的金额.UPDATE 商品SET 金额=单价*数量;例:将选修课号为“101001”的成绩每人提高10分. UPDATE SCSET Grade=Grade+10WHERE Cno=‘101001’;(3) 带子查询的修改例:将“计算机系”全体学生的成绩清零.UPDATE SCSET Grade=0WHERE ‘计算机系’= (SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);(4) 修改应注意的问题对于表Student和SC若修改Student中的Sno,而未修改SC中对应记录的Sno.若修改SC中的Sno,而未修改Student中对应的Sno.5.3 SQL的数据更新(Cont.)5.3 SQL的数据更新(Cont.)3. 删除数据格式:DELETEFROM 表名[WHERE 条件];删除满足条件的元组.(1) 删除一个元组例:删除“6053610301"的学生记录.DELETE FROM Student WHERE Sno=‘6053610301’;5.3 SQL的数据更新(Cont.)(2) 删除多个元组例:删除所有学生的选课记录.DELETEFROM SC;(3) 删除子查询的结果例:删除“计算机系”学生的全部选课记录.DELETEFROM SCWHERE ‘计算机系’=(SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);5.3 SQL的数据更新(Cont.)(4) 删除操作注意保持数据的一致性一个学生的各种数据可能存放在多个表中,但一个删除语句只能对一个表进行删除,这样可能会引起数据不一致问题.例:删除学生“6053610301”在Student表中的记录后,学生的基本数据被删除了.但在SC表中仍存在该学生的选课及成绩记录,若不删除,将会使数据不一致.解决办法:执行两次删除操作,既删除Student表中6053610301的记录,又删除SC表中6053610301的相关记录.为了保证数据的完整性和一致性,许多系统的DBMS都提供了相应的处理机制.当主表的记录被删除后,其参照关系的相关记录自动删除.5.4 SQL的数据查询查询功能是数据库系统的核心.格式:SELECT [ALL|DISTINCT] */目标列表达式[,目标列表达式2…]FROM 表名/视图名[WHERE 条件表达式][GROUP BY 列名1 [HAVING 条件表达式]][ORDER BY 列名2 [ASC/DESC]];5.4 SQL的数据查询(Cont.)其中:SELECT:表示查询ALL:显示所有满足条件的元组DISTINCT:消除重复元组*:所有列目标列表达式:查询结果,可以有函数运算FROM:从哪些表或视图中查询WHERE:查询条件GROUP BY:按指定的列分组,例如,计算每个学生平均成绩时,要按学号分组HAVING:GROUP BY分组的条件ORDER BY:输出时按指定列排序ASC:升序(缺省值)DESC:降序5.4 SQL的数据查询(Cont.)1. 单表查询(1) 查询指定列例:查询全体学生的学号和姓名.SELECT Sno,SnameFROM Student;在表Student对Sno,Sname进行投影相当于:Π(Student)Sno,SnameSnameSno5.4 SQL的数据查询(Cont.)(2) 按用户要求的顺序查询指定列例:查询全体学生的姓名,学号和所在系的系名. SELECT Sname,Sno,DnameFROM Student;查询结果列的顺序可以与表中列的顺序不一致.SnameSno Dname5.4 SQL的数据查询(Cont.)(3) 查询全部列例:查询全体学生的全部数据.方法1SELECT Sno,Sname,Sex,Birthday,Score,DnameFROM Student;方法2SELECT *FROM Student;5.4 SQL的数据查询(Cont.) (4) 查询经过计算的值例:查询全体学生的学号,姓名和出生年份.SELECT Sno,Sname,YEAR(Birthday)FROM Student;计算学生的年龄:SELECT Sno,Sname,YEAR(GETDATE( ))-YEAR(Birthday) FROM Student;计算学生出生的月份:SELECT Sno,Sname,MONTH(Birthday)FROM Student;5.4 SQL的数据查询(Cont.)(5) 消除取值重复的元组例:查询所有课程名称.SELECT DISTINCT CnameFROM Course;例:查询所有系名.SELECT DISTINCT DnameFROM Student;(6) 查询满足条件的元组查询条件可以通过WHERE 子句实现,其常用的条件有:IN, NOT IN 集合LIKE, NOT LIKE 字符匹配IS NULL,IS NOT NULL 空值AND,OR 多重条件BETWEEN AND, NOT BETWEEN AND 范围=, >, <, <=, >=, !=(<>), !<,!>比较谓词条件5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)1) 比较大小例:查询“计算机”系全体学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE Dname=‘计算机’;例:查询全体21岁以下学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)<=21;5.4 SQL的数据查询(Cont.)2) 在一个范围内查询例:查询全体年龄在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)BETWEEN20 AND23;例:查询全体年龄不在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)NOT BETWEEN20 AND23;5.4 SQL的数据查询(Cont.)3) 条件为一个集合例:查询“计算机”系和“电气工程”系全体学生的全部数据. SELECT *FROM StudentWHERE Dname IN(‘计算机’,’电气工程’);括号中的内容为一个集合,相当于:SELECT *FROM StudentWHERE Dname=‘计算机’OR Dname=’电气工程’;若查询不是上述系的学生,可用条件:WHERE Dname NOT IN(‘计算机’,’电气工程’);5.4 SQL的数据查询(Cont.)4)字符匹配用谓词LIKE表示字符串匹配,形式为:[NOT] LIKE ‘匹配串’[ESCAPE ‘换码字符’]匹配串中:%表示任意长度的字符串;_表示任意单个字符例:查询“本科生05级03系”学生的全部数据.SELECT *FROM StudentWHERE Sno LIKE‘10503%’;若查询除“本科生05级03系”学生的全部数据,则条件可改为:WHERE Sno NOT LIKE’10503%’;若查询全校“03系”学生的全部数据,则条件可改为:WHERE Sno LIKE’_ _ _03%’;5.4 SQL的数据查询(Cont.)例:查询姓名中有“伟”字的学生的全部数据.SELECT *FROM StudentWHERE Sname LIKE‘%伟%’;若查询所有姓“王”的且姓名仅为两个汉字的学生的全部数据WHERE Sname LIKE‘王_’;若查询的字符串中包含%或_,可用转意符ESCAPE‘<转换码>’例:查询名称为“DB_Design”课程的课号和学分.SELECT Cno,creditFROM CourseWHERE Cname LIKE‘DB\_Design’ESCAPE‘\’;其中:\为转换码,表示该字符码后面的‘\’或‘%’不再具有匹配符的意义,而表示该字符本身.5.4 SQL的数据查询(Cont.)5)空值查询例:查询所有选课但未参加考试学生的学号和课号. SELECT Sno,CnoFROM SCWHERE Grade IS NULL;成绩为空值若查询所有有成绩的学生的学号和课号:WHERE Grade IS NOT NULL;6)多重条件查询例:查询“计算机”系年龄在21岁以下的学生的学号和姓名. SELECT Sno,Sname FROM StudentWHERE Dname=‘计算机’AND YEAR(GETDATE())-YEAR(Birthday) <=21;5.4 SQL的数据查询(Cont.)(7) 对查询结果排序用ORDER BY子句,ASC表示升序,DESC表示降序.例:查询选修了“101001”号课程的学生学号和成绩,并按成绩从高到低排序.SELECT Sno,GradeFROM SCWHERE Cno=‘101001’ORDER BY Grade DESC;若先按成绩从高到低排序,成绩相同者按学号从小到大排序.ORDER BY Grade DESC,Sno;5.4 SQL的数据查询(Cont.)(8) 集函数统计元组个数:COUNT([DISTINCT|ALL]|*)统计一列中值的个数:COUNT([DISTINCT|ALL]<列名>) 对一列求和:SUM([DISTINCT|ALL]<列名>)对一列求平均值:AVG([DISTINCT|ALL]<列名>)求一列中最大值:MAX([DISTINCT|ALL]<列名>)求一列中最小值:MIN([DISTINCT|ALL]<列名>) DISTINCT: 消除重复元组ALL: 所有元组,缺省值例:统计学生总数.SELECT COUNT (*) FROM Student;例:统计男生人数.SELECT COUNT (*) FROM Student WHERE Sex=‘男’;例:统计选修了课程的学生人数.SELECT COUNT (DISTINCT Sno) FROM SC;在SC 中对Sno 投影,然后统计去掉重复元组后的记录个数.例:查找选修“101001”号课程的学生最高分.SELECT MAX (Grade) FROM SCWHERE Cno=‘101001’;5.4 SQL 的数据查询(Cont.)怎样获得尚未选课的学生人数?怎样获得女生人数?例:计算选修“101001”号课程的学生平均成绩.SELECT AVG (Grade) FROM SC WHERE Cno=‘101001’;若显示课号及平均成绩,则:SELECT Cno,AVG (Grade) FROM SCWHERE Cno=‘101001’GROUP BY Cno;例:统计每个学生的平均成绩.SELECT Sno, AVG (Grade) FROM SCGROUP BY Sno;按课号分组5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)(9) 对查询结果分组分组方法用GROUP BY子句将查询结果按某一列或多列值分组,值相等的为一组.分组的目的进一步细化集函数的作用对象.例:求各门课程的课号及其选修该课的人数.SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;例:求每一个学生的平均成绩.SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;5.4 SQL的数据查询(Cont.)若分组后还要按一定条件进行筛选, 可以用HAVING短语指定筛选条件.例:查询选修了3门以上课程的学生学号.SELECT Sno FROM SC GROUP BY SnoHAVING COUNT(*)>=3;先用GROUP语句进行分组,对每组用COUNT统计元组个数,对于每组元组个数大于等于3的学号进行输出.注意WHERE与HAVING语句的区别WHERE:作用于基本表或视图,选择满足条件的元组HAVING:作用于GROUP分成的子组,选择满足条件的组。
第5章 数据库基本概念PPT课件

数据(Data)
数据(Data)是数据库中存储的基本对象 数据的定义
描述事物的符号记录。
数据的种类
文字、图形、图象、声音
数据的特点
数据与其语义是不可分的
数据举例
学生档案中的学生记录 (马超,男,1972,江苏,计算机系,1990)
数据的形式不能完全表达其内容 数据的解释
语义:学生姓名、性别、出生年月、籍贯、所在 系别、入学时间
数据库管理系统(DBMS)
什么是DBMS 数据库管理系统(Database Management System,简称DBMS) 是位于用户与操作系统之间的一层 数据管理软件。
它是用户与数据库的接口,提供数据库的 定义、检索、更新、维护及各种数据控制。
DBMS的主要功能
★定义数据库
提供数据描述语言(DDL),定义数 据库总体逻辑数据结构、存储结构、 保密定义等。
与数据文件名 统一、集中、独
打交道
立的管理
文件系统
DBMS
人工管理阶段 文件系统阶段
数据库系统阶段
数据的共 享程度
无共享
共享性差
共享性高
数据的冗 余度
冗余度极大
冗余度大
冗余度小
数据的独 不独立,完全 立性 依赖于程序
独立性差
具有高度的物理独立 性和一定的逻辑独立性
数据的结 构化
无结构
记录内有结构 整体无结构
整体结构化 用数据模型描述
数据的控 制能力
应用程序 自己控制
应用程序 自己控制
由DBMS提供数据的 安全性、完整性、并 发控制和恢复能力
数据独立性是要维护数据与应用程序之 间的无关性。其目的是,应用程序不因 数据一方的改变而改变;反过来,数据 也不会因应用程序一方的改变而改变。 数据与应用程序相互独立,不受对方的 影响。数据独立性分成物理数据独立性 和逻辑数据独立性两级。
第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 职工)
【《数据库与信息系统》复习题及答案】第5章数据库管理与保护

A.该操作不存在问题
B.该操作丢失修改
C.该操作不能重复读
D.该操作读“脏”数据
时刻序列
T1
T2
①
读 A=10,B=5
②
读 A=10,A=A*2 写回
③
读 A=20,B=5 求和 25 验证错
答案:C
图 5.2 事务 T1、T2 的并发操作序列
解析:本题中事务 T1 首先读取变量 A 和 B,随后事务 T2 修改变量 A,然后事务 T1 又第二
12.若事务 T 对数据 R 已加独占锁,则其他事务对数据 R ________。
A.可以加共享锁不能加独占锁 B.不能加共享锁可以加独占锁 C.可以加共享锁也可以加独占锁 D.不能加任何锁 答案:D 解析:MySQL 的 InnoDB 使用不同的锁定类型来锁定资源,其锁分别是:共享锁(S)、排他 锁(X)、意向共享锁(IS)、意向排他锁、大容量更新锁。有些锁之间是兼容的,有些锁之间 是不兼容的,如某一事务对一个数据上了 X 锁,其他事务对该数据不能上任何类型的锁。
答案:B
解析:事务是用户定义的一个数据操作序列,这些操作要么全做要么全不做,是一个不可分 割的工作单位。事务具有原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和 持久性(Durabiliy)四个特性,简称 ACID 特性。
第5章 SQL语言、查询与视图(精简版)

第五章 SQL语言,查询与视图 SQL语言ห้องสมุดไป่ตู้查询与视图
5.1.1 SQL的数据定义 SQL的数据定义 1,定义表
命令格式: CREAT TABLE <表名> (<字段名1> <类型> ( <长度> [,<小数 <表名> (<字段名1> <类型> <长度> [, 位数> 位数> ] ) [,<字段名2> <类型> (<长度> [,<小数位数>] ) …] 字段名2> <类型> (<长度> [, 小数位数>] SQL创建学生表 例5.1 用SQL创建学生表
第五章 SQL语言,查询与视图 SQL语言,查询与视图
5.1.2 SQL的数据修改 SQL的数据修改
Visual FoxPro提供了三条命令进行数据操作. FoxPro提供了三条命令进行数据操作.
1,INSERT命令 INSERT命令
格式1 格式1: INSERT INTO 表名 [ (字段名1 [,字段名2,…])] (字段名1 [,字段名2 VALUES (表达式1 [,表达式2,…]) (表达式1 [,表达式2
第五章 SQL语言,查询与视图 SQL语言,查询与视图
(3) 空值查询
例5.12 查询缺考学生的学号和课程号 SELECT 学号,课程号 FROM 成绩 WHERE 成绩 IS NULL
(4) GROUP BY 子句
将查询结果按某一列或多列值分组,值相等的为一组. 例5.13 将学生表中的学生按年龄进行分组,并统计 各组的人数 SELECT 年龄,COUNT(姓名) FROM 学生 GROUP BY 年龄,COUNT(姓名) 年龄
proc sql语句

proc sql语句摘要:1.Proc sql 语句简介2.Proc sql 语句的语法结构3.Proc sql 语句的应用示例4.Proc sql 语句的优缺点正文:【一、Proc sql 语句简介】Proc sql 语句是一种在计算机编程中使用的SQL(结构化查询语言)语句,主要用于对数据库进行操作,如查询、插入、更新和删除等。
它可以在程序中实现对数据库的自动化操作,简化了程序员对数据库的处理流程,提高了工作效率。
【二、Proc sql 语句的语法结构】Proc sql 语句的语法结构相对简单,通常由以下几个部分组成:1.创建proc sql 语句的声明:使用CREATE PROCEDURE 语句来定义一个proc sql 语句,例如:CREATE PROCEDURE my_proc()2.Proc sql 语句的执行:使用CALL 语句来执行proc sql 语句,例如:CALL my_proc()3.Proc sql 语句的参数:可以在创建proc sql 语句时定义参数,以便在执行时传递数据,例如:CREATE PROCEDURE my_proc(IN param1 INT, OUT param2 INT)4.Proc sql 语句的逻辑:主要包括SQL 语句,如SELECT、INSERT、UPDATE 和DELETE 等,以及相关的逻辑控制语句,如IF、ELSE、WHEN 等。
【三、Proc sql 语句的应用示例】以下是一个简单的Proc sql 语句应用示例,用于查询数据库中的数据并输出结果:```-- 创建proc sql 语句CREATE PROCEDURE query_data()BEGIN-- 执行SQL 语句查询数据SELECT * FROM my_table;END;-- 执行proc sql 语句CALL query_data();```【四、Proc sql 语句的优缺点】1.优点:(1)简化了程序员对数据库的操作,提高了工作效率;(2)有助于实现代码的模块化,便于维护和调试;(3)可以减少SQL 语句重复编写,提高代码复用性。
第五章理论课使用PLSQL

《Oracle数据库应用》理论课使用PL/SQL⏹本章技能目标◆理解PL/SQL 功能和特点◆了解数据类型及其用法◆理解逻辑比较◆理解控制结构◆掌握错误处理1.PL/SQL 简介PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言。
PL/SQL 是对SQL 的扩展。
PL/SQL支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构。
PL/SQL可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑。
PL/SQL与Oracle 服务器和Oracle 工具紧密集成,具备可移植性、灵活性和安全性。
1.1PL/SQL 的优点PL/SQL是一种可以移植的高性能事务处理语言,它支持SQL和面向对象编程,提供了良好的性能和高效的处理能力。
PL/SQL的优点包括:支持SQLSQL是访问数据库德标准语言,通过使用SQL命令,用户可以轻松地操作存储在关系数据库中的数据。
在PL/SQL 中可以使用:数据操纵命令,事务控制命令,游标控制,SQL 函数和SQL 运算符和伪列。
PL/SQL还支持动态SQL,这种高级的编程技术使应用程序更加灵活,可以在程序运行过程中动态构造和运行各种SQL命令。
支持面向对象编程(OOP)面向对象编程以对象为中心,对象是构建面向对象应用程序的基本部分。
使用OOP开发应用程序大大减少了建立复杂应用程序所需的成本和时间。
对象类型是面向对象的理想建模工具,允许属于不同组的开发人员同时开发软件组件。
PL/SQL全面支持面向对象的编程。
2可移植性,可运行在任何操作系统和平台上的Oralce 数据库使用PL/SQL 编写的应用程序可移植到安装任何操作系统或平台的Oracle 服务器上,还可以编写可移植程序库,在不同的环境中重用。
更佳的性能,PL/SQL 经过编译执行 SQL 是一种非过程语言,在此语言中一次只能执行一条语句,因此在连续的语句之间没有关联。
《数据库原理及应用》第五章SQL查询

SQL语言
SQL功能 命令动词
数据查询
数据定义 数据操纵
SELECT
CREATE、DROP、ALTER INSERT、UPDATE、DELETE
数据控制
GRANT、REVOKE
SQL语言
SQL语言的优点在于SQL不是面向过程的 语言,使用SQL语言只需描述做什么,而 不需要描述如何做,为使用者带来极大的 方便。本章将以讨论SQL的数据查询语言 为主,同时介绍数据定义语言和数据操纵 语言。本章中大部分例题使用“学生管理” 数据库,并假定数据库在Access的当前目录 下。
简单查询----选择记录
WHERE子句通过指定查询条件,可以在表中找出满足条件 的记录。查询条件可以是任意复杂的逻辑表达式。 当WHERE子句需要指定一个以上的查询条件时,要使用逻 辑运算符AND、OR和NOT将其连接成复合的逻辑表达式。 其优先级由高到低为:NOT、AND、OR,可以使用括号改 变优先级。 条件查询还可以使用LIKE或NOT LIKE进行部分匹配查询。* 表示任意长度的字符串;?表示任意单个字符。 在查询中还可以使用查询谓词,查询谓词IN 和NOT IN用于 检索属于(IN)或不属于(NOT IN)指定集合的记录。 例10 查询成绩在60分以下(不包括60分)、90分以上(含 90分)学生的学号。
连接查询(多表查询)
例13 查询会计系学生选修课程及成绩,要求查询结果中含 属性学号、姓名、课程名称和成绩。 SELECT student.学号,姓名,课程名称,成绩 FROM student,course,grade WHERE 所属院系='会计学院' and student.学号=grade. 学号 and grade.课程编号=course.课程编号 这个查询涉及到两个表,查询所要求的结果来自两个表,查 询的条件也涉及到两个表,所以有“FROM student,grade”; 这两个表之间是有联系的,这种联系是通过父表的主关键字 (student中的学号)和子表的外部关键字(grade表的学号) 建立的,所以有命令子句WHERE中的筛选条件“student. 学号=grade.学号”。 由于student表和grade表都有学号属性,因此在SELECT子 句中要用前缀的形式“student.学号”指明取自哪个表中的 学号;此例中用“grade.学号”的形式,查询结果是一样的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ALTER语句
ALTER语句向已存在的表中加入列或从表中删除列。 它也用于改变一个已存在的表中列的属性。当 ALTER语句向表中加入一列时,它将该列在表中所 有行的值初始化为缺失值。然后用UPDATE语句向 新的列中加入值。 如果某列已经在表中,那么可以用MODIFY字句改 变这些列的属性。 若想从一个表中删掉一列及其所有值,在DROP子 句中指定列的名字。如果删掉了一列,一定要把其 它语句中涉及到该列的名字也删掉。
PROC SQL和RESET语句
下面这些选项可以在PROC SQL语句或 RESET语句中出现。这些语句在PROC SQL 语句中使用时,它们说明该选项的初始状态。 使用RESET语句可以在PROC SQL语句之前 增加、移动或改变选项。一个选项被复位之 前一直保持有效。
PROC SQL和RESET语句
CREATE语句
CREATE语句能够根据表或其它视图,及表 中列的索引创建表或视图。
DELETE语句
DELETE语句从表或DBMS表中删去WHERE 表达式为真的所有行,这个表或DBMS表是 在FROM子句中规定的表。此语句不能引用 其FROM子句中的PROC SQL视图。 如果没有规定WHERE子句,DELETE语句就 将表中的所有行都删掉。
SQL过程有助于数据的管理
可以用UPDATE语句增加或修改在表格的列 里的数值,或者用INSERT和DELETE语句插 于或删除行。可以通过用ALTER语句增加、 修改、删去列来修改表格。 可以使用许多RESET语句的增加、改变或删 除的选项。 生成报告。 可以拼接不同类型的数据表为单一的数据表。
SQL过程和SAS数据集选项
SQL过程可应用任何一个SAS数据集选项, 例如把选项KEEP=和DROP=应用于表或视 图中。在SQL过程中,SAS数据集选项被括 在括号里并紧跟在表名或视图名的后面。 不能将SAS数据集选项与PROC SQL视图名 字联系到一起,因为选项仅对视图的基本表 有效。例如,创建PROC SQL视图时,不能 将SAS数据集选项列在视图名字后面。
SELECT语句
在查询表达式中最常用的是SELECT语句,其可以展示查询 结果的数据,可让数据以一定的格式显示,将报告在 OUTPUT窗口输出。SELECT语句的一般形式为: Select col1, col2,… From table 附加的从句; 其中,col1,…指明选择的列,若要选择所有的列可用符号 ‘*’;from表是设定要查询其行列的数据表。在过程SQL 的SELECT语句中附加WHERE从句,可以对表中的观测进 行选择。在SELECT语句中还可以使用ORDER从句将显示 的数据按选定的变量的值排序。在SELECT从句中也可以用 选项FORMAT=对选择的数据设定显示时用的格式。
第5章 PROC SQL简介 章 简介
学习目标
了解SQL过程在SAS系统中的作用; 掌握SQL过程语句以及格式; 熟练运用SQL过程语句进行实例操作;
SQL过程概述Байду номын сангаас
本节描述实现结构查询语言(SQL)以及如 何在SAS系统中工作的概述。 SQL是一个标准化的广泛使用的语言,它可 以检索和更新关系表格和数据库中的数据。 在SAS系统中使用SQL过程,仅需要理解表 格及其操作即可。在SQL中常将它面对的数 据文件称为表。
SQL过程特点
SELECT和CREATE VIEW语句每个都可以包含一个 ORDER BY字句以便对数据进行排序,所以PROC SQL程 序中不需要使用SORT过程。在SQL过程中使用的SAS数据 集不需要按某个变量事先排序。 提交SQL语句时,就可以执行,不需要规定RUN语句。如果 在PROC SQL语句后跟了RUN语句,那么SAS系统会忽略 RUN语句,而且像通常情况一样提交这些语句。 提交SQL过程步后,程序编辑窗口的状态行一直显示 ‘PROC SQL running’直至提交另一个程序或QUIT语句。
本章小节
第一节介绍了SQL过程的特点以及SQL过程 在数据管理方面的作用。使用SQL过程可以 读入、展示和加工SAS数据文件;在表中增 加和修改数据值;增加、修改和删除表的列; 创建表;生成报告;而且可以拼接不同类型 的数据表为单一的数据表。SQL是一种模块 类型的语言,在这种语言中,语句由更小的 分量构造块组成。通过第一节的学习了解 SQL过程及其作用。
ERRORSTOP|NOERRORSTOP:如果遇到出错情 况,规定SAS系统是否停止处理,SAS系统会一直 检查PROC SQL的语句准确性,如果没有出错则执 行该SQL语句。 EXEC|NOEXEC:规定一个语句在检查其正确性后 是否被执行。 FEEDBACK|NOFEEDBACK:规定在扩展视图索引 或在查询语句中作变换后,是否显示这个查询。 PRINT|NOPRINT:规定SELECT语句的结果是否 在SAS的OUTPUT窗口打印。PRINT选项是缺省值。 DOUBLE|NODOUBLE:规定是否隔行输出。
比较SQL术语和SAS术语
SQL术语 表 行 列 SAS术语 SAS数据文件 观测 变量 数据处理术语 文件 记录 字段
SQL过程有助于数据的管理
可以用SELECT语句去检索和操作存于表中、视图 里和由PROC SQL接收的数据(由PROC SQL生成 的SAS数据文件在本章中称为表)。可以用 VALIDATE语句去检查SELECT语句句法的准确性 而无须执行它。还可以用DESCRIBE语句简单地显 示一个PROC SQL视图定义。 可以用CREATE语句在表的列中生成表格、视窗、 索引;这些表和视窗可永久地存贮在SAS数据库内, 而且使用逻辑库名调用它。可以用DROP语句删除 表格、视窗和索引。
SQL过程特点
由于SQL过程实现结构化查询语言,它在运 行时与其它过程会有所不同,主要为: SQL过程的语句被分成一些子句。例如 SELECT语句包含SELECT和FROM子句, 在SQL中子句内的项目用逗号分开,而不像 在SAS系统中用空格分开。 SELECT语句用于查询数据,也自动输出数 据,除非规定了NOPRINT选项。
SQL语句格式
SQL过程包含下面几个语句,其中的PROC SQL和RESET 这两个语句可以没有选项,如下: Proc sql <options>; Alter table statement-1; Create statement-2; Delete statement-3; Describe statement-4; Drop statement-5; Insert statement-6; Reset statement-7; Select statement-8;
本章小节
简单地介绍SQL过程的特点及其与其它过程 的区别,详细阐述了SQL过程所包含的各语 句及其作用,包括PROC SQL和RESET语句、 SAS数据集选项、ALTER语句、CREATE语 句、DELETE语句、SELECT语句。
本章小节
最后,通过具体的10个实例操作讲解SQL语 句的应用,帮助大家掌握SQL过程及其语句 的应用。大家需要重点掌握最后两个实例, 也就是数据集的匹配并接,尤其是3个及以上 数据集(含有不同的匹配字段)的串接。熟 悉这些实例操作将有助于我们深刻体会SQL 过程,并通过上机操作逐渐掌握SQL的编程 操作。