40
上上 上上 上上上上上上上 SQL SQL 是是是是是是是是 Structured Query Language 是是是5.1 SQL 是是是 5.2 SQL 是是是是是 5.3 SQL 是是是是是 5.4 SQL 是是是是是

结构化查询语言 SQL

  • Upload
    vangie

  • View
    130

  • Download
    5

Embed Size (px)

DESCRIPTION

结构化查询语言 SQL. SQL 是结构化查询语言 Structured Query Language 的缩写。 5.1 SQL 的特点 5.2 SQL 的查询功能 5.3 SQL 的定义功能 5.4 SQL 的操作功能. 5.1 SQL 的特点. SQL 语言具有如下主要特点: ① SQL 是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成与数据库相关的全部工作。 ② SQL 语言是一种高度非过程化的语言,用户只需要描述清楚要 “ 做什么 ” , SQL 语言就可以将要求交给系统,自动完成全部工作。 - PowerPoint PPT Presentation

Citation preview

Page 1: 结构化查询语言 SQL

上一张 结束目录

结构化查询语言 SQL SQL 是结构化查询语言 Structured Query Language 的缩写。 5.1 SQL 的特点5.2 SQL的查询功能5.3 SQL的定义功能5.4 SQL的操作功能

Page 2: 结构化查询语言 SQL

上一张 结束目录

5.1 SQL 的特点SQL 语言具有如下主要特点:① SQL 是一种一体化的语言,它包括了数据定义、数据查询、数据

操纵和数据控制等方面的功能,它可以完成与数据库相关的全部工作。② SQL 语言是一种高度非过程化的语言,用户只需要描述清楚要“

做什么”, SQL 语言就可以将要求交给系统,自动完成全部工作。③ SQL 语言非常简洁。④ SQL 语言可以直接以命令方式交互使用,也可以嵌入到程序设计

语言当中以程式方式使用。

Page 3: 结构化查询语言 SQL

上一张 结束目录

5.2 SQL 的查询功能 SQL 语句创建查询使用的是 Select 语句 Select [All|Distinct] < 字段名 1>|< 函数 > [, < 字段名 2>…… ] From < 表或查询 > [ [Left] [Right] Join < 表或查询 > On < 条件表达式 >] [Where < 条件表达式 >] [Order By < 排序选项 > [Asc] [Desc]] Group By < 分组字段名 > [Having < 条件表达式 >]]

Page 4: 结构化查询语言 SQL

上一张 结束目录

SELECT [ALL|DISTINCT] [TOP nExpr [PERCENT]][Alias.] Select_Item [AS Column_Name][ , Alias.]Select_Item[AS

Column_Name]…]FROM[FORCE][DatabaseName ! ]Table [AS] Local_Alias][[INNER | LEFT [OUTER] | RIGHT [OUTER ]|FULL [OUTER] JOINDatabaseName ! ]Table[ [AS] Local_Alias][ON joinCondition…][[INTO Destination]| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO S

CREEN]][PREFERENCE PreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHERE JoinCondition [AND JoinCondition…][AND | OR FilterCondition [AND | OR FilterCondition…]]][GROUP BY GroupColumn [ , GroupColumn…]][HAVING FilterCondition][UNION [ALL] SELECTCommand][ORDER BY Order_Item[ASC | DESC][ , Order_Item [ASC | DES

C]…]]

Page 5: 结构化查询语言 SQL

上一张 结束目录

5.2.1 简单查询 由 SELECT 和 FROM 短语构成无条件查询,或 由 SELECT,FROM 和 WHERE 短语构成条件查询。例 1 从 cj 表中检索所有同学的数学成绩。SELECT 学号 , 数学 FROM cj如果要去掉重复值只需要指定 DISTINCT 短语:SELECT DISTINCT 数学 FROM cj DISTINCT 短语的作用是去掉查询结果中的重复值

Page 6: 结构化查询语言 SQL

上一张 结束目录

