第2章 第5节 关系数据库及SQL语言_第1页
第2章 第5节 关系数据库及SQL语言_第2页
第2章 第5节 关系数据库及SQL语言_第3页
第2章 第5节 关系数据库及SQL语言_第4页
第2章 第5节 关系数据库及SQL语言_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.3关系数据库及SQL语言12.3.1

SQL概述2.3.2

SQL的特点2.3.3

SQL语言的应用

2.3.1SQL概述SQL(StructuredQueryLanguage)结构化查询语言。由Boyce和Chamberlin于1974年提出。国际标准化组织1987年批准将其作为关系数据库标准语言。SQL通用性强、功能强大,几乎所有的关系数据库管理系统软件都支持SQL。22.3.2SQL的特点SQL语言是一种一体化语言,它包括数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需要描述清楚用户要“做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。32.3.2SQL的特点③SQL语言非常简洁。9个命令动词完成核心功能。SQL功能命令动词数据查询SELECT数据定义CREATE、DROP、ALTER数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKE④SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。⑤面向集合的操作方式。SQL采用集合操作方式,大大提高了操作效率。SQL命令动词4查询分析器5查询分析器功能6(1)用于输入T-SQL语句的自由格式文本编辑器。(2)在T-SQL语句中使用不同的颜色,以提高复杂语句的易读性。(3)对象浏览器和对象搜索工具,可以轻松查找数据库中的对象和对象结构。(4)模板可用于加快创建SQLServer对象的T-SQL语句的开发速度。模板是包含创建数据库对象所需的T-SQL语句基本结构的文件。(5)用于分析存储过程的交互式调试工具。(6)以网格或自由格式文本窗口的形式显示结果。(7)显示计划信息的图形关系图,用以说明内置在T-SQL语句执行计划中的逻辑步骤。(8)使用索引优化向导分析T-SQL语句以及它所引用的表,以了解通过添加其他索引是否可以提高查询的性能。Sqlserver2005SqlManagementstudio简介Sqlserver2005中SqlManagementstudio又称Sqlserver2005管理平台,它包括Sqlserver2000企业管理器和查询分析器等方面的功能,此外,该管理平台还提供也一种环境,用于管理Analysisservices,IntegrationservicesReportingservices和Xquery.单击MicrosoftSqlserver程序组中的Sqlserver2005SqlManagementstudio,启动后就可以打开Sqlserver2005管理平台。SQLServer2005组件

----Sqlserver2005查询分析器界面查询分析器器窗口或称【SQLQuery】标签页SQL查询结果【SQL编辑器】工具条【SQL标准】工具条记录数据库表数据库对象系统数据库注册创建库演示创建数据库……在Sqlserver服务器管理平台中注册服务器可以存储服务器连接信息,以供将来连接使用。服务器的启、停演示服务器启动与停止……SQLServer中的数据库mastermodeltempdbmsdbAdventureWorksAdventureWorksDW系统数据库用户数据库User1student创建数据库相关概念1数据库的存储结构

数据库的存储结构分为逻辑存储结构和物理存储结构两种,数据库的逻辑结构是从用户的角度理解的,它是数据库中数据的组织形式。SQLSERVER的数据库是由诸如表,视图,索引等不同的数据库对象所组成的,他们用来存储特定信息并支持特定功能,构成数据库的逻辑存储结构。数据库的物理存储结构是指数据库文件时如何存储在存储介质上的。数据库以文件形式把数据库保存在存储介质上,他由数据库文件和事务日志文件组成。一个数据库至少应该包含一个主数据库文件和一个事务日志文件。创建数据库页:8KB表、索引数据数据库数据文件

.mdf或.ndf日志文件

.ldf最多=8060字节数据库文件和事务日志文件对于数据库文件来讲,它分为主数据文件,辅助数据库文件和事务日志文件。

数据库文件是存放数据库数据和数据库对象的文件,一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。当有多个数据库文件时,一个文件被指定为主数据库文件,其扩展名为.mdf,它用来存储数据的启动信息和部分或者全部数据,一个数据库只能有一个主数据库文件。辅助数据库文件用来存储主数据库文件未能存储的剩余数据和数据库对象。一个数据库可以没有辅助数据库文件,也可以有多个。扩展名为.ndf

