Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6章 SQL基础 本章概述 本章要点 教学过程.

Similar presentations


Presentation on theme: "第6章 SQL基础 本章概述 本章要点 教学过程."— Presentation transcript:

1 第6章 SQL基础 本章概述 本章要点 教学过程

2 本章概述 SQL语言是一种标准的结构化查询语言(structured query language),许多数据库厂商的产品都支持SQL语言。但是,许多数据库厂商在使用SQL语言时,不是简单地把SQL语言照搬过来,而是在SQL语言的基础上进行了扩展,因此形成了不同的语言。例如,在Oracle系统中,经过扩展的SQL语言是PL/SQL语言,这是一种过程SQL语言,是Oracle公司在标准SQL语言的基础上提出的语言。这些扩展语言既与标准的SQL语言兼容,又在标准的SQL语言基础上添加了许多新的功能。这种扩展语言有两个重要的作用,即突出本产品的特点和探索SQL语言的新功能并且为SQL语言的版本升级做贡献。 本章介绍Oracle系统的SQL基础。

3 本章要点 SQL的基本概念和作用 SQL与SQL*Plus、PL/SQL之间的关系 检索数据 排序和分组数据 插入、更新和删除数据

4 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询

5 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询

6 6.1 概述 本节包括两部分内容。 首先,介绍SQL的作用和特点,SQL技术是本章的中心内容;
6.1 概述 本节包括两部分内容。 首先,介绍SQL的作用和特点,SQL技术是本章的中心内容; 其次,介绍SQL与SQL*Plus、PL/SQL之间的区别和联系,以便更好地学习和理解SQL。

7 SQL的作用和特点 SQL是结构化查询语言(structure query language)的简称,是关系型数据库管理系统中最流行的数据查询和更新语言。用户可以使用SQL语言在数据库中执行各种操作。 1986年,SQL-86,也被称为SQL-1。 1992年,SQL-92,也被称为SQL-2。 1999年,SQL-99,也被称为SQL-3。 还存在不同的数据库管理系统厂商开发的不同类型的SQL。 SQL查询语言包括了所有对数据库的操作,这些操作可以分为4个部分,即数据定义语言、数据操纵语言、数据控制语言和嵌入式SQL语言。

8 SQL与SQL*Plus、PL/SQL之间的关系
SQL*Plus是一个用于连接Oracle数据库的强大工具。使用该工具,用户可以连接服务器上的数据库,还可以执行许多操作。前一章已经介绍了SQL*Plus的基本功能,下面总结一下SQL*Plus的主要功能特点: 在数据库中执行SQL语言和PL/SQL语言; 更新数据库中的数据; 执行数据查询; 将查询结果集格式化为报表; 建立、编辑、检索和执行SQL脚本; 管理数据库; 描述数据库中的表和PL/SQL对象; 将数据从一个数据库复制到另一个数据库; 向用户发送消息,并接受用户的输入。

9 PL/SQL PL/SQL是Oracle系统的过程化编程语言。
用户可以使用PL/SQL语言编写在数据库中执行的定制程序和过程代码。如同拥有执行SQL语言的SQL引擎一样,Oracle系统也拥有执行PL/SQL语言的PL./SQL引擎。PL/SQL程序能够存储在数据库中,以便用于用户应用程序和日常操作。这样可以使用户在Oracle数据库设计和规划的编程语言中,实现与用户数据密切相关的业务逻辑。

10 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询

11 6.2 select语句 数据操纵语言就是那些检索、更新表中数据的语句。这些语句包括select、insert、update、delete等4个语句。 本节首先介绍select语句,后面将陆续讲述其他的数据操纵语言。 在SQL语言中,最简单的语句是select语句。使用select语句可以检索数据库中的信息。具体地说,使用select语句可以完成选择、投影、连接等运算。

12 基本语法 在Oracle系统中,select语句的基本语法格式如下:
select [distinct] [*, column_name [alias], …] from tablename where group by having order by

13 规则 一般情况下,在使用SQL语句(包括使用select语句)时,用户应该遵循下面的规则或约定: 除非明确指定,否则SQL语句不区分大小写;
关键字不能跨行; 为了增强可读性,关键字左对齐; 可以在SQL语句中使用各种制表符和伸缩符号。

14 执行SQL语句 在Oracle系统中,可以采用下面4种方式之一来执行SQL语句: 在子句的最后添加分号(;);
在缓存区的最后一行的末尾放置斜杠(/); 在SQL提示符末尾放置斜杠(/); 在SQL提示符末尾使用run命令。

