1 / 85

非计算机应用专业教材

数据库原理与应用. 非计算机应用专业教材. 李明 科学出版社. [ 学习目标 ]. 了解视图定义、定义同义词和建立索引 ; 了解 SQL 数据控制功能包括用户授权、回收权限 ; 掌握数据库模式的建立和删除 ; 掌握基本表的定义、取消和基本表修改 ; 掌握 SQL 数据操纵功能 : 插入、更新和删除数据 ; 熟练掌握数据的查询。. 目 录. 6.1 SQL 概述 6.2 SQL 数据定义功能 6.3 SQL 数据操纵 6.4 SQL 数据查询 6.5 SQL 数据控制. 6.1 SQL 概述.

kermit
Download Presentation

非计算机应用专业教材

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. 数据库原理与应用 非计算机应用专业教材 李明 科学出版社

  2. [学习目标] • 了解视图定义、定义同义词和建立索引; • 了解SQL数据控制功能包括用户授权、回收权限; • 掌握数据库模式的建立和删除; • 掌握基本表的定义、取消和基本表修改; • 掌握SQL数据操纵功能:插入、更新和删除数据; • 熟练掌握数据的查询。

  3. 目 录 • 6.1 SQL概述 • 6.2 SQL数据定义功能 • 6.3 SQL数据操纵 • 6.4 SQL数据查询 • 6.5 SQL数据控制

  4. 6.1 SQL概述 • SQL是结构化查询语言(Structured Query Language)1974年由Boyce和Chamberlin提出的,并在IBM公司的关系数据库系统SystemR上得到实现。 • SQL92版本=SQL标准版本,标准分为3个级别: • 基本级 • 标准级 • 完全级

  5. SQL结构化查询语言主要特点: • 1)SQL是一种一体化的语言,它包括数据定义(DDL)、数据操纵(DML)和数据控制(DCL)等方面的功能。 • 2)SQL是一种高度非过程化的语言,它没有必要一步地告诉计算机“如何”去做,而只需描述清楚用户“要干什么”,而不需要指出“怎么去干”。SQL语言就可以交给系统,自动完成全部工作。

  6. 3)SQL语言非常简洁,其语法也简单,很接近自然语言,因此容易学习与掌握3)SQL语言非常简洁,其语法也简单,很接近自然语言,因此容易学习与掌握 • 4)SQL数据定义功能主要定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中外模式又叫视图(View),全局模式简称模式(Schema)或数据库(Database),内模式由系统根据数据库模式自动实现,一般无需用户过问。

  7. 5)SQL数据操纵功能包括对基本表和视图的数据查询、插入、删除和修改,特别是具有很强的数据查询功能。对于SQL的任何一种数据操纵,它的操作对象都是元组的集合,其操作结果也是元组的集合。5)SQL数据操纵功能包括对基本表和视图的数据查询、插入、删除和修改,特别是具有很强的数据查询功能。对于SQL的任何一种数据操纵,它的操作对象都是元组的集合,其操作结果也是元组的集合。 • 6)SQL数据控制功能主要是对用户的访问权限加以控制,以保证系统的安全性,

  8. 7)Visual FoxPro SQL方面支持数据定义、数据查询、数据操纵功能, • 8)SQL有两种使用方法:一种是以与用户交互的方式联机使用;另一种是作为子语言嵌入到其他程序设计语言中使用。前者称为交互式SQL,适合非计算机专业人员,即用户即席查询;后者称为宿主型SQL,适合于程序设计人员用高级语言编写应用程序(如C++)并与数据库打交道时,嵌入到主语言中使用,这两种使用方法的基本语法结构一致。

  9. 6.2 SQL数据定义功能 • SQL语言使用数据定义语言(简称DDL)实现数定义功能,可包括数据库、基本表、视图、索引进行定义和撤消,如表6.1所示命令归类表。

  10. 表6.1 数据库中的对象定义和撤消等归类表 • 对 象 创 建 扩展名 撤消/删除 修 改 打 开 • 数据库CREATE 库:DBC DROP MODIFY OPEN ATABASE • DATABASE 备注:DCT DELETE • 索引:DCX) • 基本表 CREATE DBF DROP ALTER USE • TABLE • 视图 CREATE VUX DROP ALTER USE、 • VIEW SELECT FROM • 索引 CREATE IDX、 DROP SET INDEX • INDEX CDX

  11. 6.3 SQL数据操纵 • 6.3.1 插入记录 • 向基本表中插入数据的命令有两种格式: • 1)是向具体元组插入常量数据; • 2)是把从子查询的结果输入到另一个关系中去。 • 前者进行单元组(一行)插入,后者一次可插入多个元组。

  12. (1)单元组插入 • 命令格式: • INSERT INTO[(数据库名)(基本表名)(〈列名〉,...)] • VALUES [(具体的记录值)] • 例6.1 :在学生表插入一个的学生数据: “502721161,张三,男,1984-0101,电子工程,1”。 • INSERT INTO学生(学生号,姓名,性别,出生日期,专业,年级) • VALUES (“502721161”,“张三”,“男”,{^1984-01-01},“电子工程”,1) • 日期型为(^YYYY-MM-DD);而列值为字符串时,必需用引号括起来,以区别于数值数据。

  13. 例6.2向图书基本表中新增加一个元组。 • 基本表图书所定义的关系模式结构是: • 图书(总编号,分类号,书名,作者,出版单位,单价), • INSERT INTO图书; • VALUES (“446943”,“TF31/138”,“计算机基础”,“须艳红”,“高等教育出版社”,12)

  14. 例6.3 向图书基本表中插入一个元组的部分字段。 • INSERT INTO图书(总编号,书名,单价); • VALUES(“44698088”,“据库原理及应用”,16 ∙ 50)

  15. 例6.3 向图书基本表中插入一个元组的部分字段。 • INSERT INTO图书(总编号,书名,单价); • VALUES(“44698088”,“据库原理及应用”,16 ∙ 50)

  16. (2)多元组插入 • 命令格式: • INSERT INTO [(数据库名)(基本表名)(列名),...] • 〈SELECT 子句〉

  17. 例6.4 现有学生表1其结构和例6.1例中学生表相同,若把学生表1中的男生(假若有多个元组)插入到学生表2中。 • INSERT INTO 学生2(学生号,姓名,性别,出生日期,专业,年级); • SELECT学生号,姓名,性别,出生日期,专业,年级; • FROM 学生表1; • WHERE性别=“男”

  18. (3)从指定的数组或内存变量来插入记录值 • 命令格式: • INSERT [ INTO ](数据库名)(基本表名)FROM ARRAY数组名| FROM MEMVAR • FROM ARRAY数组名:从指定的数组中插入记录值。 • FROM MEMVAR:根据同名的内存变量中插入记录值。

  19. 例6.5 FROM ARRAY的用法。 • USE 学生表1 • SCATTER TO arry1 • COPY STRUTURE TO学生表2 • INSERT INTO 学生表2 FROM ARRAY arry1 • SELECT 学生表2 • BROWSE • USE DELETE FILE学生表2.dbf

  20. 例6.6 FROM MEMVAR的用法。 • USE 学生表1 SCATTER MEMVAR COPY STRUTURE TO学生表2 • INSERT INTO学生表2 FROM MEMVAR SELECT 学生表2 BROWSE USE

  21. 6.3.2 修改记录 • 命令格式: • UPDATE[(数据库名)(所有者名)](目的表名) • SET(列名)=(表达式),... [(FROM源表名),...] [ WHERE(逻辑表达式)]

  22. 例6.7 假若学生表里若把每个学生的年级增加一年。 • UPDATE学生SET年级=年级+1 • 例6.8 将系名中“计算机科学与技术系”的改为“计算机科学系”。 • UPDATE学生 • SET系名=“计算机科学系” • WHERE系名=“计算机科学与技术系”

  23. 6.3.3 删除记录 • 删除命令比较简单,删除单位是元组,不是元组的部分属性。一次可以删除一个或几个元组,也可以将整个表删成空表,只保留表的结构定义。 • 命令格式: • DELETE [FROM] [(数据库名)(所有者名)](目的表名)[ FROM(源表名),...] [ WHERE(逻辑表达式)]

  24. 命令举例: • 例6.9 删除学号为“504720069”的学生。 • DELETE FROM学生WHERE学号=“504720069” • 例6.10 把学生表删成空表,只保留表的结构定义。 • DELETE 学生

  25. 6.4 SQL数据查询 • SQL基本查询模块的结构是: • SELECT (表达式l),(表达式2),…,(表达式 n); • FROM (关系1),(关系2),…,(关系m); • WHERE (条件表达式);

  26. 可用的逻辑运算符和谓词有: • AND逻辑与 OR逻辑或 NOT逻辑非 • IN包含 NOT IN不包含 • EXISTS存在 NOT EXISTS不存在 • UNION集合的并 • INTERSECT集合的交 • MINUS集合的差

  27. 6.4.1 简单查询 • 只涉及一个表的关系,在例子中逐渐引入一些短语。 • 例6.11 找出徐平所在的系名。 • SELEC 姓名,系名 FROM 学生 WHERE 姓名=“徐平”

  28. “*”列出全部属性名的用法。 • 例6.12 查看所有学生的全部情况。 • SELECT“*”; • FROM学生;

  29. (1)DISTINCT/ALL去掉重复的用法 • 例6.13 列出所有学生出生年月(去掉同岁) • SELECT DISTINCT 出生日期 FROM 学生; • 查询结果是:(和上图中比较,出生日期=04/23/83只取一个

  30. (2)ORDER BY排序子句的用法 • 例6.14 查找学生表中电子工程系的学生的姓名、系名和出生年月,结果按出生年月降序排列,年龄即从小到大排序。 • SELECT 姓名,系名,出生日期 FROM学生; • WHERE 系名=“电子工程系” ORDER BY 出生日期 DESC • ASC表示升序(缺省为升序)。DESC

  31. (3)特殊运算符LIKE通配符的用法 • 例6.15 查找姓名以“徐”打头的所有学生名。 • SELECT姓名,性别,系名,出生日期; • FROM学生WHERE姓名LIKE“徐%”;

  32. 例6.16 WHERE课程名LIKE“%数据库%”;包含“数据库”的书名。 • WHERE课程名LIKE“%数据库”;以“数据库”结尾的书名。 • WHERE姓名LIKE“%强 _ _”;姓名至少4个字符(两个汉字)且倒数第3个汉字是“强”字。

  33. (4)特殊运算符 • BETWEEN...AND...和NOT BETWEEN...AND...之间的用法。 • 例6.17 找学分在3和5之间的课程。 • SELECT课程号;课程名,学分 FROM 课程; • WHERE学分BETWEEN 3 AND 5; • SELECT课程号 ,课程名,学分 FROM 课程; • WHERE学分>=3 AND学分<=5;

  34. 例6.18 查找计算机科学与技术系和电子工程系的学生。 • SELECT 姓名,系名 FROM学生; • WHERE 系名 IN(“计算机科学与技术系”,“电子工程系”); WHERE系名=“计算机科学与技术系”OR系名=“电子工程系”;

  35. (6)为关系指定临时别名的用法 • 例6.19 检索课程号为A0074和A0184两门课程的学分。 • SELECT X.课程号,X.学分,Y.课程号,Y.学分; • FROM 课程X,课程Y; • WHERE X.课程号=“A0074”AND Y.课程号=“A0184”;

  36. 6.4.2 联接查询 • 1.SQL一般连接查询 • 以上介绍的只是简单的查询,只涉及到一个关系,如果查询要涉及到两个或几个关系,往往要进行联接运算。

  37. 图书管理关系数据模型包括以下3个关系模式

  38. 例6.20 查所有借阅了图书的读者姓名及所在单位 • SELECT DISTINCT读者,姓名,系名; • FROM读者,借阅; • WHERE读者.借书证号=借阅.借书证号;

  39. 例6.21 找出李兰波所借的所有图书的书名及借阅日期。 • SELECT姓名,“所借阅的图书:”,书名,借阅日期; • FROM图书,借阅,读者; • WHERE读者.借书证号=借阅.借书证号; • AND借阅.总编号=图书.总编号AND姓名=“李兰波”;

  40. 例6.22 查找已借出的价格在20元以上的图书,结果按单价降序排列。 • SELECT图书,总编号,书名,单价 FROM图书,借阅; • WHERE图书.总编号=借阅.总编号and单价>=22.00; • ORDERBY单价DESC;

  41. 2.超联接查询 • 上述介绍的是一般连接在SQL新版中称为中间连接,当然在新版中除中间连接外,还有左连接、右连接的和全连接功能,它们对应的语法格式如下: • SELECT ... • FROM(表名1)INNER | LEFT|RIGHT | FULL JOIN(表名2)ON联接条件 WHERE ...

  42. 1)中间连接格式: • FROM(表名1)INNER JION(表名2); • ON(表名1)(连接列名1)(比较符)(表名2)(连接列名2) • 2)左连接格式: • FROM(表名1)LEFT JOIN(表名2); • ON(表名1)(连接列名1)(比较符)(表名2)(连接列名2)

  43. 3)右连接格式: • FROM(表名1)RIGHT JOIN(表名2); • ON(表名1)(连接列名1)(比较符)(表名2)(连接列名2) • 4)全联接格式: • FROM(表名1)FULL JOIN(表名2); • ON(表名1)(连接列名1)(比较符)(表名2)(连接列名2) • 注:ON联接条件:指定联接条件(而不在WHERE中)。

  44. 例6.23 从教学库中查询出所有学生和选课情况, • 要求没选择任何课程的学生信息也反映出来。此查询需要使用左连接,其中学生表为左,即连接中的第一个表,选课表为右表,即连接中的第二个表。

  45. 例6.24 若要查询出所有课程被学生选修的情况 • SELECT * FROM课程 LEFT JOIN; • (选课 INNER JOIN 学生 ON 学生.学号=选课.学号); • ON课程.课程号=选课.课程号; • 该语句首先实现选课和学生关系的中间连接,产生出中间连接表,然后作为右表同课程关系连接,得到结果表如下:

  46. 例6.25 若要从教学库中查询出所有电子专业的学生选课的全部情况 • SELECT * FROM 课程 ; • INNER JOIN(选课INNER JOIN学生ON学生.学生号=选课.学生号)ON课程.课程号=选课.课程号; • WHERE系名=“电子工程系”;

  47. 6.4.3 嵌套查询 • 嵌套查询是指在SELECT—FROM—WHERE查询块内部再嵌入另一个查询块,称为子查询,并允许多层嵌套。 • 由于ORDER子句是对最终查询结果的表示顺序提出要求,因此它不能出现在子查询当中。

  48. 例6.26 找出借阅了“数据库基础与应用” • 用联接查询来完成: • SELECT姓名,系名 FROM图书,借阅,读者; • WHERE图书.总编号=借阅.总编号AND读者.借书证号= • 借阅.借书证号 AND 书名=“数据库基础与应用”

More Related