例 2 检索 cj 表中的所有记录。SELECT * FROM cj例 3 检索数学成绩高于 80 分的所有记录。SELECT * FROM cj WHERE 数学 >80用 WHERE 短语指定了查询条件,查询条件可以是任意复杂的逻辑表达式。例 4 检索数学成绩高于 80 分而且英语成绩及格的所有记录。 SELECT * FROM cj WHERE 数学 >80 and 英语 >=60

Page 7: 结构化查询语言 SQL

上一张 结束目录

5.2.2 简单的联接查询联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。例 5 检索数学成绩和英语成绩都及格的所

有记录的学号,姓名和数学SELECT cj. 学号,姓名,数学 FROM xsqk,cj ; WHERE 数学 >=60 and 英语 >=60 And xsqk. 学号 =cj. 学号

Page 8: 结构化查询语言 SQL

上一张 结束目录

5.2.3 嵌套查询 查询的结果出自一个关系,但相关的条件却出自多个关系。例 6 查询选课成绩及格的学生的姓名SELECT 姓名 FROM xsqk WHERE 学号

in (sele 学号 from xk where 成绩 >=60)这个命令中含有两个 SELECT-FROM-WHERE 查询块,即内层查

询块和外层查询块,这里 IN 相当于集合运算符∈。

Page 9: 结构化查询语言 SQL

上一张 结束目录

例 7 查询所有选课成绩都不及格的学生的姓名。SELECT 姓名 FROM xsqk WHERE 学号 not in; (sele 学号 from xk where 成绩 >=60) 注意到刚才的检索出现了错误,没有选课学生的信息也被检索出来了。正确的 SQL 命令。SELECT 姓名 FROM xsqk WHERE 学号 not in; (sele 学号 from xk where 成绩 >=60) and 学号 in (sele 学号 from xk) 例 8 找出和学生“马大大”的身高相同的所有学生。SELECT 姓名 FROM xsqk WHERE 身高 = ; (SELECT 身高 FROM xsqk WHERE 姓名 =' 马大大 ')

Page 10: 结构化查询语言 SQL

上一张 结束目录

5.2.4 排序使用 SQL SELECT 可以将查询结果排序,排序的短语是 ORDER BY,可以按升序 (ASC) 或降序( DESC)排序,允许按一列或多列排序。例:

按学生的身高升序检索出全部学生信息。SELECT * FROM xsqk ORDER BY 身高 这里 ORDER BY 是排序子句,如果需要将结果按降序排列,只有加上 DESC 即可:SELECT * FROM xsqk ORDER BY 身高 DESC按学生的身高升序,身高相同的按体重降序检索出全部学生信息。这是一个按多列排序的例子,可以由如下语句完成:SELECT * FROM xsqk ORDER BY 身高 , 体重 desc 注意: ORDER BY是对最终的查询结果进行排序,不可以在子查询中使用该短语。

Page 11: 结构化查询语言 SQL

上一张 结束目录

5.2.5 简单的计算查询SQL 不仅具有一般的检索能力,而且还有计算方式的检索,比如检索的平均成绩、检索最高身高等。用于计算检索的函数及格式如下:COUNT(*) :计算记录个数SUM( 字段名 ) :求字段名所指定字段值的总和AVG( 字段名 ) :求字段名所指定字段的平均值MAX( 字段名 ) :求字段名所指定字段的最大值MIN( 字段名 ) :求字段名所指定字段的最小值

Page 12: 结构化查询语言 SQL

上一张 结束目录

找出学生中血型的种类。SELECT COUNT (DISTINCT 血型 ) FROM xsqk

求学生的数学成绩总和。SELECT SUM( 数学 ) FROM cj

求“ O” 型和“ B” 型血的学生的数学成绩总和。SELECT SUM( 数学 ) FROM cj WHERE 学号 IN ; (SELECT 学号 FROM xsqk WHERE 血型 ="B" OR 血型 ="O")

求“ O” 型和“ B” 型血的学生数学成绩的平均值SELECT avg( 数学 ) FROM cj WHERE 学号 IN ;(SELECT 学号 FROM xsqk WHERE 血型 ="B" OR 血型 ="O")

Page 13: 结构化查询语言 SQL

上一张 结束目录

5.2.6 分组与计算查询 上面例子是对整个表的计算查询,而利用 GROUP BY 子句进行分组计算查询使用得更加广泛。