事务日志文件用于记录所有事务和由每个事务对数据库的修改,存储数据库的更新情况等。当数据库受到损害时,管理员使用事务日志文件恢复数据库。扩展名为.ldf。每个数据库都有事务日志文件。

SQLServer中的数据库文件主数据文件*.mdf仅有一个事务日志文件*.ldf一到多个

次数据文件*.ndf零到多个次数据文件*.ndf零到多个(仅有一个)主文件组(零到多个)次文件组事务日志一个数据库的文件集数据库的文件组成逻辑文件名和物理文件名SQLSERVER的文件拥有两个名称,即逻辑文件名和物理文件名。当使用Transact_sql命令语句来访问某一个文件时,必须使用该文件的逻辑文件名,而且数据库中各逻辑文件名必须唯一。物理文件名是文件实际存储在磁盘上的文件名,而且可以包含完整的磁盘目录路径。例如,系统数据库master,master为逻辑文件名,而其对应的物理文件名为master.mdf,其事务日志文件名为master.ldfstudent的物理文件结构Student_log.ldfE:\日志文件abcde

abcd

主文件组Student_data.mdfC:\tbl…

tbl…

tblclass

tblstudent

演示创建数据库……SQLServer的系统数据库数据库服务器上自动建立了6个数据库,其中有4个系统数据库。系统数据库:master数据库tempdb数据库model数据库msdb数据库Master数据库Sqlserver的主数据库,记录了sqlserver系统的所有系统信息。Tempdb数据库用来保存所有的临时表和临时存储过程。Model数据库用作在系统上创建的所有数据库的模版。Msdb数据库提供sqlserver代理程序调度警报和作业示例数据库WearManager数据库对象的标识符例如数据库名、表名、视图名、列名等。SQLServer标识符的命名遵循以下规则:(1)标识符包含的字符数必须在1到128之间。(2)标识符的第一个字符必须是字母、下划线(_)、at符号(@)或者数字符号(#)。(3)标识符的后续字符可以为字母、数字或“@”符号、“$”符号、数字符号或下划线。(4)标识符不能是Transact-SQL的保留字,也不能包含空格。25SQLServer数据类型SQL的数据类型包括:INT,FLOAT,NUMERIC,CHAR,VARCHAR,TEXT,BINARY,VARBINARY,DATETIME等262728定长二进制binary(n):按n个字节的固定长度存放二进制数据,最大长度为8KB,若不足,在数据尾部加0补足。变长二进制varbinary(n):按不超过n个字节的实际长度存放二进制数据,最大长度8KB,若不足,按实际长度存储3.图像二进制image:用来存放文本文档、Excel图表及图象数据(.gif、.bmp、.jpeg)等。

二进制数据SQLServer用binary、varbinary和image三种数据类型来存储二进制数据。二进制类型用于存储声音、图像等数字类型的数据。29

注意:

1.二进制数据常量不允许加引号,默认用十进制

书写,输出显示默认采用十六进制。

2.若实际数据的二进制长度超过指定的n个字节,用

局部变量存储时截取二进制的前n个字节。

3.数据库中二进制字段的数据不能在数据表中直接输

入。

4.在用INSERT或UPDATE语句为数据表二进制字段

输入、更新数据时,如果超过n字节,则系统报错。30

数值型数据SQLServer的数值型数据用8种:整型数据4种,实型数据4种。1.字节型整数TinyInt2.短整型整数SmallInt3.基本整型整数Int或Integer4.长整型整数Bigint5.近似值实型浮点数Real6.可变精度实型浮点数Float(n)7.精确小数型数据Numeric(p.s)8.精确小数型数据Decimal(p.s)或Dec(p.s)31字符型数据SQLServer提供了Char(n)、Varchar(n)和Text三种ASCII码字符型数据。1.定长字符型Char(n):按n个字节固定存放字符串,若不足则补空格。2.变长字符型Varchar(n):按不超过n个字节的实际长度存放字符串,长度为8000。2.变长字符型nVarchar(n):每个字符占2个字节(中英文相同),,长度为4000。3.文本类型Text:当存储字符型数据超过8000字节时,可选择Text数据类型。32

注意:

1.字符型数据一个英文符号占1个字节,汉字占2个字

节。

2.字符型字符串常量必须用单引号括起来。

3.Char、Varchar数据类型若不指定长度n,默认为1

个字节。

4.若实际字符串长度超过指定的n个字节,用局部变量

存储时截取字符串前n个字节。

5.可以在企业管理器中直接输入到数据表中,但输入

的字符串长度超过字段指定长度时系统不接受,也

不会自动截取。

6.在用INSERT或UPDATE语句为数据表字符型字段输入,更新字符串时,如果超过n字节,则系统报错。33日期/时间型数据SQLServer提供了Smalldatetime和Datetime两种日期/时间的数据类型。短日期/时间型Smalldatetime

占4个字节固定长度的存放,存放1900/1/1~2079/6/6的日期时间,精确到分钟。2.基本日期/时间型Datetime

占8个字节固定长度的存放,存放1753/1/1~9999/12/31的日期时间,精确到千分之一秒。

注意:

1.日期/时间型常量必须用单引号括起来。

2.用户在没有指定小时以下精确的时间数据时,自动

设置日期/时间型数据的时间为00:00:00。

3.数据库中默认的日期格式为“年-月-日”,也可以使用“月-日-年”或“日-月-年”。(年/月/日)

4.如果使用“日-月-年”或“日/月/年”,系统不能区分时默认按“月-日-年”处理。35货币型数据SQLServer提供了Smallmoney和Money的数据类型。短货币型Smallmoney

占4个字节,前2个字节是整数部分,后2个字节为小数部分。2.基本货币型Money

占8个字节,前4个字节是整数部分,后4个字节为小数部分。Money或Smallmoney类型是数值常量,应加货币符号$前缀,负数时加后缀$.36位类型数据只能存放0、1和NULL,一般用于逻辑判断2.占1位二进制内存,如果一个数据表中有8个以下的位类型字段,系统用一个字节存储所有这些字段,超过8个不足16个用2个字节存放。3.位类型数据输入任意的非0值时,都按1处理。37图像、文本型数据的存储方式

1.存储文本、图像等大型数据时,可使用Text、Ntext和Image三种数据类型。这三种数据类型的数据量比较大。2.使用系统存储过程sp_tableoption指定文本或图像数据是否在表的行中存储:语法格式:sp_tableoption‘表名’,‘textinrow’,’true|false’38运算符与表达式算术运算符与表达式算术运算符:+、-、*、/、%

逻辑类运算符与逻辑值表达式SQL的逻辑表达式取值有三个逻辑值:TRUE(真)FALSE(假)UNKNOWN(不确定)39

逻辑类运算符与逻辑值表达式1.比较运算符:>,>=,=,<,<=,<>或!=,!>,!<

条件表达式:表达式1比较运算符表达式22.逻辑运算符:not(非)、and(逻辑与)、or(逻辑或)

级别:TRUEUNKNOWNFALSE(高低)

AND运算:结果取低级的

OR运算:结果取高级的

NOT运算:结果取相反的40逻辑类运算符与逻辑值表达式3.范围运算符:[not]between…and

条件表达式:表达式[not]between起始值and终止值例:Xbetween5and10(则X>=5且X<=10条件为真,X<5或X>10为假)

Xnotbetween5and10(则X<5或X>10条件为真,X>=5且X<=10为假)注意:between所选取的数据范围包括边界值,notbetween不包括。41逻辑类运算符与逻辑值表达式4.多值列表运算符[not]…in(…)条件表达式:[not]表达式in(值1,值2,…,值n)(1)in(…)用于判断表达式的值是否等于所给出的值之一,只要与其中一个值相等条件就为真,全部不等为假。如:xin(1,3,5)相当于x=1orx=3orx=5(2)not…in(…)表示判断表达式的值是否全部不等于所给出的值,所有的值一个也不相等条件为真,只要有一个相等为假。如:notxin(1,3,5)相当于x<>1andx<>3andx<>542

4.2.2逻辑类运算符与逻辑值表达式5.用于子查询的运算符(1)列表比较运算符ANY|ALL

表达式格式:表达式比较运算符ANY(子查询的一列值)表达式比较运算符ALL(子查询的一列值)说明:只要有一个比较成立:ANY的结果为真只有全部比较都成立:ALL的结果为真

例:3+1>ANY(1,2,3,4)T 3+1>ALL(1,2,3,4,5)F(2)记录存在逻辑运算符[not]exists

用于检查子查询返回的结果集中是否包含有记录,若包含,则exists为真,否则为假。43逻辑类运算符与逻辑值表达式6.空值运算符:[not]isnull

条件表达式:表达式[not]isnull说明:(1)isnull表示判断表达式的值是否等于空值,为空时条件为真,否则为假。(1)Notisnull表示判断表达式的值是否不等于空值,不为空时为真,否则为假。

44逻辑类运算符与逻辑值表达式7.字符模糊匹配运算符:[not]like‘通配符’通配符种类:%:代表0个或多个字符的任意字符串。“-”:代表单个任意字符“[abcd]”:代表指定字符中的任何一个单字符.“[^abc]”:代表不在指定字符中的任何一个单字符。转义字符:在where子句后用escape子句指定一个转义字符,abc为字段名,查找所有以%开始的字符。例:select1where'ABC%DE'like'ABC[%]DE

WHEREColumnALIKE'%5/%%'ESCAPE'/'

45字符串连接运算符连接运算符与字符串表达式字符串表达式:字符串表达式1+字符串表达式2例:‘ABC’+‘DEF’,则结果是:‘ABCDEF’‘ABC’+‘,’+‘EFG’则结果是:‘ABC,EFG’46SQL的函数分为系统函数(内置函数)和用户自定义函数。4.3.1数学函数

函数功能说明函数功能说明Abs(x)求绝对值Ceiling(x)求不小于x的最小整数Asin(x)求反正弦值Floor(x)求不大于x的最大整数Acos(x)求反余弦值Sin(x)求x(弧度)的正弦值Exp(x)求ex的指数Cos(x)求x(弧度)的余弦值47字符串函数

函数功能说明函数功能说明ASCII(A)字符串A第一个字符的ASCII码Len(A)去掉空格后A的字符个数Char(x)ASCII码为X的字符Lower(A)大写变小写Charindex(A,B[,start])返回字符串B在字符串A自start后的其实位置Ltrim(A[,’B’])将字串A左端字符B删掉,缺省为删掉空格Left(A,x)从字符A的左端取X个字符的子串Space(x)得到有x个空格的字符串48系统内置函数4.3.3日期时间函数Dateadd(yy|mm|dd,x,D):得到按第一个参数指定的项目D+x的值dateadd(dd,20,’2008-3-16’)指定日期加20天Datediff(yy|mm|dd,D1,D2):得到按第一个参数指定的项目D2-D1的差值.datediff(yy,’1960-3-16’,getdate())可以根据出生日期得到当前的年龄Day(D):得到D的日期数.Getdate():得到系统的日期和时间.Month(D):得到D的月份数.Year(D):得到D的年份数.49系统内置函数4.3.4类型转换函数Cast(表达式as数据类型[长度])

将表达式的值转换成指定的“数据类型”。Convert(数据类型[长度],表达式[,style]):

按style格式将表达式的值转换成指定的“数据类型”。例:根据出生年月,求年龄。Cast(year(‘1990-3-7’)aschar(4))_+’年出生的人是’+cast(datediff(yy,’1990-3-7’),getdate())aschar(2))+’岁’2.3.3T-SQL语言(一)查询功能(二)操作功能(三)定义功能50T-SQL语言T-SQL语言侧重于处理数据库的数据,具体包括:DDL(数据定义语言)——用来建立数据库、数据库对象和定义其列——CREATETABLE、DROPTABLE等DML(数据操作语言)——查询、插入、删除和修改数据库中的数据;——SELECT、INSERT、UPDATE、DELETE等;DCL(数据控制语言)——用来控制存取许可、存取权限等;——GRANT、REVOKE等;变量说明、流程控制、功能函数——定义变量、判断、分支、循环结构等——日期函数、数学函数、字符函数、系统函数等51(一)定义功能标准的SQL的数据定义功能:数据库的定义表的定义视图的定义存储过程的定义规则的定义索引的定义52创建库--DropDatabaseWearManager;CreateDatabaseWearManager;DROPDATABASEWearManager;CREATEDATABASEWearManagerON(NAME=Sales_dat,FILENAME='c:\saledat.mdf',SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOGON(NAME=Sales_log,FILENAME='c:\salelog.ldf',SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB);GO531)

