第6章 关系数据库标准语言—.ppt
第第6章章 关系数据库标准语言关系数据库标准语言SQL 本章要点:SQL语言的特点 SQL语言的组成 SQL的数据定义语句的使用 SQL的数据查询语句的使用 SQL的数据操纵语句的使用 SQL的数据控制语句的使用6.1 SQL语言概述 6.1.1 SQL语言的由来语言的由来 SQL即结构化查询语言,是Structured Query Language的缩写,是介于关系代数和关系演算之间的语言,它是在1973年由Boyce和Chambertin提出来的SQUARE(Specifying As Relation Expressions)的基础上修改而成的。6.1.2 SQL语言的特点语言的特点 1一体化特点 2高度的非过程化 3可用于客户/服务器结构 6.1.3 SQL语言的语句语言的语句 语言命令实现的功能DDLCREATE创建表DROP删除表ALTER修改表结构DQLSELECT查询数据库中满足指定条件的记录DMLINSERT向表中插入记录UPDATE修改表中记录的数据DELETE删除表中符合条件的记录DCLGRANT给用户授权REVOKE收回用户的权限DQL6.2 SQL的数据定义功能 6.2.1 基本表的建立、修改和删除基本表的建立、修改和删除 1建立表 格式:CREATE TABLE 表名 字段名1 数据类型说明NOT NULL索引1,字段名2 数据类型说明NOT NULL索引2,CONSTRAINT 复合字段索引,字段数据类型如下图:数据类型数据类型长度(字节)长度(字节)用途用途BIT1位位:表示Yes/No,True/FalseBINARY1二进制:对关联表进行查询时,可定义二进制数据LONGBINARY 不确定长二进制:不超过1GB,用于存放OLE对象、图形等BYTE1字节:表示数的范围为0255CHAR(N)N定长字符型:长度为N,每个字符占一个字节VARCHAR(N)不确定变长字符串:具有最大长度为N的变长字符串TEXT不确定字符型:每个字符占1个字节,不超过255个字符INTEGER2整型:表示数的范围为-3276832767SHORT2短整型:表示数的范围为-3276832767LONG4长整型:表示数据的范围为-21474836482147483647COUNTER4自动计数CURRENCY8货币型DATETIME8日期时间型SINGLE4单精度型DOUBLE8双精度型【例】创建以下四个表:学生(学号 CHAR(6),姓名 CHAR(8),年级 CHAR(2),专业CHAR(10))课程(课号CHAR(2),课名CHAR(20),开课教师 CHAR(8),总学时 INTEGER,学分INTEGER)必修课(课号CHAR(2),必修专业 CHAR(10))选课成绩(学号 CHAR(6),课号 CHAR(2),成绩 INTEGER)。解:创建表的语句分别如下:CREATE TABLE 学生(学号 CHAR(6)NOT NULL,姓名 CHAR(8),年级 CHAR(2),专业 CHAR(10)CREATE TABLE 课程(课号 CHAR(2)NOT NULL,课名 CHAR(20),开课教师 CHAR(8),总学时 INTEGER,学分 INTEGER)CREATE TABLE 必修课(课号 CHAR(2)NOT NULL,必修专业 CHAR(10)CREATE TABLE 必修课成绩(学号 CHAR(6)NOT NULL,课号 CHAR(2)NOT NULL,成绩 INTEGER)2修改表结构 (1)在基本表添加字段 格式:ALTER TABLE 表名 ADD COLUMN 字段名 类型长度NOT NULL 【例】在已定义的课程表中增加开课日期字段。解:语句如下:ALTER TABLE 课程 ADD COLUMN 开课学期 INTEGER(2)从基本表中删除字段 格式:ALTER TABLE 表名 DROP COLUMN 字段名【例】在已定义的课程表中删除开课日期字段。解:语句如下:ALTER TABLE 课程 DROP COLUMN 开课学期3删除表 格式:DROP TABLE 表名 6.2.3 索引的建立与删除索引的建立与删除 1建立索引 格式:CREATE UNIQUEINDEX 索引名 ON 表名(字段名1 DESC|ASC,字段名2 DESC|ASC,)WITH PRIMARY|DISALLOW NULL|IGNORE NULL 2删除索引 格式:DROP INDEX 索引名 ON 表名【例】删除必修课成绩表中的XH索引。解:使用的SQL语句如下:DROP INDEX XH ON 必修课成绩 6.3 SQL的数据查询功能 6.3.1 SELECT语句格式及功能说明语句格式及功能说明 格式:SELECT ALL|DISTINCT|TOP N|TOP N PERCENT*|列名1或表达式1 AS 列标题1 ,列名2或表达式2 AS 列标题2FROM 表名1 IN 数据库名1 别名1,表名2 IN 数据库名2 别名2 WHERE 条件 GROUP BY列名1,列名2HAVING 条件ORDER BY 列名1 ASC|DESC,列名2 ASC|DESC6.3.2 简单查询简单查询【例】列出全部课程信息。解:命令如下:SELECT*FROM 课程 执行结果【例】列出自动化专业的全部学生的学号、姓名和年级。解:命令如下:Select 学号,姓名,年级 from 学生 Where 专业=“自动化”【例】求“01”号课成绩在60分以上的学生的姓名和成绩。并按成绩由高到低排序。解:命令如下:Select 学号,成绩 From 必修课成绩 WHERE 课号=01 and 成绩=60 ORDER BY 成绩 DESC 6.3.3 连接查询连接查询 1多表连接查询 【例】查询出所有学生的必修课的学习情况,查询结果中包含学号、姓名、课号和成绩。解:使用的命令如下:SELECT 学生.学号,学生.姓名,必修课成绩.课号,必修课成绩.成绩FROM 学生,必修课成绩 WHERE 学生.学号=必修课成绩.学号 其实这种连接就是内部连接,可以使用INNER JOINON来实现,等价的语句如下:SELECT 学生.学号,学生.姓名,必修课成绩.课号,必修课成绩.成绩 FROM 学生 INNER JOIN 必修课成绩ON 学生.学号=必修课成绩.学号 上题执行结果【例】左外连接例。解:使用的命令如下:SELECT 学生.学号,学生.姓名,必修课成绩.课号,必修课成绩.成绩 FROM 学生 LEFT JOIN 必修课成绩 ON 学生.学号=必修课成绩.学号执行结果如下右图所示:【例】右外连接例。解:使用的命令如下:SELECT 学生.学号,学生.姓名,必修课成绩.课号,必修课成绩.成绩 FROM 学生 RIGHT JOIN 必修课成绩 ON 学生.学号=必修课成绩.学号执行结果如图:2自连接查询【例】求选修“01”号课程且成绩高于张萍萍的人的学号及成绩。解:使用的命令如下:SELECT X1.学号,X1.成绩 FROM 必修课成绩 X1,学生 S,必修课成绩 X2 WHERE X1.课号=X2.课号 and X1.课号=01 AND X1.成绩X2.成绩 and X2.学号=S.学号 AND S.姓名=张萍萍执行结果 6.3.4 嵌套查询嵌套查询 1返回单值的子查询 【例】列出所有选修了操作系统的学生的学号。解:使用的命令如下:SELECT 学号 From 必修课成绩;WHERE 课号=(Select DISTINCT 课号 FROM 课程 WHERE 课名=“操作系统”)2返回一组值的子查询 当子查询返回的值不止一个,则必须在WHERE子句中说明怎样使用这些返回值。使用的方式有三种,分别如下:(1)字段名|表达式 比较运算符 ANY|SOME|ALL(子查询结果集);(2)字段名|表达式 NOT IN(子查询结果集);(3)字段名|表达式 NOT EXISTS(子查询结果集)【例】求选修“01”号课的学生的学号和成绩,这些学 生的成绩比选修“02”号课的最低成绩要高。解:使用的命令如下:SELECT 学号,成绩 FROM 必修课成绩 WHERE 课号=01 and 成绩any(select 成绩 FROM 必修课成绩 WHERE 课号=02)执行结果【例】求选修了“01”号课的学生的学号和成绩,这些学生的成绩比选修了“02”课的任何学生的成绩都要高。解:使用的命令如下:SELECT 学号,成绩 FROM 必修课成绩 WHERE 课号=01 and 成绩ALL(SELECT 成绩 FROM 必修课成绩 WHERE 课号=02)执行结果:【例】查找“自动化”专业的所有必修课的设置情况。解:使用的命令如下:SELECT*FROM 课程 WHERE 课号 IN(SELECT 课号 FROM 必修课 WHERE 必修专业=自动化)执行结果:6.3.5 组函数查询组函数查询 常用的组函数有以下几种:AVG()求数值字段的平均值。COUNT()计算所选数据的行数,在分组统计中,用来计算每组数据的行数;其特殊形式是COUNT(*),用来统计满足WHERE子句中逻辑表达式的元组个数。MIN():求字符型、日期型或数值型字段的最小值。MAX():求字符型、日期型或数值型字段的最大值。SUM():计算数值列的总和。【例】列出各门课的平均成绩、最高成绩、最低成绩和选课人数。解:使用的命令如下:SELECT 课号,AVG(成绩)AS 平均成绩,MAX(成绩)AS 最高成绩,MIN(成绩)as 最低成绩,COUNT(学号)as 人数FROM 必修课成绩GROUP BY 课号 执行结果:【例】列出至少选修了三门课的学生姓名。解:使用的命令如下:SELECT 姓名 FROM 学生WHERE 学号 IN (SELECT 学号 FROM 必修课成绩 GROUP BY 学号 HAVING COUNT(*)=3)执行结果:6.4 SQL的数据操纵功能 6.4.1 插入记录插入记录 格式:INSERT INTO 表名(字段名1,字段名2,)VALUES(表达式1,表达式2,)【例】给学生表中插入两条记录,记录数据如下:学号 姓名 年级 专业 040501 朱碧春 计算机软件 040406 丁虹 04 经济管理 解:使用的命令如下:INSERT INTO 学生(学号,姓名,专业)VALUES(040501,朱碧春,计算机软件)INSERT INTO 学生 VALUES(040406,丁虹,04,经济管理)其中第二条命令等价于:INSERT INTO 学生(学号,姓名,年级,专业)VALUES(040406,丁虹,04,经济管理)6.4.2 修改记录修改记录 格式:UPDATE 表名 SET 字段名1=表达式1,字段名2=表达式2 WHERE 条件 【例】将必修成绩表中的“02”号课的所有成绩增加3分。解:使用的命令如下:UPDATE 必修课成绩 SET 成绩=成绩+3 WHERE 课号=“02”6.4.3 6.4.3 删除记录删除记录 格式:DELETE FROM 表名 WHERE 条件【例】从学生表中删除所有的“经济管理”专业的学生。解:使用的命令如下:DELETE FROM 学生 WHERE 专业=经济管理 6.5 视图的创建、删除与更新 6.5.1 再论视图再论视图 视图3视图1视图2表1表2表3表4 表与视图的关系 6.5.2 视图的创建视图的创建 格式格式:CREATE VIEW CREATE VIEW AS SELECT AS SELECT 语句语句WITH CHECK OPTION WITH CHECK OPTION【例例】为为教教务务管管理理数数据据库库建建立立一一个个名名为为软软件件学学生生的的视视图图,该该视视图图中中的的内容是所有的内容是所有的“计算机软件计算机软件”专业的学生。专业的学生。解:解:使用的命令如下:使用的命令如下:CREATE view CREATE view 软件学生软件学生 AS SELECT AS SELECT 学号学号 ,姓名姓名,年级年级 FROM FROM 学生学生 Where Where 专业专业=“=“计算机软件计算机软件”【例例】建建立立两两个个视视图图,名名为为“成成绩绩表表00”00”和和“成成绩绩表表01”01”,里里面面包包含含了所有了所有0000级或级或0101年级的学生学号、姓名、课名、成绩。年级的学生学号、姓名、课名、成绩。解:解:使用的命令如下:使用的命令如下:CREATE VIEW CREATE VIEW 成绩表成绩表00 AS Select X.00 AS Select X.学号学号,X.,X.姓名姓名,Y.,Y.课名课名,Z.,Z.成绩成绩FROM FROM 学生学生 X,X,课程课程 Y,Y,选课选课 Z ZWHERE X.WHERE X.年级年级=00 and X.=00 and X.学号学号=Z.=Z.学号学号 and Z.and Z.课号课号=Y.=Y.课号课号CREATE VIEW CREATE VIEW 成绩表成绩表01 AS Select X.01 AS Select X.学号学号,X.,X.姓名姓名,Y.,Y.课名课名,Z.,Z.成绩成绩FROM FROM 学生学生 X,X,课程课程 Y,Y,选课选课 Z ZWHERE X.WHERE X.年级年级=01 and X.=01 and X.学号学号=Z.=Z.学号学号 and Z.and Z.课号课号=Y.=Y.课号课号 6.5.3 视图的删除视图的删除 格式:DROP VIEW 【例】删除视图“成绩表00”。解:使用的命令如下:DROP VIEW 成绩表00 6.6 SQL的数据控制功能 6.6.1 使用权的授予使用权的授予 格式:GRANT|ALLOW|TO|PUBLIC WITH GRANT OPTION权限名称权限名称含义含义适用对象适用对象ALTER修改表的结构表DELETE删除记录表或视图INDEX使用CREATE INDEX命令创建索引表INSERT增加记录表或视图SELECT查询显示数据表或视图UPDATE修改数据表或视图6.6.2 使用权的收回使用权的收回 格式:REVOKE|ALL ON|FROM|ALL【例】将scoreadm用户拥有的对必修课成绩表的所有权限进行回收。解:使用的命令如下:REVOKE ALL ON 必修课成绩 FROM scoreadm 小结 本章主要讲解关系数据库的标准语言SQL语言,对其语言构成及各语句的功能进行了详细的阐述。包括SQL语言的数据定义功能、数据操纵功能、数据查询功能和数据控制功能。对于SQL语言的每一条语句都给出了实例,部分实例给出了运行结果。