1 / 166

第四章 SQL

第四章 SQL. 提纲. SQL 概述 SQL 数据定义功能 SQL 数据查询功能 SQL 数据修改功能 SQL 数据控制功能 嵌入式 SQL. SQL 概述. 历史 SQL: Struceured Query Language 1974 年,由 Boyce 和 Chamber 提出 1975-1979 年,在 System R 上实现,由 IBM 的 San Jose 研究室研制,称为 Sequel. SQL 概述. SQL 用户. 用户 1. 用户 2. 用户 3. 用户 4. VIEW. 视图 V1. 视图 V1. Base Table.

elia
Download Presentation

第四章 SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 SQL

  2. 提纲 • SQL概述 • SQL数据定义功能 • SQL数据查询功能 • SQL数据修改功能 • SQL数据控制功能 • 嵌入式SQL

  3. SQL概述 • 历史 • SQL: Struceured Query Language • 1974年,由Boyce和Chamber提出 • 1975-1979年,在System R上实现,由IBM的San Jose研究室研制,称为Sequel

  4. SQL概述 SQL用户 用户1 用户2 用户3 用户4 VIEW 视图V1 视图V1 Base Table 基本表B1 基本表B2 基本表B3 基本表B4 存储文件S1 存储文件S2 存储文件S3 存储文件S4 Stored file SQL数据库体系结构

  5. SQL概述 • 标准化 • 有关组织 • ANSI(American Natural Standard Institute) • ISO(International Organization for Standardization) • 有关标准 • SQL-86 • “数据库语言SQL” • SQL-89 • “具有完整性增强的数据库语言SQL”,增加了对完整性约束的支持 • SQL-92 • “数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。 • SQL-3 • 正在讨论中的新的标准,将增加对面向对象模型的支持

  6. SQL概述 • 特点 • 一体化 • 集DDL,DML,DCL于一体 • 单一的结构----关系,带来了数据操作符的统一 • 面向集合的操作方式 • 一次一集合 • 高度非过程化 • 用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径 • 两种使用方式,统一的语法结构 • SQL既是自含式语言(用户使用),又是嵌入式语言(程序员使用) • 语言简洁,易学易用

  7. SQL概述

  8. 示例关系 DEPT(D# , DNAME , DEAN) S(S# , SNAME , SEX , BIRTHDAY , D#) COURSE(C# , CT , P# , CREDIT) SC(S# , C# , SCORE) PROF(P# , PNAME, AGE, D# , SAL) PC(P# , C#) 思考:这个关系模式的定义有没有问题?

  9. SQL数据定义功能 • 域定义 • 基本表的定义 • 索引的定义 • 数据库的建立与撤消 • SQL数据定义特点

  10. 域定义 • 域类型(SQL-92) • char(n):固定长度的字符串 • varchar(n):可变长字符串 • int:整数 • smallint:小整数类型 • numeric(p,d):定点数,小数点左边p位,右边q位 • real:浮点数 • double precision:双精度浮点数 • date:日期(年、月、日) • time:时间(小时、分、秒) • interval:两个date或time类型数据之间的差

  11. SQL SERVER2008数据类型

  12. SQL SERVER2008数据类型

  13. SQL SERVER2008数据类型

  14. 域定义 • 域定义 • 格式 create domain域名 数据类型 • 示例 create domain PNAME char(20) 类似C语言中: typedefADDRESS_LIST{ char name[10]; char telephone[20]; char location[20] char email[20]}; ADDRESS_LIST tom;

  15. 基本表的定义 • 基本表的定义(CREATE) • 格式 create table表名( 列名 数据类型 [default缺省值] [not null] [,列名 数据类型 [default 缺省值] [not null]] …… [,primary key(列名 [,列名] …)] [,foreign key(列名 [,列名] …) references表名 (列名 [,列名] …)] [,check(条件)])

  16. 基本表的定义 • 示例 CREATE TABLES ( S# CHAR(4), SNAME CHAR(8)NOT NULL, AGE SMALLINT, ;??? SEX CHAR(1), PRIMARY KEY (S#), CHECK (SEX=0 OR SEX=1) )

  17. 基本表的定义 CREATE TABLEC ( C# CHAR(4), CNAME CHAR(10)NOT NULL, TEACHER CHAR(8), PRIMARY KEY (C#), )

  18. 基本表的定义 CREATE TABLE SC (S# CHAR(4), C# CHAR(4), GRADE SAMLLINT, ;??? PRIMARY KEY (S#,C#), FOREIGN KEY (S#) REFERENCES S(S#), FOREIGN KEY (C#) REFERENCES C(S#), CHECK((GRADE IS NULL) OR GRADE BETWEEN 0 AND 100))

  19. 基本表的定义 • 示例 create domain PNAME char(20) create table PROF ( PNO char[10], person_name PNAME not null, SAL int, AGE int, DNO char[10], primary key (PNO), foreign key (DNO) references DEPT(DNO), check (SAL > 0))

  20. 基本表的定义 • 修改基本表定义(ALTER) • 格式: alter table表名 [add子句] 增加新列 [drop 子句] 删除列 [modify 子句] 修改列定义 • 示例 alter table PROF add LOCATION char[30]

  21. 基本表的定义 • 撤消基本表定义(drop) • 格式 drop table表名 • 示例 drop tableDEPT • DANGER 撤消基本表后,基本表的定义、表中数据、索引、以及由此表导出的视图的定义都被删除

  22. 索引的定义 • 索引的定义 • 格式 create [unique/distinct] [cluster] index索引名 on 表名 (列名 [asc/desc] [ , 列名asc/desc]]…) unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新 cluster:聚集索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引 asc/desc:索引表中索引值的排序次序,缺省为asc

  23. 索引的定义 • 示例: create cluster index s-index on S(S#) • 索引的删除 • 格式 drop index索引名

  24. 索引的定义 • 索引的有关说明 • 可以动态地定义索引,即可以随时建立和删除索引 • 不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性 • 应该在使用频率高的、经常用于连接的列上建索引 • 一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率

  25. 数据库的建立与撤消 有的数据库系统支持多库 • 建立一个新数据库 create database数据库名 • 撤消一个数据库 drop database数据库名 • 指定当前数据库 Open database数据库名 • 关闭当前数据库 close database数据库名

  26. SQL数据定义特点 • SQL中,任何时候都可以执行一个数据定义语句,随时修改数据库结构。而在非关系型的数据库系统中,必须在数据库的装入和使用前全部完成数据库的定义。若要修改已投入运行的数据库,则需停下一切数据库活动,把数据库卸出,修改数据库定义并重新编译,再按修改过的数据库结构重新装入数据 • 数据库定义不断增长(不必一开始就定义完整) • 数据库定义随时修改(不必一开始就完全合理) • 可进行增加索引、撤消索引的实验,检验其对效率的影响

  27. 设有一个供应商、零件、工程项目数据库SPP,并有如下关系:设有一个供应商、零件、工程项目数据库SPP,并有如下关系: Suppliers(SNO,SName,Status,City) Projects(PRNO,PRName,City) Parts(PARNO,PARName,Color,Weight) SPP(SNO,PRNO,PARNO,Qty) 试写出建表的SQL语句。

  28. SQL数据查询功能 • SQL数据查询基本结构 • select子句 • 重复元组的处理 • from子句 • where子句 • 更名运算 • 字符串操作 • 元组显示顺序 • 集合操作

  29. SQL数据查询功能 • 分组和聚集函数 • 空值 • 嵌套子查询 • 派生关系 • 视图 • 关系的连接

  30. SQL数据查询基本结构 • 基本结构 selectA1 , A2 , … , An fromr1 ,r2 , …, rm whereP  ∏A1 , A2 , … , An(p(r1  r2  …  rm))

  31. SQL数据查询基本结构 • 示例 给出所有老师的姓名 select PNAME from PROF

  32. select子句 • 目标列形式 可以为列名,* ,算术表达式,聚集函数 • “*”:表示“所有的属性” 给出所有老师的信息 select * from PROF

  33. select子句 • 带,, , 的算术表达式 给出所有老师的姓名及税后工资额 select PNAME,SAL  0.95 from PROF

  34. 重复元组的处理 • 语法约束 缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明 • 示例 找出所有选修课程的学生 selectdistinct SNO from SC

  35. from子句 • 说明 • from子句列出查询的对象表 • 当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系 • 示例 • 例:找出工资低于500的职工的姓名、工资、系别 select PNAME , SAL , DNAME from PROF , DEPT where SAL < 500 and PROF.DNO = DEPT.DNO

  36. from子句 • 例:列出教授“哲学”课程的老师的教工号及姓名 select PROF. PNO , PNAME from PROF , PC , COURSE where COURSE.CNAME = “哲学” and COURSE.CNO = PC.CNO and PC.PNO=PROF.PNO

  37. where子句 • 语法成分 • 比较运算符 • 、 、、、=、   • 逻辑运算符 • and,or,not • between条件 • 判断表达式的值是否在某范围内

  38. where子句 • 示例 • 列出工资在500~800之间的老师姓名 select PNAME from PROF where SAL between 500 and 800

  39. 更名运算 • 格式 old_name as new_name 为关系和属性重新命名,可出现在select和from子句中 注:as可选

  40. 更名运算 • 示例 • 属性更名 例:给出所有老师的姓名、所纳税额及税后工资额 select PNAME,SAL0.05 as taxi, SAL*0.95 as incoming from PROF

  41. 更名运算 • 关系更名 找出工资比所在系主任工资高的老师姓名及工资 select P1.PNAME,P1.SAL from PROF as P1,PROF as P2,DEPT where P1.DNO = DEPT.DNO and DEPT.DEAN = P2.PNO and P1.SAL > P2.SAL

  42. 字符串操作 • 命令格式 • 格式 列名 [not] like“字符串” 找出满足给定匹配条件的字符串

  43. 字符串操作 • 匹配规则 • “%” • 匹配零个或多个字符 • “_” • 匹配任意单个字符 • Escape • 定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待 • 如escape “\”,定义 \ 作为转义字符,则可用\%去匹配%,用\_去匹配_ 思考:用什么去匹配\ ?

  44. 字符串操作 • 示例 • 列出姓名以“张”打头的教师的所有信息 select * from PROF where PNAME like“张%”

  45. 字符串操作 • 列出名称中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的系的所有信息 select * from PROF where PNAME like“% _d \__”

  46. 元组显示顺序 • 命令 order by列名 [asc | desc] • 示例 • 按系名升序列出老师姓名,所在系名,同一系中老师按姓名降序排列 select DNAME,PNAME from PROF,DEPT where PROF.DNO = DEPT.DNO order by DNAME asc,PNAME desc

  47. 查询所有姓“张”,而且姓名是两个字的同学信息。查询所有姓“张”,而且姓名是两个字的同学信息。 • 查询所有姓“张”的同学信息。 • 查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出。 • 查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出,如果成绩相同,则按学号由小到大排列。

  48. 集合操作 • 命令 集合并:union 集合交:intersect 集合差: except • 提示 集合操作自动去除重复元组,如果要保留重复元组的话,必须用all关键词指明

  49. 集合操作 • 示例 • 求选修了001或(且)002号课程的学生号 (select SNO from SC where CNO = 001) union (intersect) (select SNO from SC where CNO = 002) 对于“且”,除了集合交意外还可以怎么写?

  50. 集合操作 • 求选修了001或002号而没有选003号课程的学生号 (select SNO from SC where CNO = 001 or CNO = 002 ) except (select SNO from SC where CNO = 003)

More Related