基本表的定义1)

基本表的定义SQL使用CREATETABLE命令建立表,相应的命令格式是:CREATETABLETableName(column_nameDATATYPE[DEFAULTexpression][NULL|NOTNULL][CONSTRAINconstrain_name][,…])TableName-----表的名称;Column_name-----列的名称DATATYPE-----列的数据类型DEFAULTexpression——该列的缺省值constrain_name——完整性约束的名称541)

基本表的定义用CREATETABLE命令建立表可以完成用表设计器完成的所有功能.除了建立表的基本功能外,它还包括满足实体完整性的主关键字PRIMARYKEY,定义默认值的DEFAULT等。5556利用SQL命令来建立相同的数据库,然后可利用数据库设计器和表设计器来检验用SQL建立的数据库例33用SQLCREATE命令建立仓库1表useWearManager;droptabledbo.WearHousecreatetabledbo.WearHouse( WNonvarchar(4)NotNull, Wcitynvarchar(20), Wareaint, primarykey(WNo), Unique(WNo))

572)

表的删除删除表的SQL命令是:DROPTABLEtable_nameDROPTABLE直接从磁盘上删除tablename所对应的文件.如果tablename是数据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表例34:DROPTABLEdbo.WearHouse583)表结构的修改修改表结构的命令是ALTERTABLE。该命令有三种格式:ALTERTALBE<TalbleName>[ADD<column_Name><Data_Type>[CONSTRAINTconstraint_name][DROP<column_Name>[constraint_name][MODIFY<column_Name><Data_Type>];ADD添加一个属性;DROP删除一个属性;MODIFY更改一个属性。593)表结构的修改例为订购单1表增加一个货币类型的总金额字段。ALTERTABLEdbo.WearHouse1ADDWarea

int例

删除订购单1表中的金额字段。ALTERTABLEdbo.WearHouse1DROPCOLUMNWarea604)索引操作建立索引CREATEINDEX,一般格式为:CREATE[UNIQUE]INDEXindex_nameONtable_name(column[,…])例37将订购单1表的职工号定义为唯一索引,索引名是emp_sum。CREATEUNIQUEINDEXemp_sumON订购单(职工号)614)索引操作删除索引DROPINDEX,一般格式为:DROPINDEXtable_name.index_name例

