关系数据库语言SQL.ppt
《关系数据库语言SQL.ppt》由会员分享,可在线阅读,更多相关《关系数据库语言SQL.ppt(77页珍藏版)》请在三一办公上搜索。
1、第四章 关系数据库语言SQL,第四章 关系数据库语言SQL,4.1SQL简介4.2查询语句4.3数据更新4.4数据定义小结,4.1 SQL简介,SQL是结构化查询语言(Structured Query Language)的缩写,是一种面向关系数据库的国际标准语言,在当前数据库领域中应用最为广泛和成功,美国国家标准局ANSI在1986年将SQL作为关系数据库系统的标准语言,后被国际标准化组织(ISO)采纳为国际标准。现在很多大型数据库都实现了SQL语言。,4.1.1 SQL语言的发展,SQL的发展历程主要有以下几个阶段:(1)1974年由Boyce和Chamberlin提出,当时称为SEQUEL
2、(Structured English Query Language)。(2)19751979年IBM公司对SEQUEL进行了修改,并由San Jose Research Laboratory研制了著名的关系数据库管理系统原型System R,实现了这种语言。(3)1981年IBM推出了商用关系数据库SQL/DS,并将其改名为SQL,由于它功能丰富,语言简洁,因此倍受用户及计算机工业界欢迎,被众多计算机公司和软件公司所采用。(4)目前SQL语言不仅用于小型数据库如Foxpro、Access,而且更广泛用于各种大型数据库,如Sysbase、SQL Server、Oracle、Informix、D
3、B2、Ingres等。,SQL在发展中经历了一系列标准化过程:(1)1982年美国国家标准局(American National Standard Institute,简称ANSI)开始制订SQL标准。(2)1986年10月ANSI的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准;同年ANSI公布SQL语言的第一个标准SQL-86,并于次年由国际标准化组织(International Standardization Organization,简称ISO)通过SQL-86标准。(3)1989年ISO对SQL-86进行补充,推出SQL-89标准,也称SQL1。(4)1992年ISO又
4、推出SQL-92标准,亦称SQL2。(5)1999年起ANSI陆续公布增加了面向对象功能的新标准SQL-99(亦称SQL3)的12个标准文本。,4.1.2 SQL语言的特点,(1)非过程化:SQL语言是非过程化语言,在SQL语言中,只要求用户提出“做什么”,而无需指出“怎样做”。SQL语句操作的过程由系统自动完成。(2)一体化:SQL可以操作于不同层次模式,集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)为一体。用SQL语言可实现DB生命周期的全部活动,其中包括建立数据库、建立用户账号、定义关系模式、查询及数据维护、数据库安全控制等。(3)两种使用方式,统一的语法结构:
5、两种使用方式:自含式语言与嵌入式语言自含式方式就是联机交互使用方式;嵌入式方式是指SQL语句嵌入某种高级程序设计语言的程序中,以实现数据库操作。尽管这两种使用方式不同,但SQL语言的语法结构基本是一致的。,4.1.3 SQL语言的书写准则,遵从某种准则可以提高语句的可读性,通常遵循的准则主要有:SQL语句对大小写不敏感,但关键字常用大写SQL语句可写在一行上,但为便于理解,增强条理性,常习惯于每个字句占用一行关键字不能在行与行之间分开,很少采用缩写形式SQL中的数据项需同时列出时,分隔符用“,”;字符或字符串常量的定界符用单引号“”表示,4.2 查询语句,4.2.1 基本查询4.2.2 使用列
6、表达式4.2.3 WHERE从句的进一步使用4.2.4 数据汇总4.2.5 连接查询4.2.6 嵌套查询4.2.7 联合查询4.2.8 使用系统内置函数的查询,SQL的核心是数据查询。对于数据库的查询操作是通过 SELECT 查询命令实现的,它的基本形式由 SELECTFROMWHERE 查询块组成,多个查询块可以嵌套执行。,总述,SQL查询语句的完整语法描述如下:,SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;,指定要显示的属性列,指定查询对象,指定查询条件,查询结果按指定列的值分组,筛选出只有满足指定条件的
7、组,对查询结果表按指列值的升序或降序排序,4.2.1 基本查询,最基本的查询就是从指定的表中找出符合条件的记录。这样的查询由 SELECT和 FROM 短语构成无条件查询,或由 SELECT、FROM 和 WHERE 或其他短语构成条件查询。,(1)简单的无条件查询设某个数据库中有表stu_info,请把该表中的所有记录的所有属性查询出来:,SELECT*/*表示所有字段,是通配符 FROM stu_info/选定数据库中的表,(2)简单的条件查询请查找stu_info表中所有的女生的信息。,SELECT*FROM stu_info WHERE xbm=女/设定条件,在SELECT子句中可以决
8、定哪些列出现在结果关系中,这相当于关系代数中的投影运算。具体办法:在SELECT子句之后不是写“*”,而是根据需要列出在FROM子句中声明的诸关系的属性。例:SELECT xh,xm/选定字段FROM stu_info/选定数据库中的表WHERE xbm=女/设定条件,(3)查询语句中的投影操作,使用 SQL 的SELECT 可以将查询结果排序,排序的短语是 ORDER BY,具体格式如下:SELECT 列名1,列名2,FROM 表名 WHERE 条件表达式 ORDER BY 列名1 ASC|DESC,列名2ASC|DESC按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。,(4)
9、设定排序条件,下面是使查询结果排序的例子:SELECT*/“*”表示所有字段 FROM stu_info/选定数据库中的表 WHERE xbm=女/设定条件 ORDER BY xh/设定排序字段,在查询过程中经常会出现一些重复记录,例如“SELECT bh FROM stu_info”。其查询结果将会有多个重复的班级名,显然这种结果不能令人满意。因此需要去掉重复值,此时需要指定 DISTINCT 短语:SELECT DISTINCT bh FROM stu_info 这里短语DISTINCT 的作用是去掉查询结果中的重复值。执行结果中班级名都不重复。,(5)限定重复记录,4.2.2 使用列表达
10、式,在 SQL中,指定列的方法我们学习了以下两种:(1)指定列(2)使用通配符*第(3)种是:可用列表达式,来获取经过计算的查询结果。列表达式不仅可以是算术表达式,还可以是字符串常量、函数等。,(6)计算列值,SELECT 学号,xh,年龄,YEAR(GETDATE()-YEAR(CSRQ),bhFROM stu_info,(7)修改查询结果的列标题,(1)SELECT YEAR(GETDATE()-YEAR(CSRQ)AS 年龄,nl FROM stu_info(2)SELECT 学号=xh,nl FROM stu_info(3)SELECT xh 学号,nl FROM stu_info,查
11、询工作的关键就在通过分析怎样把实际问题中的自然语言描述转化为1)从哪个表中查询。即:from子句2)要查询哪些列。即:select子句3)要查询的条件。即:where子句,完成查询工作的三个关键步骤,其中第3步最复杂,4.1.3 WHERE从句的进一步使用,常用的查询条件,(8)表达式比较如:SELECT*FROM stu_info WHERE nl20,(9)确定范围between and和 not between and如:查询考试成绩在60-70之间的学号、课程号、考试成绩:SELECT xh,kch,kscjFROM xkWHERE kscj BETWEEN 60 AND 70,(10
12、)确定集合,IN 和 NOT IN例:查询复材0108、复材0109班的学生的信息SELECT xh,xm,xbm,bhFROM stu_infoWHERE bh IN(复材0108,复材0109),(11)字符匹配,NOT LIKE 和 LIKE 与%和 _ 搭配。,%代表任意长度的字符串.如 a%b:acb,addgb 等都满足匹配_(下横线)代表任意单个字符。,例:查询班级名中第1个字为“计”字的学生信息:SELECT*FROM stu_info WHERE bh like 计%例:查询名字中第2个字为“宁”字的学生信息:SELECT*FROM stu_info WHERE xm lik
13、e _宁%,例:查询DB_Design课程的课程号和学分。SELECT ckh,kcxf FROM GCourse WHERE km LIKE DB_Design ESCAPE 例:查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。SELECT*FROM GCourse WHERE km LIKE DB_%i_ _ ESCAPE,当用户要查询的字符串本身就含有%或 _ 时,要使用 ESCAPE 换码字符 短语对通配符进行转义。,(12)涉及空值的查询,SELECT*FROM stu_info WHERE bh IS NULL,(13)多重条件查询,用逻辑运算符and和or连接,and的
14、优先级高于or。如:查询应什么班,姓刘的学生。SELECT*FROM stu_info WHERE bh like 应%and 姓名 like 刘%,4.2.4 数据汇总,(14)聚合函数,聚合函数一览表,例:查询学生总数SELECT count(*)FROM stu_info,例:已知数据库表XK中高等数学课程的代码为090101,查询学生选修高等数学的平均成绩:SELECT avg(KSCJ)AS 高等数学 FROM XK WHERE KCH=090101,(15)GROUP BY子句,Group by 子句将查询结果表按某一列或多列值分组,值相等的分为一组。如:在表xk中查询各课程编号及
15、相应的选课人数,注:GROUP BY子句中不能使用聚合函数,并且必须在GROUP BY子句中列出SELECT列表中所有的非聚合项。,例:在表stu_info中查询每个专业的男生、女生人数,在group by子句后面加WITH ROLLUP或WITH CUBE,如果还要显示每个专业的总人数及全体学生总人数,如何实现?,SELECT kch,count(xh)FROM xk GROUP BY kch,SELECT zyh,xbm,count(*)as 人数 FROM stu_info GROUP BY zyh,xbm,例:查询选修了3门以上课程的学生及选课数:SELECT XH,COUNT(*)F
16、ROM XKGROUP BY XHHAVING(COUNT(*)3),HAVING短语指定分组或聚合的条件。只有满足条件的分组才被选出来,HAVING一般与GROUP BY子句一起使用。,(16)HAVING 短语,SELECT XH,COUNT(*)FROM XKWHERE(XH LIKE 2001%)GROUP BY XHHAVING(COUNT(*)3),例:查询学号前四位是2001的学生的学号及选课数:,having 短语指定选择组的条件,只有满足条件的组才被选出来。一般和group by子句一起使用,where子句从基本表中选择满足条件的元组,而不是指定满足条件的分组,这是二者的根本
17、区别。,若一个查询同时涉及两个以上的表,称为连接查询。连接查询是关系数据库中最主要的查询,按连接类型可分为:内连接、外连接和交叉连接。其中内连接又分:等值连接、非等值连接和自然连接;外连接又分:左外连接、右外连接和全外连接等。,4.2.5 连 接 查 询,连接查询中用来连接两个关系的条件称为连接条件或连接谓词,格式:表名1.列名 比较运算符 表名2.列名其中比较运算符主要有:=、=、=、!=当连接运算符为=时,叫等值连接。使用其它运算符称为非等值连接。连接谓词中的列名称为连接字段。,例:查询每个学生及其选课情况,SELECT*FROM stu_info,xkWHERE stu_info.xh=
18、xk.xh,例:查询应化041班每个学生及其选修课程的情况,SELECT stu_info.xh,stu_info.xm,stu_info.bh,stu_info.xbm,xk.kch,xk.kscjFROM stu_info,xkWHERE stu_info.xh=xk.xh and stu_info.bh=应化041/复合条件连接,多表查询:涉及两个表以上的查询,SELECT xm FROM stu_info,xk,gcourseWHERE gcourse.km=数据库原理 and gcourse.kch=xk.kch and xk.xh=stu_info.xh,为了简化,表名可以取别名,
19、且别名只在本次查询有效,增加表别名后的结果:SELECT xm FROM stu_info a,xk b,gcourse cWHERE c.km=数据库原理 and c.kch=b.kch and b.xh=a.xh,例如:查询选修了有机化学这门课程的学生的姓名,下面讨论另一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。在前面的例子中,WHERE 之后是一个相对独立的条件,这个条件或者为真、或者为假。但是,有时需要用另外的方式来表达检索要求。比如,当检索关系X中的记录时,它的条件依赖于相关的关系Y中的记录属性值,这时使用SQL的嵌套查询功能将非常方便。,4
20、.2.6 嵌 套 查 询,在SQL语言中,一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。,等价形式:SELECT xm FROM stu_info,xk WHERE stu_info.xh=xk.xh and kch=05,SELECT xmFROM stu_info,例:在stu_info表中查询选修了05号课程的学生姓名,WHERE xh IN(SELECT xh FROM xk WHERE kch=05),例:查询与刘玉涛在同一个班学习的学生的学号、姓名、班级。,SELECT xh,x
21、m,bhFROM stu_infoWHERE bh IN,(17)带有in谓词的子查询,(18)带有比较运算符的子查询,例:查询与学号是20029001的学生在同一个班学习的学生,按学号排序。,SELECT xh,xm,bhFROM stu_infoWHERE bh ORDER BY xh,(SELECT bh FROM stu_info WHERE xm=刘玉涛),=(SELECT bh FROM stu_info WHERE xh=20029001),(19)带有any或all谓词的子查询,比较子查询通常用到操作符ALL、ANY。其通用格式为:ALL|ANY,例:查询其他班级中比应化041
22、班某个学生年龄小的那些学生的姓名和年龄。,SELECT xm,nl FROM stu_info WHERE bh应化041 and nl,any(select nl from stu_info where bh=应化041),(20)带有exists谓词的子查询,EXISTS是测试子查询是否有数据行返回,有则返回TRUE,否则返回FALSE。,例:查询选修了高等数学(090101)的学生姓名、性别和班级。SELECT xm,xbm,bh FROM stu_infoWHERE exists(select*from xk where xh=stu_info.xh and kch=090101),例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 语言 SQL
链接地址:https://www.31ppt.com/p-5928588.html