求男同学和女同学的平均身高。SELECT 性别 ,avg(身高 ) FROM xsqk GROUP BY 性别

求 “ O” 型和“ B” 型血的男同学和女同学的平均身高。SELECT 血型 ,avg(身高 ) FROM xsqk ;WHERE 血型 ="B" OR 血型 ="O" GROUP BY 性别GROUP BY 子句一般跟在WHERE子句之后,没有 WHERE子句时,跟在 FROM子句之后。另外,还可以根据多个属性进行分组。在分组查询时,有时要求分组满足某个条件时才检索,这时可以用 HAVING子句来限定分组。

求各种血型 ( 每种血型至少有两个同学 ) 的同学的平均身高。SELECT 血型 ,avg(身高 ) FROM xsqk GROUP BY 血型 ; HAVING COUN(*)>=2

Page 14: 结构化查询语言 SQL

上一张 结束目录

5.2.7 内外层互相关嵌套查询有时需要内、外层互相关的查询,这时内层查询的条件需要外层查询

提供值,而外层查询的条件需要内层查询的结果。列出每个学生选课成绩最高分的记录。

SELECT * from xk out where 成绩 =; (SELECT MAX( 成绩 ) FROM xk Intr WHERE out. 学号 =intr. 学号 )在这个查询中,外层查询和内层查询使用同一个表,给它们分别指定

别名 out 和 intr ,外层查询提供 out 中每个记录的学号给内层查询使用;内层查询利用这个学号值,确定该学生的选课成绩最高分;随后外层查询再根据 out 表的同一记录的选课成绩与该最高分进行比较,如果相等,则该记录被选择。

Page 15: 结构化查询语言 SQL

上一张 结束目录

5.2.8 使用量词和谓词的查询前面已经使用过和嵌套查询或子查询有关的 IN 和 NOT IN 运算符,

除此之外还有两类和子查询有关的运算符,它们有以下两种形式: < 表达式 > < 比较运算符 > ANY|ALL|SOME] (子查询) [NOT] EXISTS (子查询)ANY、 ALL 和 SOME 是量词。EXISTS 是谓词, EXISTS 或 NOT EXISTS 是用来检查在子查询中是

否有结果返回,即存在记录或不存在记录。

Page 16: 结构化查询语言 SQL

上一张 结束目录

在表 xsqk 中检索没有选课学生的信息。SELECT * FROM xsqk WHERE NOT EXISTS ; (SELECT 学号 FROM xk where xk. 学号 =xsqk. 学号 )以上的查询等价于:SELECT * FROM xsqk WHERE 学号 NOT IN ; (SELECT 学号 FROM xk )以上查询也可以使用量词如下:SELECT * FROM xsqk WHERE 学号 <>all ; (SELECT 学号 FROM xk where xk. 学号 =xsqk. 学号 )

Page 17: 结构化查询语言 SQL

上一张 结束目录

在表 xsqk 中检索有参加选课学生的信息。这个查询可以使用 EXISTS 或 ANY 、 SOME 。SELECT * FROM xsqk WHERE EXISTS ; (SELECT 学号 FROM xk where xk. 学号 =xsqk. 学号 )或:SELECT * FROM xsqk WHERE 学号 = any ; (SELECT 学号 FROM xk where xk. 学号 =xsqk. 学号 )

Page 18: 结构化查询语言 SQL

上一张 结束目录

检索选课成绩大于学号为“ 1161003” 的最低选课成绩的所有学生的学号。这个查询可以使用 ANY或 SOME量词。SELECT DISTINCT 学号 FROM xk WHERE 成绩 >any ;(SELECT 成绩 FROM xk where 学号 ='1161003') 或:SELECT DISTINCT 学号 FROM xk WHERE 成绩 >some ;(SELECT 成绩 FROM xk where 学号 ='1161003')它等价于:SELECT DISTINCT 学号 FROM xk WHERE 成绩 >;(SELECT min( 成绩 ) FROM xk where 学号 ='1161003')

Page 19: 结构化查询语言 SQL

上一张 结束目录