删除订购单1表的索引emp_sup。DROPINDEX订购单.emp_sum62

5)视图的定义视图是从表中派出来的虚表。数据库中仅存放视图的定义,不存放视图的数据。这些数据仍然存在于原来的基本表中。63

5)视图的定义视图的建立CREATEVIEWview_name[(column_name[,column_name]…)]AS(select_statement)select_statement可以是任意的select查询语句。视图时根据表定义或派生出来的。涉及视图时常把表称作基本表。645)视图的定义例39:某个用户对职工关系只需要或者只能知道职工号和所工作的仓库号,那么可定义视图:CREATEVIEWe_wAS;SELECT职工号,仓库号FROM职工其中e_w是视图的名称。视图一经定义,就可以和基本表一样进行各种查询,也可以进行一些修改操作。对于最终用户来讲,有时并不需要知道操作的是基本表还是视图。

65

5)视图的定义为了查询职工号和仓库号信息,可以有命令:SELECT*FROMe_w或SELECT职工号,仓库号FROMe_w或SELECT职工号,仓库号FROM职工它们可以收到同样的效果。66

5)视图的定义视图由于是从表中派生出来的,所以不存在修改结构的问题,但是视图可以删除。删除视图的命令格式是:DROPVIEW<视图名>比如要删除视图v_emp,只要键入命令:DROPVIEWv_emp;67(一)查询功能SQL的核心是查询。SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询模块组成,多个查询可以嵌套执行。