15 执行select语句 如果在select子句后面使用星号(*),则表示检索表中所有的数据,包括所有的列和行。
在执行select语句时要注意,select子句和from子句都是必须的,缺少任何一个子句都是错误的。 在使用select语句执行操作时,不同数据类型的数据显示的方式也不同。

16 算术表达式 在使用select语句时,对于数字数据和日期数据都可以使用算术表达式。 在select语句中可以使用的算术运算符如表6-1所示。
在表中,如果某个列中没有值,那么把这种现象称为空值。空值既不是字符串中的空格,也不是数字中的零,而只是表示没有值,这是一种不能使用的值。如果某个列既不是主健约束列,也没有定义为not null,那么该列就允许为空值。任何数据类型的列都具有这种特性。 空值的特性非常奇怪。在算术表达式中,任何包含了空值运算的表达式的结果依然是空值。

17 改变列标题 在默认情况下,查询结果集中的数据标题是列名。
由于在设计数据库过程中,为了简单起见,一般采用缩写的形式命名列名,例如使用sal表示薪水(salary)。但是,以这种缩写方式命名的列名可读性比较差。因此,在查询结果集中,经常需要改变列的标题,特别是在制作报表时。 改变列标题的方式为“列名 as 列标题”。在这种方式中,关键字as可以省略。特别是当列标题中包含了一些特殊的字符,例如空格等时,可以使用双引号将列标题引起来。

18 使用where子句 使用select语句中的where子句可以限制数据量,实际上,select语句中的where子句可以用来指定检索数据的条件。 where子句的语法格式如下: select [distinct] [*, column_name [alias], …] from tablename where condition_expression 以上的where子句用来指定检索到的数据应该满足指定的条件,参数condition_ expression就是用于指定条件。在where子句的条件中,可以比较各种列值、文字串、算术表达式、函数等内容。

19 where子句中可用的运算符 普通比较运算符就是直接比较两个表达式的运算符。 特殊比较运算符,如表6-3所示。
使用逻辑运算符的好处在于可以把多个条件连接起来,以便组成复杂的复合条件。

20 使用order by子句 在前面介绍的数据检索技术中,只是把数据库中的数据直接取出来。这时,在结果集中数据的排列顺序由数据的存储顺序决定。
但是,这种存储顺序经常不符合实际的各种业务需要,因此需要对数据库中的数据在检索时进行排序。在select语句中,可以使用order by子句执行数据排序操作。 使用order by子句的语法格式如下: order by [column_name, expression] [asc | desc]

21 合计计算 合计计算就是把一组数据作为计算的对象而执行的计算,这种计算包括求最大值、平均值、方差等。进行合计计算必须使用Oracle系统提供的合计函数。在Oracle系统中,可以使用的合计函数及其语法和功能如表6-5所示。

22 使用字符函数 字符函数是对字符表达式进行处理的函数。字符函数的输入是字符表达式(包括表中的列名称),其输出是经过处理的字符表达式。
例如,lower()函数可以将字符表达式转换为小写字母,substring()函数将输出某个字符串的子串。 在Oracle Database 10g系统中,可以使用的字符函数如表6-6所示。实际上,这些字符函数在许多编程语言中都可以找到。

23 使用数学函数 数学函数可以用于执行各种数据计算。许多编程语言都提供了大量的数学函数,这也是编程语言最早的功能之一。Oracle Database 10g系统也提供了大量的数学函数,这些函数大大增强了Oracle Database 10g系统的科学计算能力。 Oracle Database 10g系统提供了几乎所有常用的数学函数。Oracle Database 10g系统中可用的数学函数如表6-7所示。

24 使用转换函数 在操纵表中的数据时,经常需要把某个数据从一种数据类型转换为另一种数据类型,这时就需要使用数据转换函数。例如,如果需要把表示价格的数值数据转换成字符数据,则需要使用to_char()函数。Oracle Database 10g系统,提供了许多用于数据类型转换的函数。 这些转换函数及其功能如表6-8所示。

25 使用group by和having子句 表中包含了许多数据,可以对这些数据按照某个指定的列进行分组,然后使用合计函数计算相应列的合计值。
例如,如果需要检索最高薪水和最低薪水的雇员,并返回不同部门中最高薪水和最低薪水的雇员,那么就需要对表中的数据进行分组计算。 在Oracle系统中,可以在select语句中使用group by子句进行分组计算。使用分组计算的语法格式如下: group by group_by_expression having group_condition

