




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关系数据库标准语言SQL,提纲 SQL概述 数据定义 数据查询 数据更新 视图 数据控制,3,关系数据库标准语言SQL,3.1 SQL概述 SQL语言也叫结构化查询语言(Structured Query Language),是一种介于关系代数与关系演算之间的语言。 其功能包括:数据定义、数据查询、数据操作和数据控制四个方面,是一个通用的、功能很强的关系数据库语言。,3,关系数据库标准语言SQL,3.1 SQL概述(续) SQL语言 扩展SQL语言,3,关系数据库标准语言SQL,3.2 数据定义 SQL数据定义功能包括定义基本表、定义视图和定义索引等,3,关系数据库标准语言SQL,3.2 数据定义(续) 基本表定义 CREATE TABLE 表名 (列名1 数据类型 列级完整性约束条件, 列名2 数据类型 列级完整性约束条件, 列名N 数据类型 列级完整性约束条件 表级完整性约束条件) 说明: (1)其中表名是要定义的基本表的名称。一个表可以由一个或多个属性列组成。 (2)创建表时通常还可以定义与该表有关的完整性约束条件。完整性约束条件被存入系统的数据字典中。当用户对表中的数据进行更新操作(插入和修改)时,DBMS会自动检查该操作是否违背这些约束条件。如果完整性约束条件涉及表的多个属性列,则必须定义在表级上,否则既可以定义在列级,也可以定义在表级。,3,关系数据库标准语言SQL,3.2 数据定义(续) 基本表定义(续) Oracle支持标准SQL语言,但在很多方面进行了扩展,如对CREATE TABLE语句,Oracle增加了对存储参数的控制。Oracle创建表的常用语法为: CREATE TABLE 方案.表名 (列名1 数据类型 列级完整性约束条件, 列名2 数据类型 列级完整性约束条件, 列名N 数据类型 列级完整性约束条件 表级完整性约束条件) PCTFREE integer PCTUSED integer TABLESPACE 表空间 STORAGE( INITIAL integer NEXT integer MINEXTENTS integer MAXEXTENTS integer PCTINCREASE integer ),3,关系数据库标准语言SQL,3.2 数据定义(续) 基本表定义(续) 例3-1 在Oracle中用SQL命令创建图书信息表、读者信息表和借阅表。 (1)创建图书信息表。 CREATE TABLE book (bookid VARCHAR2(20) PRIMARY KEY, bookname VARCHAR2(60) NOT NULL, editor VARCHAR2(8), price NUMBER(5,2), publish VARCHAR2(30), pubdate DATE, qty NUMBER(5),3,关系数据库标准语言SQL,3.2 数据定义(续) 基本表定义(续) (2)创建读者信息 。 CREATE TABLE reader (cardid VARCHAR2(10) PRIMARY KEY, name VARCHAR2(8), sex VARCHAR2(2) CHECK(sex IN(男,女), dept VARCHAR2(20), class NUMBER(1),3,关系数据库标准语言SQL,3.2 数据定义(续) 基本表定义(续) (3)创建借阅表 。 CREATE TABLE borrow (bookid VARCHAR2(20), cardid VARCHAR2(10), bdate DATE NOT NULL, sdate DATE, PRIMARY KEY(bookid,cardid,bdate), CONSTRAINT FK_bookid FOREIGN KEY(bookid) REFERENCES book(bookid), CONSTRAINT FK_cardid FOREIGN KEY(cardid) REFERENCES reader (cardid),3,关系数据库标准语言SQL,3.2 数据定义(续) 修改基本表 SQL语言用ALTER TABLE语句修改基本表,其一般格式为: ALTER TABLE MODIFY NULL| NOT NULL ADD 完整性约束 ADD DROP CONSTRAINT DROP COLUMN ,3,关系数据库标准语言SQL,3.2 数据定义(续) 修改基本表(续) 例3-2 将BOOKID列宽改为15。 ALTER TABLE book MODIFY bookid VARCHAR2(15) 例3-3 删除借阅表中的参照完整性。 ALTER TABLE borrow DROP CONSTRAINT FK_bookid DROP CONSTRAINT FK_cardid 例3-4 如果例3-1中没为借阅表创建参照完整性,或者已按例3-3将参照完整性删除,则可按下面方法创建参照完整性。 ALTER TABLE borrow ADD CONSTRAINT FK_bookid FOREIGN KEY(bookid) REFERENCES book(bookid) ADD CONSTRAINT FK_cardid FOREIGN KEY(cardid) REFERENCES reader(cardid),3,关系数据库标准语言SQL,3.2 数据定义(续) 删除基本表 DROP TABLE ,3,关系数据库标准语言SQL,3.2 数据定义(续) 建立索引 CREATE UNIQUE INDEX ON ( , );,3,关系数据库标准语言SQL,3.2 数据定义(续) 删除索引 DROP INDEX .,3,关系数据库标准语言SQL,3.3 数据查询 一般格式 SELECT ALL | DISTINCT , FROM , 别名 WHERE GROUP BY HAVING ORDER BY ASC | DESC ;,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (1)选择表中的若干列 例3-6 查询所有读者的卡号和姓名。 SELECT cardid, name FROM reader 例3-7 查询所有图书信息。 SELECT * FROM book 例3-8 使用别名,查询所有读者的卡号和姓名。 SELECT cardid卡号, name姓名 FROM reader,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (2)选择表中满足条件的记录,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (2)选择表中满足条件的记录 (续) 例3-9 查询价格在20元以上的所有图书信息。 SELECT * FROM book WHERE price=20 例3-10 查询在2003年后的借书记录。 SELECT * FROM borrow WHERETO_CHAR(bdate,YYYY)=2003 例3-11 查询价格在2030元之间的所有图书信息。 SELECT * FROM book WHERE price BETWEEN 20 AND 30 例3-12 查询电子工业出版社、清华大学出版社和高等教育出版社出版的所有图书的书名。 SELECT bookname FROM book WHERE publish IN (电子工业出版社, 清华大学出版社, 高等教育出版社) 例3-13 查询以“数据库”开头的所有图书的书名和出版社。 SELECT bookname, publish FROM book WHERE bookname LIKE 数据库%,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (2)选择表中满足条件的记录 (续) 例3-14 查询书名含有DELPHI_6的所有图书信息。 SELECT * FROM book WHERE bookname LIKE %DELPHI_6% ESCAPE 例3-15 读者借书后还未还书时,借阅表中的还书日期为空值。查询所有未还书籍的读者号和借书时间。 SELECT cardid , TO_CHAR(bdate,YYYY-MM-DD) FROM borrow WHERE sdate IS NULL 例3-16 查询单位为“计算机系”且类别为学生(class=1)的所有读者信息 SELECT * FROM reader WHERE dept=计算机系 and class=1,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (3)对查询结果排序 例3-17 查询2003年后出版的所有图书并按出版先后顺序排序。 SELECT * FROM book WHERE TO_CHAR(pubdate,YYYY)=2003 ORDER BY pubdate,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (4)使用集函数 SQL提供了许多集函数,主要包括: COUNT ( DISTINCT |ALL * ) 统计元组个数。 COUNT ( DISTINCT | ALL ) 统计一列中值的个数。 SUM ( DISTINCT | ALL ) 计算一列值的总和(此列必须是数值型)。 AVG(DISTINCT | ALL ) 计算一列值的平均值(此列必须是数值型)。 MAX(DISTINCT | ALL ) 计算一列值的最大值。 MIN(DISTINCT | ALL ) 计算一列值的最小值。,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (4)使用集函数 (续) 例3-18 查询读者总数。 SELECT COUNT(*) FROM reader 例3-19 查询有未还书的读者数。 SELECT COUNT(DISTINCT cardid) FROM borrow WHERE sdate IS NULL 例3-20 查询库存书总数。 SELECT SUM(qty) FROM book,3,关系数据库标准语言SQL,3.3 数据查询(续) 单表查询(续) (5)分组统计 例3-21 统计不同类型的读者数。 SELECT class, COUNT(cardid) FROM reader GROUP BY class 例3-22 按出版年份统计库存量。 SELECT TO_CHAR(pubdate,YY), SUM(qty) FROM book GROUP BY TO_CHAR(pubdate,YY) 例3-23 查询借书数量大于10本的读者卡号。 SELECT cardid FROM borrow WHERE sdate IS NULL GROUP BY cardid HAVING COUNT(bookid)10,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (1)等值与非等值连接查询 例3-24 查询所有借书未还的读者的姓名。 SELECT name FROM reader,borrow WHERE reader.cardid=borrow.cardid AND sdate IS NULL 例3-25 查询所有读者信息及借阅情况。 SELECT reader.* , borrow.* FROM reader , borrow WHERE reader.cardid=borrow.cardid,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (2)自然连接 例3-26 自然连接READER和BORROW表。 SELECT reader.cardid, name, sex, dept, class , bookid, bdate, sdate FROM reader,borrow WHERE reader.cardid=borrow.cardid,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (3)自身连接 例3-27 查询书名相同而出版社不同的所有图书的书名。 SELECT DISTINCT B1.bookname FROM book B1,book B2 WHERE B1.bookname=B2.bookname AND B1.publishB2.publish,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (4)外连接 左外连:查询结果中不仅包含符合连接条件的行,而且包含左表中所有数据行。 右外连:查询结果中不仅包含符合连接条件的行,而且包含右表中所有数据行。 全外连:查询结果中不仅包含符合连接条件的行,而且包含两个连接表中所有数据行。,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (4)外连接 (续) 例3-28 在例3-26中要求将没有借书记录的读者也显示出来。 SELECT reader.cardid, name, sex, dept, class , bookid, bdate, sdate FROM reader,borrow WHERE reader.cardid=borrow.cardid(+) 说明:(+)在右边,保证了左边表中的所有记录都会被取到。 例3-28也可以改写成: SELECT reader.cardid, name, sex, dept, class, bookid, bdate, sdate FROM reader LEFT OUTER JOIN borrow ON reader.cardid=borrow.cardid,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (5)综合事例 例3-29 查询借书期限超过2个月的所有读者的姓名、所借书籍名和借书日期。 SELECT name,bookname,bdate FROM book,reader,borrow WHERE book.bookid=borrow.bookid AND reader.cardid=borrow.cardid AND MONTHS_BETWEEN(SYSDATE,bdate) 2 AND sdate IS NULL,3,关系数据库标准语言SQL,3.3 数据查询(续) 多表查询 (续) (5)综合事例(续) 例3-30 按读者姓名查询指定读者的借还书历史记录。假设读者姓名为“刘勇”。 SELECT ,bdate,sdate FROM borrow,book,reader WHERE book.bookid=borrow.bookid AND reader.cardid=borrow.cardid AND =刘勇 例3-31 查询指定图书的去向。如指定书名为“数据结构”。 SELECT ,dept FROM borrow,reader,book WHERE borrow.cardid=reader.cardid AND borrow.bookid=book.bookid AND book.bookname=数据结构 AND sdate IS NULL,3,关系数据库标准语言SQL,3.3 数据查询(续) 嵌套查询 (1)带IN谓词的子查询 例3-32 查询借了“数据库系统”书籍的所有读者的姓名。 SELECT name FROM reader WHERE cardid IN (SELECT cardid FROM borrow WHERE bookid IN (SELECT bookid FROM book WHERE bookname=数据库系统),3,关系数据库标准语言SQL,3.3 数据查询(续) 嵌套查询(续) (2)带有比较运算符的子查询 例3-33 查询与“刘勇”在同一个部门的所有读者的信息。 SELECT * FROM reader WHERE dept =( SELECT dept FROM reader WHERE name=刘勇),3,关系数据库标准语言SQL,3.3 数据查询(续) 嵌套查询(续) (3)带有ANY或ALL谓词的子查询 语义为: ANY:大于子查询结果中的某个值。 =ANY:大于等于子查询结果中的某个值。 ANY:不等于子查询结果中的某个值。 ALL:大于子查询结果中的所有值。 =ALL:大于等于子查询结果中的所有值。 ANY:不等于子查询结果中的任何一个值。,3,关系数据库标准语言SQL,3.3 数据查询(续) 嵌套查询(续) (3)带有ANY或ALL谓词的子查询 (续) 例3-34 查询所有正借阅“中国水利水电出版社”出版的书籍的读者姓名。 SELECT name FROM reader WHERE cardid =ANY( SELECT cardid FROM borrow WHERE sdate IS NULL AND bookid =ANY( SELECT bookid FROM book WHERE publish=中国水利水电出版社),3,关系数据库标准语言SQL,3.3 数据查询(续) 嵌套查询(续) (4)带有EXISTS谓词的子查询 例3-35 查询借阅了书号为TP2003-002图书的所有读者姓名。 SELECT name FROM reader WHERE EXISTS ( SELECT * FROM borrow WHERE borrow.cardid=reader.cardid AND bookid=TP2003-002),3,关系数据库标准语言SQL,3.4 数据更新 插入数据 (1)插入单个元组 插入单个元组的INSERT语句的语法格式为: INSERT INTO(,) VALUES(,) 例3-37 在读者表中插入一条新的记录(T0031, 刘伟, 男, 计算机系,1)。 INSERT INTO reader VALUES(T0031, 刘伟, 男, 计算机系,1),3,关系数据库标准语言SQL,3.4 数据更新(续) 插入数据(续) (2)插入子查询结果 插入子查询结果的INSERT语句的格式为: INSERT INTO(,) 子查询; 例3-38 按书号统计每种图书的借出数量并保存到另一个表中。 第一步先创建表: CREATE TABLE BOOKQTY (bookid CHAR(20), qty INT) 第二步插入数据: INSERT INTO BOOKQTY SELECT bookid, COUNT(*) FROM borrow WHERE sdate IS NULL GROUP BY bookid,3,关系数据库标准语言SQL,3.4 数据更新(续) 修改数据 修改操作又称为更新操作,其语句格式为: UPDATE SET=,= WHERE;,3,关系数据库标准语言SQL,3.4 数据更新(续) 修改数据(续) 例3-39 读者还书操作。设读者卡号为S0101,书号为TP2003-002。 UPDATE borrow SET sdate=SYSDATE WHERE bookid=TP2003-002 AND cardid=S0101 ; UPDATE book SET qty=qty+1 WHERE bookid=TP2003-002 例3-40 读者借书操作。设读者卡号为T0001,书号为TP2004-005。 UPDATE book SET qty=qty-1 WHERE bookid=TP2004-005 INSERT INTO borrow(bookid,cardid,bdate) VALUES(TP2004-005, T0001,SYSDATE),3,关系数据库标准语言SQL,3.4 数据更新(续) 删除数据 删除数据指删除表中的某些记录,删除语句的一般格式为: DELETE FROM WHERE;,3,关系数据库标准语言SQL,3.4 数据更新(续) 删除数据(续) 例3-41 删除卡号为T0035的读者的所有借书记录,然后删除该读者信息。 DELETE FROM borrow WHERE cardid=T0035; DELETE FROM reader WHERE cardid =T0035 例3-42 清空借阅表。 DELETE FROM borrow 例3-43 带子查询的删除操作。删除没有借书记录的所有读者。 DELETE FROM reader WHERE NOT EXISTS( SELECT * FROM borrow WHERE borrow.cardid=reader.cardid),3,关系数据库标准语言SQL,3.5 视图 视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。 视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。,3,关系数据库标准语言SQL,3.5 视图(续) 建立视图 SQL语言用CREATE VIEW命令建立视图,其一般格式为: CREATE VIEW(,) AS WITH CHECK OPTION; 例3-44 建立读者类别为学生(class=1)的读者视图。 CREATE VIEW S_reader AS SELECT * FROM reader WHERE class=1,3,关系数据库标准语言SQL,3.5 视图(续) 建立视图(续) 例3-45 创建教师读者(class=2)视图,并要求进行修改和插入操作时仍保证视图只有教师记录。 CREATE VIEW T_reader AS SELECT cardid, name, sex, dept FROM reader WHERE class=2 WITH CHECK OPTION 例3-46 创建教师借阅视图。 CREATE VIEW T_borrow AS SELECT cardid, bookid, bdate, sdate FROM borrow WHERE cardid IN( SELECT cardid FROM reader WHERE class=2),3,关系数据库标准语言SQL,3.5 视图(续) 建立视图(续) 例3-47 创建尚有未归还图书的读者借阅视图,包括读者姓名、所借书名和借书时间。 CREATE VIEW V_borrow AS SELECT name,bookname,bdate FROM borrow,reader,book WHERE borrow.bookid=book.bookid AND borrow.cardid=reader.cardid AND sdate IS NULL 例3-48 统计每种图书的藏书数量(=在库数量+借出数量)。 先计算每种图书的借出数量: CREATE VIEW B_qty(bookid,NUM) AS SELECT bookid,COUNT(*) FROM borrow WHERE sdate IS NULL GROUP BY bookid 再计算每种图书的总数量(藏书数量): CREATE VIEW book_qty(bookid,SUMQTY) AS SELECT book.bookid, qty+NUM FROM book, B_qty WHERE book.bookid=B_qty.bookid,3,关系数据库标准语言SQL,3.5 视图(续) 删除视图 D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 慢性病患者生活质量评估-洞察及研究
- 管道供应链整合-洞察及研究
- 有效书面沟通原则课件
- 有创静脉监测课件
- 班级日常管理综合实施方案
- 耐腐蚀铸件连接技术-洞察及研究
- 城市建筑矢量渲染方案设计(3篇)
- 月子餐品鉴会课件
- 网校与淘宝课件的区别
- 《秋游》教学设计-2024-2025学年北师大版数学二年级上册
- GB/T 32177-2015耐火材料中B2O3的测定
- GB/T 30951-2014小型水电站机电设备报废条件
- GB/T 18948-2017内燃机冷却系统用橡胶软管和纯胶管规范
- GB/T 13955-2017剩余电流动作保护装置安装和运行
- GB/T 11968-2020蒸压加气混凝土砌块
- 电动汽车充电桩申请安装备案表
- DB32T 4073-2021 建筑施工承插型盘扣式钢管支架安全技术规程
- 易制毒、易制爆培训试卷及答案
- 入行论94课第1个颂词
- fog-106单轴光纤陀螺仪技术协议
- 《古代汉语(II)》课程教学大纲(本科)
评论
0/150
提交评论