SQLSELECT命令的语法格式如下:

SELECT字段列表

FROM表列表

[WHERE<条件表达式>][GROUPBY….][HAVING<条件表达式>][ORDERBY…]68(二)查询功能SELECT说明要查询的数据FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询;WHERE说明查询条件,即选择元组的条件;GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;HAVING短语必须跟随GROUPBY短语使用,它用来限定分组必须满足的条件;ORDERBY用来对查询的结果进行排序。69订货管理系统数据库70

1)简单查询(基于单个表或关系的查询)例1

从职工关系中检索所有的工资值。SELECTESalary

FROMdbo.EmployeeSELECTDISTINCTESalary

FROMdbo.Employee;去掉查询结果中的重复值。例2

检索仓库关系中的所有元组。SELECT*FROMdbo.WearHouse;等价于SELECTWNo,Wcity,WareaFROMdbo.WearHouse;71例3

检索工资多于1230元的职工号SELECTENoFROMEmployeeWHEREESalary>1230;例4

检索哪些仓库有工资多于1210元的职工SELECTDISTINCTWNoFROMEmployee

WHEREESalary>1210;72

1)简单查询(基于单个表或关系的查询)例5

给出在仓库“WH1”或“WH2”工作,并且工资少于1250元的职工号SELECTENoFROMEmployee