26 连接查询 在设计数据库时,为了满足数据库范式要求,数据分散在不同的表中。但是,在使用数据库时,经常需要把分散在不同表中的数据组合成一个显示结果集提供给用户。为了满足这种要求,需要使用连接查询技术。 在Oracle系统中,为了从多个表中检索数据,可以使用下面的语法格式: select table1.column, table2.column from table1, table2 where table1.column1 = table2.column2

27 笛卡尔乘积 连接查询的理论基础是笛卡尔乘积。也就是说,连接运算建立在笛卡尔乘积的基础上,所有连接运算的结果都是笛卡尔乘积的子集。
笛卡尔乘积是指两个或两个以上的表进行相乘运算,结果是这些表中所有行的任意组合。 例如,emp表中有14行数据,dept表中有4行数据,其结果中有56行数据。

28 连接类型 在连接运算中,根据指定的连接条件,可以把连接查询划分成3种类型,即 内连接 外连接 自连接

29 内连接 内连接把两个表连接成一个临时表,在这个表中,仅包含那些满足连接条件的记录行。 内连接主要有两种形式,等价连接和非等价连接。
等价就是在连接列相等的条件下执行的连接操作。非等价连接是指在连接列不相等的连接条件下执行连接操作。

30 外连接 在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另外一个表中的行。
这种连接形式在许多情况下是非常有用的。 外连接只能用于两个表中。 外连接的语法格式如下: select table1.column, table2.column from table1, table2 where table1.column1(+) = table2.column2 外连接又可以分为左外连接和右外连接。

31 自连接 自连接就是把某一个表中的行同该表中另外一些行连接起来。自连接主要用于比较相同的信息,但是所比较的列必须有相同的或者兼容的数据类型。为了连接同一个表,为该表指定两个别名是非常重要的,这样才可以把该表在逻辑上作为两个不同的表来使用。 现在希望把emp表看成两个表,一个是雇员表,一个是经理表,那么可以按照一般的连接形式把这个雇员表和经理表连接起来。

32 集合运算符 在Oracle Database 10g系统中,如果需要把多个SQL查询语句合并成一个单独的查询语句,增强SQL语句的查询能力,则可以使用集合运算符来实现。 可以使用的集合运算符包括union、union all、intersect和minus。 下面详细介绍这些集合运算符的使用方法和特点。

33 union集合运算符 使用union集合运算符,可以把第一个查询语句中的所有数据行与第二个查询语句的所有数据行相加,消除重复行,最后返回结果。 在如图6-30所示的示例中,第一个查询语句返回以字母A或B开头的雇员名称;第二个查询语句返回以字母B或C开头的雇员名称。通过使用union关键字将这两个查询语句的结果集合成一个结果,并且对字母B开头的雇员名称BLAKE只显示一次。

34 union all集合运算符 union all集合运算符与union集合运算符非常类似,但是两者也有一个显著的差别,即不消除查询结果中重复的数据行,只是简单地把多个查询语句的结果合并在一起。 如图6-31所示的示例由于使用了关键字union all,所以查询结果中包括了两条BLAKE雇员的信息。

35 intersect集合运算符 intersect集合运算符用来执行交集运算。也就是说,intersect集合运算符可获取两个查询语句,并且对这些查询结果进行汇总,向用户返回同时存在于两个结果集中的数据行。单由第一个查询语句得到的数据或者单由第二个查询语句得到的结果都不会包含在最终的查询结果集中。 如图6-32所示的示例使用了intersect运算符,结果集中只包含了BLAKE雇员的信息。这是因为BLAKE雇员出现在前面两个查询结果集中。

36 minus集合运算符 集合的差集运算可以由minus集合运算符来实现。minus集合运算符会返回所有从第一个查询中返回而不是从第二个查询中返回的那些数据行。 如图6-33所示的示例使用了minus集合运算符。结果集中的ALLEN和ADAMS只是出现在第一个查询语句结果集中而没有出现在第二个查询语句结果集中。

37 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询

38 6.3 修改数据 除了检索数据之外,DML还包括修改数据功能。修改数据包括插入数据、更新数据和删除数据。插入数据就是在指定的表中插入数据。
6.3 修改数据 除了检索数据之外,DML还包括修改数据功能。修改数据包括插入数据、更新数据和删除数据。插入数据就是在指定的表中插入数据。 虽然可以使用图形工具来完成数据的插入操作,但是在许多情况下,使用insert命令执行数据的插入操作更加方便和高效。 如果表中的数据出现了错误,那么可以更新数据的错误,更新数据可以使用update命令。通过在该语句中指定表名称、列名称和条件,可以更新指定的数据。 当然,如果数据没有使用价值了,那么就可以把数据删除,删除操作可以使用delete语句来完成。