5.2.9 超联接查询在一般 SQL 中超连接运算苻 “ *=” 和“ =*” 。其中“ *=”称为左连

接,含义是输出包含第一个表中满足条件的所有记录,如果第二个表在连接条件上有匹配记录,则第二个表反回相应值,否则第二个表反回空值。

注意: VISUAL FOXPOR不支持超级联接运算符 “ *=” 和“ =*” , VISUAL FOXPOR 有专门的联接运算语法格式如下:

SELECT 字段表达式表 FROM 表 1 INNER |LEFT| RIGHT |FULL JOIN 表 2 ON 连接条件 WHERE……其中, INNER JOIN 等价于 JOIN ,为普通联接; LEFT JOIN称为左联接

; RIGHT JION称为右联接; FULL JION 可以称为全联接,即两个表的记录不管是否满足联接条件都在目标表或查询表中出现。

Page 20: 结构化查询语言 SQL

上一张 结束目录

输出 cj 表和 xsqk 表的学号及姓名,使用普通联接。SELECT cj. 学号 ,xsqk. 学号 , 姓名 FROM cj join xsqk on cj. 学号 =x

sqk. 学号输出 cj 表和 xsqk 表的学号及姓名,使用左联接。

SELECT cj. 学号 ,xsqk. 学号 , 姓名 FROM cj LEFT join xsqk on cj. 学号 =xsqk. 学号

输出 cj 表和 xsqk 表的学号及姓名,使用右联接。SELECT cj. 学号 ,xsqk. 学号 , 姓名 FROM cj RIGHT join xsqk on cj.

学号 =xsqk. 学号

Page 21: 结构化查询语言 SQL

上一张 结束目录

5.2.10 集合的并运算SQL支持集合的并 (UNION) 运算,即可以将两个 SELECT 语句的查询

结果通过并运算合成一个查询结果。为了进行并运算,要求这样的两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域。

输出数学成绩大于 80 分和小于 70 分的记录。sele * from cj where 数学 >80 union ; sele * from cj where 数学 <70

Page 22: 结构化查询语言 SQL

上一张 结束目录

5.2.11 SQL SELECT 的几个特殊选项 只显示前几项记录 (TOP 短语要与 ORDER BY 短语同时使用 )

按学生的身高降序检索出身高最高的 3 位学生信息。 SELECT * top 3 FROM xsqk ORDER BY 身高 desc

按学生的身高降序检索出身高最高的 3 成学生信息。SELECT * top 30 percent FROM xsqk ORDER BY 身高 desc

Page 23: 结构化查询语言 SQL

上一张 结束目录

将查询结果存放到永久表中 SELECT * top 3 FROM xsqk ORDER BY 身高 desc into dbf xs3

将查询结果存放在临时文件中SELECT * top 3 FROM xsqk ORDER BY 身高 desc into cursor xs3cur

将查询结果存放在文本文件中SELECT * top 3 FROM xsqk ORDER BY 身高 desc to file xs3

将查询结果送到打印机打印SELECT * top 3 FROM xsqk ORDER BY 身高 desc to printer

查询结果存到数组中 SELECT * FROM cj INTO ARRAY tmp

Page 24: 结构化查询语言 SQL

上一张 结束目录

5.3 SQL 的定义功能5.3.1 表的定义 标准 SQL 的数据定义功能非常广泛,一般包括数据库的

定义,表的定义,视图的定义,存储过程的定义,规则的定义和索引的定义等若干部分。在本节将主要介绍 Visual Foxpro支持的定义功能和视图定义功能。

Page 25: 结构化查询语言 SQL

上一张 结束目录

