当前位置:文档之家› SQL结构化查询语言

SQL结构化查询语言

SQL结构化查询语言
SQL结构化查询语言

幻灯片1

第4章SQL结构化查询语言

4.1 SQL简介

SQL是在20世纪70年代末由IBM公司开发出来的一套程序语言,并被用在DB2关系数据库系统中。但是,直到1981年,IBM推出商用的SQL/DS关系型数据库系统;Oracle及其他大

型关系型数据库系统相继出现,SQL才得以广

泛应用。例如,Sybase 与Microsoft公司使

用T(transact)-SQL,而Oracle公司使用

PL/SQL。

幻灯片2

4.1 SQL简介

SQL的发展

1974年提出,在SYSTEM R上实现。

1986年10月,ANSI定为关系数据库语言的美国标准,并公布了标准SQL。

1992年通过的修改标准SQL---92(简称SQL2)。1999年--- SQL99标准。

2003年--- SQL2003标准。

幻灯片3

4.1 SQL简介

SQL( Structured Query Language)称为结构化

查询语言,它集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL于一体。

SQL已成为关系型数据库的标准查询语言。

幻灯片4

4.1 SQL简介

SQL语言是应用于数据库的语言,本身是不能独立存在的。它是一种非过程性(non-procedural) 语言,与一般的高级语言(如C、JAVA)不同。一般的高级语言在存取数据库时,需要依照每一行程序的顺序处理许多的动作。但是使用SQL时,只需告诉数据库需要什么数据,怎么显示就可以了。具体的内部操作则由数据库系统来完成。

幻灯片5

4.1 SQL简介

SQL的分类

DDL(数据定义语言):用于定义数据库对象(数据库、表、视图、索引)。如create,drop,alter;

DML(数据操纵语言):用于对表或视图进行添加、删除和修改等操作,如insert,update,delete。

DQL (数据查询语言) :用于从数据库中检索数据。如select。

DCL(数据控制语言):用于控制用户对数据库的存取能力。如grant,deny,revoke。

幻灯片6

4.1 SQL简介

SQL语言的主要特点是:

SQL语言是一种一体化的语言,提供了完整的数据定义和操纵功能。

SQL语言具有完备的查询功能。

SQL语言非常简洁,易学易用。

SQL语言是一种高度非过程化的语言。

SQL语言的执行方式多样。

SQL语言不仅能对数据表进行各种操作,也可对视图进行操作。

幻灯片7

4.2 Select 语句

查询是SQL的核心。用于表达查询的SELECT

语句是功能最强也是最复杂的SQL语句。它

可以实现各种查询,还能进行统计、结果排

序等。

幻灯片8

4.2.1 SELECT语句格式