39 插入数据 向表中插入数据可以使用insert命令。Insert命令的语法格式如下:
insert into table (column[, column…]) values (value[, value…]) 在上面的语法格式中,table表示将要插入数据的表名称,column表示将要操纵的表中的列名称,value是将要插入column列的数据值。

40 插入数据的特点 在插入数据之前,需要了解该表的结构。如果在表名称后面没有指定列名称,那么表示按照表定义的列顺序插入数据。如果在表名称后面指定了列名称,那么按照这些列的顺序插入数据。 如果表中的某个列允许空值,则可以在插入数据的时候不为该列提供数据。但是,如果某个列是非空的,那么不能为该列提供空值。如果为该列提供了空值,那么系统返回相应的错误信息。 在向表中插入数据时,可以使用系统提供的函数来插入数据还可以使用替换变量插入数据。

41 更新数据 如果表中的数据有错,那么可以使用update命令来更新。使用update命令更新表中数据的语法格式如下:
update table set column = value[, column = value] where condition 如果希望更新表中的某行数据,那么可以使用where子句来指定将要更新的行。如果在更新表中的数据时没有使用where子句,那么表示更新表中所有行的数据。在更新表中数据的时候,可以使用子查询提供值,且可以使用多列子查询。

42 删除数据 如果表中的某些数据没有用了,可以删除这些数据。在Oracle Database 10g系统中,使用delete命令删除表中的数据。Delete命令的语法格式如下: delete from table where condition 在上面的语法格式中,table参数指定包含将要被删除的数据的表名称,condition参数指定将要删除的数据应该满足的条件。 在删除数据的时候,最好使用where子句指定需要删除的数据应该满足的条件如果没有指定where子句,则删除表中的所有数据。

43 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询

44 6.4 子查询 当select、update、delete等语句中嵌套了另外一个select语句时,这个被嵌套的select语句就是子查询。
6.4 子查询 当select、update、delete等语句中嵌套了另外一个select语句时,这个被嵌套的select语句就是子查询。 使用子查询的原因在于,如果需要执行某个查询语句,但是这个查询语句还需要依赖于另外一个查询语句的结果。 例如,从描述雇员信息的emp表中检索出MILLER的薪水,这时只需要一个select语句。如果需要得到比MILLER薪水高的雇员信息,这时的select语句就需要使用子查询来完成。

45 子查询基本用法 在select语句中使用子查询的语法格式如下:
select select_list from table where expression operator (select select_list from table) 在上面的语句中,表示运算符的operator既可以是单行运算符,例如,>、=、>=等,也可以是多行运算符,例如in、any、all等。

46 需要遵循的基本原则 子查询必须使用括号括起来,否则无法判断子查询语句的开始和结束; 子查询只能出现在where子句中比较运算符的右端;
不能在子查询语句中包含order by子句,而外查询语句可以有一个order by子句; 子查询允许嵌套多层; 在子查询中可以使用两种比较运算符,即单行运算符和多行运算符。

47 子查询类型 单行子查询:子查询语句只返回单行单列的结果,即返回一个常量值; 多行子查询:子查询语句返回多行单列的结果,即返回一系列值;
多列子查询:子查询语句返回多列的结果。

48 单行子查询 在单行子查询中,该内查询只返回单行单列值,因此可以把这种子查询作为一个常量来对待。
在where子句中,可以使用单行比较运算符来比较某个表达式与子查询的结果。 可以使用的单行比较运算符如表6-10所示。

49 多行子查询 子查询可以返回单列多行数据。执行返回单列多行数据的子查询被称为多行子查询。在这种多行子查询中,必须使用多行运算符来判断条件,而不能使用单行运算符。使用多行运算符可以执行与一个或多个数据的比较操作。 在Oracle系统中,可以使用的多行比较运算符如表6-11所示。

50 多列子查询 如果子查询返回了多个列的数据,那么称该子查询为多列子查询。
在一般的查询中,如果需要比较两个或两个以上的列,必须在where子句中使用逻辑运算符设置一个复合条件。 但是,使用多列子查询可以把一个复合的where条件写成单个where子句。

51 教学过程 6.1 概述 6.2 select语句 6.3 修改数据 6.4 子查询


Download ppt "第6章 SQL基础 本章概述 本章要点 教学过程."

Similar presentations


Ads by Google