WHEREESalary<1250AND(WNo='WH1'ORWNo='WH2');例:给出员工工资组别selectesalaryfromemployeegroupbyesalary;统计每个仓库人数统计每个仓库职工工资总额73

1)简单查询(基于单个表或关系的查询)2)简单的联接查询联接查询是一种基于多个关系的查询。例6

找出工资多于1230元的职工号和他们所在的城市selecteno,wcityfromemployee,wearhousewhere

(esalary>1230)and(employee.wno=wearhouse.wno)仓库关系和职工关系之间存在一个一对多的联系。74例7

找出工作在面积大于400的仓库的职工号以及这些职工所在的城市selecteno,wcity,wareafromemployee,wearhousewhere(warea>400)and(employee.wno=wearhouse.wno)75

3)

嵌套查询基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。当检索关系X中的元组时,它的条件依赖于相关的关系Y中的元组属性值,这时使用嵌套查询。例8

哪些城市至少有一个仓库的职工工资为1250元分析:此例要求查询仓库表中的城市信息,而查询条件是职工表中的工资字段值。selectWcityfromWearhousewhereWnoin(selectWnofromemployeewhereEsalary=1250)76

3)

嵌套查询例9

查询所有的职工工资都多于1210元的仓库的信息select*fromWearHousewhereWNoin(selectWnofromemployeewhereEsalary>1210)andWnoin(selectWnofromemployee);“北京”的“WH1”所有职工工资都多于1210元?。77

3)

嵌套查询例9

查询所有的职工工资都多于1210元的仓库的信息分析:此例也可描述为没有一个职工的工资少于或等于1210元的仓库的信息SELECT*FROMWearHouseWHEREWNoNOTIN(SELECTWNoFROMEmployeeWHEREESalary<=1210);“武汉”的“WH4”仓库还没有职工,但该仓库的信息也被检索出来了。78

3)

嵌套查询排除那些还没有职工的仓库,检索要求描述为:查询所有的职工工资都多于1210元的仓库的信息,并且该仓库至少要有一名职工。select*fromWearHousewhereWNonotin(selectWnofromemployeewhereEsalary<=1210)andWnoin(selectWnofromemployee);79

3)

嵌套查询例10

找出和职工E4挣同样工资的所有职工的职工号SELECTENoFROMEmployeeWHEREESalary=(SELECTESalaryFROMEmployeeWHEREENo='E4');ANDEno!='E4'80思考结果?4)几个特殊的运算符BETWEEN…AND…LIKE!=NOT例11

检索出工资在1220元到1240元范围内的职工信息。SELECT*FROM职工WHERE工资BETWEEN1220AND1240;等价于:SELECT*FROM职工WHERE(工资>=1220)AND(工资<=1240);81例12

检索出名字中含有“公司”字样的供应商信息匹配字符串查询,使用LIKE运算符SELECT*FROM供应商WHERE供应商名LIKE‘%公司’匹配符%:表示0个或多个字符匹配符:_(下划线):表示一个字符824)几个特殊的运算符4)几个特殊的运算符例13

找出不在北京的全部供应商信息SELECT*FROM供应商WHERE地址!=‘北京’SELECT*FROM供应商WHERENOT(地址=‘北京’)

找出工资不在1220元和1240元之间的全部职工信息SELECT*FROM职工WHERE工资NOTBETWEEN1220AND1240;835)

排序使用SQLSELECT可以将查询结果排序,使用短句ORDERBYORDERBY,Order_Item[ASC|DESC][,Order_Item[ASC|DESC]…]例14

按职工的工资值升序检索出全部职工信息SELECT*FROM职工ORDERBY工资;降序:SELECT*FROM职工ORDERBY工资DESC

;845)