SELECT [谓词] [表别名.] SELECT 表达式[ AS 列别名][,[[表别名.] SELECT 表达式[ AS 列别名]…]

[INTO 新表名][IN 库名]

FROM 表名[AS 表别名]

[[INNER|LEFT|RIGHT|JOIN{{<表名>][AS 表别名]

[ON 联接条件]]…] [IN 库名]

[WHERE 逻辑表达式]

[GROUP BY 分组字段列表]

[HAVING 过滤条件]

[UNION [ALL] SELECT语句]

[ORDER BY 排序字段[ASC | DESC] [,排序字段[ASC | DESC] ...]]

幻灯片9

4.2.1 SELECT语句格式

SELECT语句的完整格式中包括6个子句。SELECT和

FROM子句是必须的,其它子句任选。

SELECT子句列出所有要求SELECT语句检索的数据

项。这些项可以取自数据库中的字段,也可以是SQL

在执行查询时计算出的列。

FROM子句列出包含所要查询数据的表。

WHERE子句告诉SQL只查询某些行中的数据,这些

行用逻辑表达式描述。

GROUP BY子句将结果按<分组字段列表>的值进行

分组,该值相等的记录为一个组。

幻灯片10

StudentNo int PRIMARY KEY IDENTITY(1,1)

4.2.1 SELECT语句格式

HAVING子句告诉SQL只产生由GROUP BY 得到的

某些组的结果。

ORDER BY子句将查询结果按一列或多列中的数据

排序。

幻灯片11

4.2.1 简单查询

1、SELECT子句

用于指定在查询结果中包含的字段、常量和表达式。

① [表别名]:在FROM子句中给表取别名,主要用于当不同的表中存在同名字段时区别数据来源表。

② SELECT表达式:是用户要查询的内容。如果多个字段用逗号分割。内容可以是字段名,也可以是函数(系统及自定义函数),还可以是* ,表示输出表中的所有

字段。

幻灯片12

4.2.1 简单查询

③[谓词]:指定查询选择的记录,可取ALL 、DISTINCT 、DISTINCTROW、TOP n [PERCENT]

谓词

说明

例子

SELECT ALL 学号 FROM

显示查询结果中全部数据

学生选课

ALL

忽略在选定字段中包含重复数

SELECT DISTINCT 学号

据的记录。

FROM 学生选课

DISTINCT

SELECT DISTINCTROW 学

忽略整个重复记录的数据,而

不仅仅是重复的字段。SELECT DISTINCTROW 学

号 FROM 学生选课

DISTINCTROW

返回在一定范围内的一定数量

的记录。

SELECT TOP 5 学号 FROM

学生选课

TOP n

[PERCENT]

幻灯片13

4.2.1 简单查询

1、SELECT子句

例如:

select 学号,姓名,性别 from 学生

select * from 课程

select 学生.学号, 学生.姓名, 专业.专业名称 FROM 学生,专业 where 学生.专业编号 =专业.专业编号select 学号,姓名,性别,year(出生日期) as 出生年份 from 学生

幻灯片14

4.2.1 简单查询

2、FROM子句

用于指定在查询的表名,并给出表别名。

①[表名] [AS 表别名]:为表指定一个临时别名。若指定了别名,则整个SELECT语句中必须使用这个别名代

替表名。

② INNER JOIN:规定内连接。只有在被连接的表中

有匹配的记录才会出现在查询结果中。

幻灯片15

4.2.1 简单查询

③LEFT JOIN:规定左外连接。JOIN左侧表中的所

有记录及JOIN右侧表中匹配的记录才会出现在查询结果中。

④RIGHT JOIN:规定右外连接。JOIN右侧表中的所

有记录及JOIN左侧表中匹配的记录才会出现在查询结果中。

⑤[ON 连接条件]:指定连接条件。

⑥[IN 库名]:指定表所在的库。省略表示当前库。

! SQL查询的结果总是一个数据表。

幻灯片16

4.2.1 简单查询

例如:

SELECT 学生.姓名, 学生.性别, 专业.专业名称FROM 专业 INNER JOIN 学生 ON 专业.专业编号

= 学生.专业编号;

SELECT 学生.姓名, 学生.性别, 学生.专业编号FROM 学生 INNER JOIN 学生选课 ON 学生.[学号] = 学生选课.[学号] ;

SELECT 学生.姓名, 学生.性别, 学生.专业编号FROM 学生 LEFT JOIN 学生选课 ON 学生.[学号] = 学生选课.[学号] WHERE (((学生选课.学号) Is Null));

幻灯片17

4.2.1 简单查询

3.单表查询

最简单的查询是从单表中请求得到数据列的值(1) 选择需要的列

SELECT * FROM 学生

SELECT 姓名,出生日期, 性别 FROM 学生SELECT ALL * FROM 学生选课

幻灯片18

4.2.1 简单查询

(2) 列计算

SELECT 学号, 平时成绩*0.3+考试成绩*0.7 as

学期成绩FROM 学生选课

幻灯片19

4.2.1 简单查询

(3) 重复行

在“学生选课”表中列出所有选课的学生学号。

SELECT DISTINCT 学号FROM 学生选课

! “学生选课”表中存储着选课学生的学号,有些学生同时选了几门课,如果直接用SELECT选取就会出

现重复记录。因此,加DISTINCT可去掉重复行。

幻灯片20

4.2.1 简单查询

4. WHERE 子句

指定查询条件。只将满足逻辑表达式的数据作

为查询结果。如果不加WHERE 子句,则所有

数据都作为查询结果。

幻灯片21

4.2.1 简单查询

(1) 逻辑表达式

逻辑表达式一般包括连接条件和过滤条件。

(1)连接条件用于当从多个表中进行数据查询时,指定

表和表之间的连接字段,也可以在FROM的ON子句中

指定连接条件。格式为:

别名1.字段表达式1=别名2.字段表达式2

幻灯片22

4.2.1 简单查询

(2) 过滤条件用于对数据进行筛选时指定筛选条件。

格式为:

别名.字段表达式=值

幻灯片23

4.2.1 简单查询

查询条件

关系条件

复合条件

确定范围

所用符号或关键字=,>,>=,<,<=,=,<>

NOT,AND,OR

BETWEEN… AND (或 NOT BETWEEN…

AND )

包含子项

IN

(或NOT IN)

字符匹配

字符串表达式 [NOT] LIKE <模式> 幻灯片24

4.2.1 简单查询

(2) 有条件查询

(1) 列出2009级学生的学号、姓名等信息。SELECT 学号,姓名,入学成绩FROM 学生where

left(学号,4)="2009“

(2) 查询2009年9月1日入学且入学成绩不低于600 分的学生信息。

SELECT * FROM 学生 where 入学时间

=#2009-9-1# AND 入学成绩>=600

幻灯片25

如果要求某列

的数据在某个

区间内,可以

4.2.1 简单查询

使用该运算符

(3) 列出工资在1000—2000之间的教师信息。

SELECT * FROM 教师 where 工资 BETWEEN

1000 AND 2000

SELECT * FROM 教师 where 工资 NOT

BETWEEN 1000 AND 等价于:

SELECT * FROM 教师

注意:WHERE 工资>= 1000 AND工

资<=2000

BETWEEN包括边界值,而NOT BETWEEN

不包括边界值

2000

幻灯片26

当要求表的列

值是某几个值

中的一个时用

4.2.1 简单查询

IN运算符

(4)列出选修了课程号为“01”和“53”的学

生的学号和成绩。

SELECT 学号,成绩FROM 学生选课WHERE 课程编号IN("01","53")

要求表的列

值是某几个值

中的一个时用in.

等价于:

SELECT 学号,成绩FROM 学生选

课WHERE 课程编号="01" OR 课

程编号="53"

SELECT 学号,成绩FROM 学生选课WHERE

课程编号NOT IN("01","53")

幻灯片27

4.2.1 简单查询

(5)查找考试成绩为空的学生的学号和课程号。

SELECT 学号,课程编号FROM 学生选课WHERE 考试成绩IS NULL

! 注意WHERE不要写成“WHERE 成绩 = NULL”IS NULL的功能是

测试属性值是否为

空值。

SELECT 学号,课程编号 FROM 学生选课 WHERE

考试成绩 IS NOT NULL

SELECT 学号,课程编号 FROM 学生选课 WHERE NOT 考试成绩 IS NULL

幻灯片28

4.2.1 简单查询

(6) 在“教师”表中列出非计算机系的教师信息。SELECT * FROM 教师 WHERE 所属系 <> "计算

机“

或SELECT * FROM 教师 WHERE所属系 != “计

算机“(在SQL SERVER中)

或SELECT * FROM教师WHERE NOT(所属系= "计算机")

幻灯片29

4.2.1 简单查询

(7) LIKE中可使用的通配符

通配含义

匹配零个或多个字符

例子

%

任意类型和长度的字符串

‘李%’

?

匹配任何一个字符

_(下划线)

任何单个字符

#

匹配一个数字

描述可匹配的字符范围

[]

幻灯片30

4.2.1 简单查询

从学生表中查找姓名中第2个字是“天”的学生:SELECT * FROM 学生WHERE 姓名LIKE ‘?天*'

从“学生”表中查找姓“刘”的学生:

SELECT * FROM 学生WHERE (姓名LIKE '刘*' )

SELECT * FROM 学生WHERE (姓名LIKE '刘%' )

幻灯片31

4.2.1 简单查询

5. ORDER子句

指定查询结果排列顺序,一般放在SQL语句的最后。其中:

排序字段:设置排序的字段或表达式。

ASC:按表达式升序排列。(默认)

DESC:按表达式降序排列。

幻灯片32

4.2.1 简单查询

根据“学生”表查询所有入学成绩大于500分的女生的姓名、性别、专业和入学成绩,并按入学成绩升序排列记录。

SELECT 学号,性别,专业,入学成绩FROM 学生WHERE 性别= "女" AND 入学成绩> 500

ORDER BY 入学成绩ASC

ASC是用来指明显示结果的

顺序,在此处可以不加。

幻灯片33

4.2.1 简单查询

列出学生表前3个学生的全部信息

SELECT TOP 3 * FROM 学生 ORDER BY

学号

注意:

TOP是指逻辑头,若存在排序,则是排序后的TOP

幻灯片34

4.2.1 简单查询

6. GROUP子句

对查询结果进行分组统计,统计选项必须是数值型的数据。其中:

分组字段列表:列表中的字段名称的顺序决定了分

组的先后顺序。

可以和GROUP BY 一起使用的统计函数有:sum、avg、max、min、first、last等。

幻灯片35

4.2.1 简单查询

根据学生选课表查询输出已选了课的学生的信

SELECT 学号, avg(考试成绩) FROM 学生选课GROUP BY 学号ORDER BY 学号

幻灯片36

相关主题
文本预览
相关文档 最新文档