1 / 77

Access2010 数据库案例教程

Access2010 数据库案例教程. 第 5 章 结构化查询语言 SQL. 本章选修. 学习要点( 本章内容学生可以自学 ). SQL 语言的基本概念、特点 SQL 语言的功能 SQL 语言的用法. 学习目标. 通过本章的学习,了解 SQL 语言及其标准的发展、 SQL 语言的特点及分类、视图相关语句,熟悉 SQL 语言中各种语句的语法,熟悉 SQL 数据定义语言( DDL )语句,掌握 SQL 语言中数据查询、数据操纵语言的详细语法,并能深刻理解、综合应用,以便为今后深层次的学习打下更加坚实的基础。. 重点难点. 重点:

madison
Télécharger la présentation

Access2010 数据库案例教程

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. Access2010数据库案例教程

  2. 第5章 结构化查询语言SQL 本章选修

  3. 学习要点(本章内容学生可以自学) • SQL语言的基本概念、特点 • SQL语言的功能 • SQL语言的用法

  4. 学习目标 通过本章的学习,了解SQL语言及其标准的发展、SQL语言的特点及分类、视图相关语句,熟悉SQL语言中各种语句的语法,熟悉SQL数据定义语言(DDL)语句,掌握SQL语言中数据查询、数据操纵语言的详细语法,并能深刻理解、综合应用,以便为今后深层次的学习打下更加坚实的基础。

  5. 重点难点 • 重点: • 1、SELECT命令的使用,如:使用SELECT命令实现基本查询、条件查询、嵌套查询、多表查询和连接查询。 • 2、查询结果的处理,输出重定向,查询结果的排序、查询分组和统计等。 • 3、用查询设计器构造SELECT语句。 • 难点: • 1、SELETE命令的使用。特别是条件查询、嵌套查询、多表查询和连接查询的实现。 • 2、查询结果的排序、分组和统计处理。

  6. 5.1 SQL语言概述 • SQL——Structured Query Language,结构化查询语言 • 1986年,由美国ANSI确定为关系数据库的标准语言。 • 1987年,ISO将其定为国际标准。 • 1989年,ISO提出了具有完整性特征的SQL,成为SQL89 • 1992年公布了SQL的新标准,即SQL-92。 • SQL99——SQL3

  7. SQL语言的特点 • SQL是一种结构一体化的语言。它包括了数据定义、数据查询、数据操纵和数据控制等功能,可以完成数据库活动中的全部工作。

  8. SQL语言的组成 • 数据定义:CREATE、DROP(删除)、 ALTER(修改) (删除某记录) • 数据操纵:INSERT、UPDATE、DELETE • 数据控制:GRANT、REVOKE • 数据查询:SELECT(选择工作区)

  9. SQL语言的组成 (1)数据定义语言(Data Definition Language,简称DDL) 用于定义SQL模式、基本表、视图和索引。 (2)查询语言(Query Language,简称QL) 用于数据查询。 (3)数据操纵语言(Data Manipulation Language,简称DML) 用于数据的增、删、修改。 (4)数据控制语言(Data Control Language,简称DCL) 用于数据访问权限的控制。

  10. 5.2 数据定义语言 • CREATE • ALTER • DROP

  11. 创建表 • 在CREATE TABLE中可以使用的数据类型及说明: • C、N 、 D 、 T 、L、M、G

  12. 创建表CREATE TABLE 定义基本表的语句格式为: CREATE TABLE<表名>( <属性名1 > <类型1>[NOT NULL] [UNIQUE] [,<属性名2><类型2] [NOT NULL] [UNIQUE] ]…) [其他参数]; • 例5-1:学生成绩数据库含有三张表: • 学生关系:S(SNO,SNAME,SEX, AGE, DNAME) • 课程关系:C(CNO, CNAME, CREDIT, PRE_CNO) • 选课关系:SC(SNO, CNO, SCORE) • 可用下列SQL语句来实现:

  13. 创建表CREATE TABLE CREATE TABLE S ( SNO CHAR(6) PRIMARY KEY, SNAME CHAR(8) NOT NULL, AGE SMALLINT, SEX CHAR(1), DNAME VARCHAR(12)); CREATE TABLE C ( CNO CHAR(2) NOT NULL, CNAME VARCHAR(24) NOT NULL, CREDIT SMALLINT, PRE_CNO CHAR(2), PRIMARY KEY(CNO)); CREATE TABLE SC ( SNO CHAR(6) NOT NULL, CNO CHAR(2) NOT NULL, SCORE SMALLINT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES S ON DELETE CASCADE, FOREIGN KEY(CNO) REFERENCES C ON DELETE NO ACTION);

  14. 创建表 • 例1、使用命令建立数据库XSK,用SQL命令在该库中建立STUDENT表,结构及要如下。

  15. 创建表 • 例2、在XSK中建立score表,结构如下。

  16. 修改表结构ALTER TABLE • 添加字段: • ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 [(宽度)] • 例:为SCORE表添加添加两个字段,“平时(N(5,1))”和“期中(N(5,1))”。

  17. 修改表结构 • 修改字段 • ALTER TABLE 表名 ALTER [COLUMN] 字段名 字段类型[(宽度)] • 例:在score中,修改“期末”字段为N(5,1)。

  18. 修改表结构 • 删除字段 • ALTER TABLE 表名 DROP [COLUMN] 字段名 • 例:在student表中,删除“是否党员”字段。

  19. 修改表结构 • 字段更名 • ALTER TABLE 表名 RENAME [COLUMN] 原字段名 TO 新字段名 • 例:在STUDENT表中,把“备注”字段名改为“其它情况”。

  20. 修改表结构 • 改变表的结构时,索引表达式、字段和表的有效性规则、命令、函数等等可能仍会引用原始字段名,因此有时不能执行命令。

  21. 删除表DROP TABLE • DROP TABLE 表名 • 执行了 DROP TABLE 之后,所有与被删除表有关信息都将丢失。 • 例:删除SCORE表。

  22. 5.3 数据操纵语言 • INSERT • DELETE • UPDATE

  23. 插入记录INSERT • INSERT INTO 表名 [字段名1,字段名2…] VALUE(表达式1,表达式2…) • 如果要插入表中所有字段的数据,可省略字段名。 • 如果省略了字段名,则必须按照表结构定义字段的顺序来指定字段值。 • 例1、向STUDENT表中添加记录。

  24. 插入记录 • INSERT INTO 表名 FROM ARRAY 数组名 • INSERT INTO 表名 FROM MEMVAR • 把内存变量的内容插入到与它同名的字段中。如果某一字段不存在同名的内存变量,则该字段为空。 • 例1、从数组向表中添加记录。 • 例2、利用内存变量向表中添加记录。

  25. 删除记录DELETE • DELETE FROM 数据库名 表名[WHERE 逻辑表达式1 AND|OR 逻辑表达式2] • 为指定的表中的记录加删除标记。如果要删除当前数据库中的表的记录,可省略数据库名,否则必须加上包含有该表的数据库名。在数据库名的后面、表名的前面包含感叹号 (!) 分隔符。 • 例:将STUDENT表中所有男生的记录删除。

  26. UPDATE • UPDATE 数据库名!表名 SET 字段名1=表达式1,字段名2=表达式2…WHERE 逻辑表达式1 AND|OR 逻辑表达式2 • 如果省略了 WHERE 子句,在列中的每一行都用相同的值更新。 • 例:将STUDENT表中所有99级学生的“入学年月”改为“1999/09/10”。

  27. 索引的建立和删除 • 建立索引的语句格式为: CREATE [UNIQUE] INDEX <索引名> ON 基本表名(<属性名1>[ASC|DESC] [,<属性名2>[ ASC|DESC]…]); 例如,对表S建立以下索引 CREATE UNIQUE INDEX SNO_INDEX ON S (SNO); CREATE UNIQUE INDEX SNAME_ADDR_INDEX ON S (SNAME ASC,HOSTADDR DESC); • 删除索引的语句格式: DROP INDEX <索引名>;

  28. 5.4 数据查询SELECT • SELECT …FROM…WHERE • 功能:从一个表或多个表中查询数据。 • SELECT指定查询哪些字段 • 使用WHERE子句限定记录 • 使用FROM子句限定表名 • 含义:根据WHERE子句的条件表达式,从FROM子句指定的表中找出满足条件的记录,再按SELECT子句中的字段表达式,选出记录形成结果表。

  29. 5.4 数据查询SELECT • 在VFP中,查询就是一个扩展名为QPR的查询文件,其中的内容就是一条SELECT语句。

  30. 5.4.1 基本查询 基本查询就是单表查询,: SELECT ALL|DISTINCT *|列表达式 FROM 学生 • ALL:查询结果中包含所有行 ( 包括重复值 ), 是默认设置。 • DISTINCT:在查询结果中剔除重复的行。 • 注意 每一个 SELECT 子句只能使用一次DISTINCT。 • *表示所有字段。 • 列表达式可以是字段名,表达式,字符串常量、函数等。

  31. 基本查询 • 例1:列出“学生”表中所有同学名单 • SELECT * FROM 学生 • 例2:列出成绩表中所有学生的学号,去掉重复值。 • SELECT DISTINCT 学号 FROM 成绩

  32. SELECT命令中的函数 • 例3、列出所有学生的学号,姓名和入学成绩,其中入学成绩四舍五入保留整数。 • SELECT 学号,姓名,ROUND(入学成绩,0) AS “入学成绩” FROM 学生 • AS :指定查询结果中列的标题。可省略。

  33. 例4、列出学生表中所有学生的年龄。 • SELECT 姓名, YEAR(DATE())-YEAR(出生日期) AS 年龄 FROM 学生 • 例5、求出学生总数。 • SELECT COUNT(*) FROM 学生 • 例6、查询选修了课程的学生人数。 • SELECT COUNT(DISTINCT 学号) FROM 成绩

  34. 课堂练习 • 1、查询全体学生的姓名、学号、专业。 • 2、查全体学生的姓名及其出生年份。 • 3、查询成绩表中的课号,去掉重复值。 • 4、查询成绩表中平时,期中,期末的平均成绩。

  35. 5.4.2 带条件查询 • WHERE子句可指定查询的条件。 • 格式:WHERE 条件表达式 AND|OR条件表达式2…

  36. WHERE——比较操作符 • 例1、查询所有的男生记录。 • SELECT * FROM 学生 WHERE 性别=“男” • 例2、求出计算机专业学生入学成绩的平均分。 • SELECT 专业,AVG(入学成绩) AS 入学成绩平均分 FROM 学生 WHERE 专业=“计算机”

  37. 例3、列出非计算机专业的学生名单。 • SELECT * FROM 学生 WHERE 专业<>“计算机” • 例4、统计计算机专业入学成绩在600分以上的学生的人数。 • SELECT COUNT(姓名) 人数 FROM 学生 WHERE 入学成绩>=600 AND 专业=“计算机”

  38. WHERE——IN • WHERE子句中的IN谓词用来确定查询的集合。 • 例1、查询计算机专业和外语专业的学生姓名和专业。 • SELECT 姓名,专业 FROM 学生 WHERE 专业 IN (“计算机”,“外语”) • 相当于 SELECT 姓名,专业 FROM 学生 WHERE 专业 =“计算机” OR 专业=“外语”)

  39. 例2、查询既不是计算机专业也不是外语专业的学生姓名和专业。例2、查询既不是计算机专业也不是外语专业的学生姓名和专业。 • SELECT 姓名,专业 FROM 学生 WHERE 专业 NOT IN (“计算机”,“外语”)

  40. WHERE——BETWEEN • WHERE子句中的BETWEEN运算符用来确定范围。 • 格式: • BETWEEN…AND…或NOT BETWEEN…AND • 其中BETWEEN后是范围的下限(低值),AND后是范围的上限(高值)。

  41. 例1、列出入学成绩在560分到600分之间的学生名单和成绩。例1、列出入学成绩在560分到600分之间的学生名单和成绩。 • SELECT 姓名,入学成绩 FROM 学生 WHERE 入学成绩 BETWEEN 560 AND 600 • 上述命令还可写成如下形式: • SELECT 姓名,入学成绩 FROM 学生 WHERE 入学成绩>=560 AND 入学成绩<=600

  42. WHERE—— LIKE • WHERE中的LIKE子句用来进行字符串的匹配。 • 格式:[NOT] LIKE “字符串” • 含义:查找指定的字段值中与匹配符相匹配的记录。 • 匹配符可以是字符串,也可以含有通配符。 • 例:查询学号为0108015的同学的详细情况 • SELECT * FROM 学生 WHERE 学号 LIKE “0108015”

  43. LIKE中的通配符 • % 0~任意多个字符 • _ 任意单个字符 • a%b可代表ab,acb,addgb… • A_b可代表acb,afb,akb等。

  44. LIKE中的通配符 • 例1、列出学生表中所有姓李的同学。 • SELECT 学号,姓名 FROM 学生 WHERE 姓名 LIKE “李%” • 例2、列出学生表中所有不姓李且姓名是两个字的同学名单 • SELECT 学号,姓名 FROM 学生 WHERE 姓名 NOT LIKE “李%” AND 姓名 LIKE “_ _”

  45. LIKE中的通配符 • 如果要查询的字符串本身就含有%或_,就要使用ESCAPE “换码字符”对通配符进行转义。 • 例:查询以DB_开头的课程的课程号和学分。 • SELECT 课号,学分 FROM 课程 WHERE 课名 LIKE “DB\_%” ESCAPE "\"

  46. 如果LIKE后面的匹配串中不含通配符,则可以用=取代LIKE,用<>取代NOT LIKE

  47. 涉及空值的查询 • 空值指不确定的值, 查询空值要使用 IS NULL,不能用比较运算符=NULL • 例1、列出成绩表缺少期末成绩的学生学号和课号 • SELECT 学号,课号 FROM 成绩 WHERE 期末 IS NULL • 例2、查询所有有期末成绩的学生学号和课号 • SELECT 学号,课号 FROM 成绩 WHERE 期末 IS NOT NULL

  48. 对查询结果排序 • 使用ORDER BY子句可以对查询结果按照一个或多个字段的值排序输出 • 语法:ORDER BY 排序选项1 [ASC|DESC][,排序选项2 ASC|DESC]… • 例1、按专业顺序列出学生的学号,姓名和专业,同一专业按学号排列。 • SELECT 专业,学号,姓名 FROM 学生 ORDER BY 专业,学号

  49. 只显示查询的前几项记录 • 使用TOP 表达式 [PERCENT]短语可以列出满足条件的前几个或前百分之几记录 • TOP短语要与ORDER BY同时使用才有效 • 例1、显示入学成绩最高的前五名同学的记录 • SELECT * FROM 学生 ORDER BY 入学成绩TOP 5 DCSC • 例2、显示入学成绩最高的前50%同学的记录 • SELECT * TOP 50 PERCENT FROM 学生 ORDER BY 入学成绩 DESC

  50. 对查询结果分组 • 使用GROUP BY子句可以对查询结果进行分组,分组的目的是为了细化统计函数的作用对象 • 语法:GROUP BY 分组选项 HAVING 条件 • 例1、统计各个课号及相应的选课人数 • SELECT 课号,COUNT(课号) 选课人数 FROM 成绩 GROUP BY 课号

More Related