排序例15先按仓库号排序,再按工资排序并输出全部职工信息SELECT*FROM职工ORDERBY仓库号,工资注意:ORDERBY是对最终的查询结果进行排序,不可以在子查询中使用该短语。856)

简单的计算查询用于计算检索的函数有:(1)

COUNT----计数(2)

SUM----求和(3)

AVG----计算平均值(4)

MAX----求最大值(5)

MIN----求最小值这些函数可以用在SELECT短语中对查询结果进行计算866)

简单的计算查询例16

找出供应商所在地的数目SELECTCOUNT(DISTINCT地址)FROM供应商注意:除非对关系中的元组个数进行计数,一般COUNT函数应该使用DISTINCT.例如:SELECTCOUNT(*)FROM供应商

例17

求支付的工资总数SELECTSUM(工资)FROM职工若使用SELECTSUM(DISTINCT工资)FROM职工

876)

简单的计算查询例18

求北京和上海的仓库职工的工资总和SELECTSUM(工资)FROM职工WHERE仓库号IN(SELECT仓库号FROM仓库WHERE城市=‘北京’OR

城市=‘上海’);886)

简单的计算查询例19

求所有职工的工资都多于1210元的仓库的平均面积SELECTAVG(面积)FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工WHERE工资<=1210);注意:

以上结果包含了尚没有职工的WH4仓库,如果要排除没有职工的仓库,以上语句应改为:SELECTAVG(面积)FROM仓库WHERE仓库号NOTIN(SELECT仓库号FFROM职工WHERE工资<=1210)AND仓库号IN(SELECT仓库号FROM职工);896)

简单的计算查询例20

求在WH2仓库工作的职工的最高工资值SELECTMAX(工资)FROM职工WHERE仓库号=‘WH2’求最低工资值:SELECTMIN(工资)FROM职工WHERE仓库号=‘WH2’907)

分组与计算查询利用GROUPBY进行分组计算查询,GROUPBY短语的格式如下:GROUPBYGroupColumn[,GroupColumn…][HAVINGFilterCondition]例21

求每个仓库的职工的平均工资SELECT仓库号,AVG(工资)FROM职工

GROUPBY仓库号;917)

分组与计算查询例22

求至少有两个职工的每个仓库的平均工资SELECT仓库号,COUNT(*),AVG(工资)FROM职工;GROUPBY仓库号HAVINGCOUNT(*)>=2HAVING子句总是跟在GROUPBY

子句之后,不可以单独使用.HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组.928)

利用空值查询例23

找出尚未确定供应商的订购单SELECT*FROM订购单WHERE供应商号ISNULL注意:查询空值时要使用ISNULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较。

例24

列出已经确定了供应商的订购单信息SELECT*FROM订购单WHERE供应商号ISNOTNULL939)

别名与自然联接查询在联接操作中,经常需要使用关系名作为前缀,有时这样做显得很麻烦.因此,SQL允许在FORM短语中为关系名定义别名

<关系名><别名>比如,如下的联接语句是一个基于4个关系的联接查询,查询供货商所在地与仓库所在地均在北京的供货商信息。其中必须使用关系名做前缀SELECT供应商名FROM供应商,订购单,职工,仓库WHERE地址=”北京”AND城市=”北京”AND供应商.供应商号=订购单.供应商号AND订购单.职工号=职工.职工号AND职工.仓库号=仓库.仓库号;949)

别名与自然联接查询使用别名的联接嵌套查询SELECT供应商名FROM供应商S,订购单P,职工E,仓库WWHERE地址=‘北京’AND城市=‘北京’ANDS.供应商号=P.供应商号ANDP.职工号=E.职工号AND职工E.仓库号=W.仓库号以上例子中,别名不是必须的,但在关系的自然联接中,别名是必不可少的。95自然联接什么是自然联接?SQL不仅可以对多个关系实行联接操作,也可以将同一个关系与其自身进行联接,这种联接就称为自然联接。在可以进行这种自然联接的关系中,实际存在着一种特殊的递归关系,即关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另外的一些元组有一种对应关系(一对多联系).96自然联接假设雇员关系:雇员(雇员号,雇员姓名,经理)其中雇员号和经理两个属性出自同一值域,同一元组的这两个属性值是上下级关系.雇员号雇员姓名经理E3赵涌

E4钱潮E3E6孙洁E3E8李路E6雇员号雇员姓名经理例25

根据雇员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论