CREATE TABLE |DBF < 表名 1> [FREE] (< 字段名 1> 类型 [( 长度 [, 小数位数 ]) [CHECK 逻辑表达式 l [ERROR 字符表达式 1]] [DEFAULT 表达式 l][PRIMARY KEY|UNIQUE][REFERENCES 表名 2 [TAG 索引名 l]][,< 字段名 2>…][,PRIMARY KEY 表达式 2 TAG 索引名 2|,UNIQUE 表达式 3 TAG 索引名 3][,FOREIGN KEY 表达式 4 TAG 索引名 4REFERENCES 表名 3 [TAG 索引名 5]][,CHECK 逻辑表达式 2 [ERROR 字符表达式 2]])

Page 26: 结构化查询语言 SQL

上一张 结束目录

建立表 xsqk1.dbf (结构和表 xsqk.dbf 类似)。create table xsqk1 (xh c(7),xm c(8),rq d ,sg n(4,2),ty l,bz m,zp g)

建立表 xsqk2.dbf (结构和表 xsqk.dbf 类似),要求建立主关键字等。

只有数据库表才能建立主索引,所以建立表之前先建立数据库 ABC 。CREATE DATABASE ABCCREATE table xsqk2 (xh c(7) primary key ,xm c(8),rq date ,sg n(4,2) ;check sg>1.5 error " 身高应该大于 1.5 米 " default 1.7, ty l,bz m,zp g)

建立表 cj2.dbf ,要求该表有字段 xh ,并以 xh 字段与表 xsqk2.dbf 建立关联。

CREATE table cj2 (xh c(7) ,sx n(3),yy n(3), ;foreign key xh tag xh references xsqk2)

Page 27: 结构化查询语言 SQL

上一张 结束目录

5.3.2 表的删除删除表的 SQL 命令是:DROP TABLE 表名

Page 28: 结构化查询语言 SQL

上一张 结束目录

5.3.3 表结构的修改修改表结构的命令是 ALTER TABLE ,该命令有三种格式。格式 1 :ALTER TABLE 表名 1 ADD | ALTER [COLUMN] 字段名 1 字段类型

[( 字段宽度 [,小数位数 ])] [NULL | NOT NULL][CHECK 逻辑表达式 1 [ERROP 字符表达式 1]][DEFAULT 表达式 1][PRIMARY KEY | UNIQUE][REFERENCES 表名 2 [TAG 索引名 1]]该命令可以修改字段的类型、宽度、有效性规则、错误信息、默认值

,定义主关键字和联系等;

Page 29: 结构化查询语言 SQL

上一张 结束目录

把表 xsqk1.dbf 的 xm 字段的宽度改为 12 , sg 字段改为 n(5,2) 。

alter tabl xsqk1 alter xm c(12) alter sg n(5,2)给表 xsqk1.dbf 增加字段 dz c(20) 及 df c(8) 。

alter tabl xsqk1 add dz c(20) add df c(8)

Page 30: 结构化查询语言 SQL

上一张 结束目录

格式 2 :ALTER TABLE 表名 1 ALTER [COLUMN] 字段名 2 [SET DEFAULT

表达式 2] [SET CHECK 逻辑表达式 2 [ERROR 字符表达式 2]][DROP DEFAULT] [DROP CHECK]从命令格式可以看出,该格式主要用于定义、修改和删除有效性规

则和默认值定义。把表 xsqk1.dbf 的 sg 字段的有效性规则修改为“ sg>1”

。ALTER TABLE xsqk1 ALTER sg SET CHECK sg>1

删除表 xsqk1.dbf 的 sg 字段的有效性规则。ALTER TABLE xsqk1 ALTER sg DROP CHECK

Page 31: 结构化查询语言 SQL

上一张 结束目录

格式 3 :ALTER TABLE 表名 1 [DROP [COLUMN] 字段名 3][SET CHECK 逻辑表达式 3 [ERROR 字符表达式 3]][DROP CHECK][ADD PRIMARY KEY 表达式 3 TAG 索引名 2 [FOR 逻辑表达式 4]][DROP PRIMARY KEY][ADD UNIQUE 表达式 4 [TAG 索引名 3 [FOR 逻辑表达式 5]]][DROP UNIQUE TAG 索引名 4][ADD FOREIGN KEY [ 表达式 5] TAG TagName4 [FOR 逻辑表达式 6]REFERENCES 表名 2 [TAG 索引名 5]][DROP FOREIGN KEY TAG TagName6 ][RENAME COLUMN 字段名 4 TO 字段名 5]该格式可以删除字段( DROP [COLUMN])、可以修改字段名( RENAME COLUMN)、可以定义、修改和删除表一级的有效性规则等。

Page 32: 结构化查询语言 SQL

上一张 结束目录

将表 xsqk1.dbf 的 sg 字段名改为“身高”。ALTER TABLE xsqk1 RENAME COLUMN sg TO 身高删除表 xsqk1.dbf 的 dz 及 df 字段。alter tabl xsqk1 drop dz drop df

Page 33: 结构化查询语言 SQL

上一张 结束目录

5.3.4 视图的定义及删除CREATE VIEW view_name [( 字段名 1[, 字段名 2]...)]

AS select_statement其中 select_statement 可以是任意的 SELECT 查询语

句,它说明和限定了视图中的数据;当没有为视图指定字段名时,视图的字段名将与 select_statement 中指定的字段名或表中的字段名同名。

Page 34: 结构化查询语言 SQL

上一张 结束目录

从 xsqk 表中选择学号和姓名字段建立视图vxsqk 。CREATE VIEW vxsqk AS;SELECT 学号 , 姓名 FROM xsqk上面是限定列构成的视图,可以用 WHERE限定行定义一个视图。例如:CREATE VIEW vxsqk1 AS ;SELECT 学号 , 姓名 FROM xsqk WHERE 身高 >1.7

从 xsqk 表和 cj 表中选择学号、姓名和总分字段建立视图 vxsqkcj 。CREATE VIEW vxsqkcj AS;SELECT cj. 学号 , 姓名 , 总分 FROM xsqk ,cj WHERE cj. 学号 =xsqk. 学号

Page 35: 结构化查询语言 SQL

上一张 结束目录

5.4 SQL 的操作功能SQL 的操作功能是指对数据库中数据的操作功能,主要包括数据的

插入、更新和删除三个方面的内容。5.4.1 插入 格式 1 :Insert Into < 表名 > [ (< 字段名 1> [, < 字段名 2>……]) ]Values (< 表达式 1> [, < 表达式 2>……])格式 2 :INSERT INTO < 表名 > FROM ARRAY 数组名 |FROM MEMVAR

Page 36: 结构化查询语言 SQL

上一张 结束目录

建立表 xsqk3.dbf ,然后给表增加姓名为“张三”的一条记录。CREATE table xsqk3 (xh c(7) primary key ,xm c(8),rq date ,sg n(4,2) )inser into xsqk3 (xm,xh,sg) values(' 张三 ','1161005',1.8)上面的命令插入的不是完整的记录,所以要指定字段。下面的例子是插

入一条完整的记录。给表 xsqk3.dbf 增加姓名为“王五”的一条完整记录。

inser into xsqk3 values('1161006',' 王五 ',date(), 1.7)

Page 37: 结构化查询语言 SQL

上一张 结束目录

5.4.2 更新SQL 的数据更新命令格式如下:Update < 表名 > Set < 字段名 1>=< 表达式 1> [, < 字段名 2>=< 表达式 2>……] [Where < 条件表达式 >]一般使用 WHERE子句指定条件,以更新满足条件的一些记录的字段值,并且一

次可以更新多个字段;如果不使用 WHERE子句,则更新全部记录。把 xsqk4 表中姓名为“张三”的记录改名为“李四”,其身高改为 2米。

updat xsqk4 set xm=' 李四 ',sg=2 wher xm=' 张三 'BROWSE &&用 BROWSE 命令验证更新的结果

Page 38: 结构化查询语言 SQL

上一张 结束目录

5.4.3 删除SQL从表中删除数据的命令格式如下:Delete From < 表名 > [Where < 条件表达式 >] 这里 FROM 指定从哪个表中删除, WHERE 指定被删除

的记录所满足的条件,如果不使用 WHERE子句,则删除该表中的全部记录。

删除 xsqk4 表中姓名为 “李四”的记录。Dele from xsqk4 wher xm=' 李四 '

Page 39: 结构化查询语言 SQL

上一张 结束目录

本 节 要 点 熟练掌握查询命令 SELECT 的使用方法。了解 SQL 的定义功能。了解 SQL 的操作功能。

Page 40: 结构化查询语言 SQL

上一张 结束目录