04关系数据库语言SQL

上传人:宝路 文档编号:48240419 上传时间:2018-07-12 格式:PPT 页数:77 大小:463.13KB
返回 下载 相关 举报
04关系数据库语言SQL_第1页
第1页 / 共77页
04关系数据库语言SQL_第2页
第2页 / 共77页
04关系数据库语言SQL_第3页
第3页 / 共77页
04关系数据库语言SQL_第4页
第4页 / 共77页
04关系数据库语言SQL_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《04关系数据库语言SQL》由会员分享,可在线阅读,更多相关《04关系数据库语言SQL(77页珍藏版)》请在金锄头文库上搜索。

1、第四章 关系数据库语言SQL第四章 关系数据库语言SQL4.1 SQL简介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提出,当时称为 SEQ

2、UEL(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、I

3、nformix、DB2、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、4)1992年ISO又推出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生命周期的全部活动,其中包括建立数据库、建立用户账号 、定义关系模式、查询及数据维护、数据库安全控制等。 (

5、3)两种使用方式,统一的语法结构:两种使用方式: 自含式语言与嵌入式语言自含式方式就是联机交互使用方式;嵌入式方式是指SQL语句嵌入某种高级程序设计语言的程序中,以实现数据库操作。尽管这两种使用方式不同,但SQL语言的语法结构基本是一致的。4.1.3 SQL语言的书写准则遵从某种准则可以提高语句的可读性,通常遵循的准则主要有: SQL语句对大小写不敏感,但关键字常用大写 SQL语句可写在一行上,但为便于理解,增强条理性,常习惯于每个字句占用一行 关键字不能在行与行之间分开,很少采用缩写形 式 SQL中的数据项需同时列出时,分隔符用“,”; 字符或字符串常量的定界符用单引号“ ”表示4.2 查询

6、语句4.2.1 基本查询4.2.2 使用列表达式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 WH

8、ERE xbm=女 /设定条件在SELECT子句中可以决定哪些列出现在结果关系中,这相当于关系代数中的投影运算。具体办法:在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 | DES

9、C按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。(4)设定排序条件下面是使查询结果排序的例子:SELECT * /“*”表示所有字段 FROM stu_info /选定数据库中 的表 WHERE xbm=女 /设定条件 ORDER BY xh /设定排序字段 在查询过程中经常会出现一些重复记录, 例如“SELECT bh FROM stu_info”。其查询结果将会有多个重复的班级名,显然这种结果不能令人满意 。因此需要去掉重复值,此时需要指定 DISTINCT 短语:SELECT DISTINCT bh FROM stu_info 这里短语DISTINCT 的作用是去掉查询结

10、果中的重复值。执行结果中班级名都不重复。 (5)限定重复记录4.2.2 使用列表达式在 SQL中,指定列的方法我们学习了以下两种:(1)指定列 (2)使用通配符*第(3)种是:可用列表达式,来获取经过计算的查询结果。列表达式不仅可以是算术表达式,还可以是字符串常量、函数等。(6) 计算列值SELECT 学号,xh,年龄, YEAR(GETDATE( )-YEAR(CSRQ),bh FROM stu_info(7) 修改查询结果的列标题(1) SELECT YEAR(GETDATE( )-YEAR(CSRQ) AS 年龄, nlFROM stu_info (2) SELECT 学号=xh, nl

11、FROM stu_info(3) SELECT xh 学号, nlFROM stu_info查询工作的关键就在通过分析怎样把实际问 题中的自然语言描述转化为1)从哪个表中查询。即:from子句2)要查询哪些列。 即:select子句3) 要查询的条件。 即:where子句完成查询工作的三个关键步骤其中第3步最复杂4.1.3 WHERE从句的进一步使用常用的查询条件查询条件谓词比较= = ! !20(9)确定范围between and和 not between and如:查询考试成绩在60-70之间的学号、课程号、考试成绩: SELECT xh, kch, kscjFROM xkWHERE ks

12、cj BETWEEN 60 AND 70(10)确定集合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_infoWHERE bh like 计% 例:查询名字中第2个字为“宁”字的学生信息:SEL

13、ECT * FROM stu_infoWHERE xm like _宁% 例:查询DB_Design课程的课程号和学分。SELECT ckh,kcxfFROM GCourseWHERE km LIKE DB_Design ESCAPE 例:查询以“DB_“开头,且倒数第3个字符为 i的课程的 详细情况。SELECT *FROM GCourseWHERE km LIKE DB_%i_ _ ESCAPE 当用户要查询的字符串本身就含有 % 或 _ 时,要使用 ESCAPE 换码字符 短语对通配符进行转义。(12) 涉及空值的查询SELECT * FROM stu_info WHERE bh IS

14、NULL(13) 多重条件查询用逻辑运算符and和or连接,and的优先 级高于or。如:查询应什么班,姓刘的学生。 SELECT * FROM stu_info WHERE bh like 应% and 姓名 like 刘%4.2.4 数据汇总(14)聚合函数count (*)统计元组(记录)个数count(distinct | all)统计一列中值的个数sum(distinct | all)求一列值的总和(数值 型) avg(distinct | all)求一列值的平均数max(distinct | all)求一列值中的最大值min(distinct | all)求一列值中的最小值聚合函数

15、一览表例:查询学生总数SELECT count(*) FROM stu_info例:已知数据库表XK中高等数学课程的代 码为090101,查询学生选修高等数学的平均成绩:SELECT avg(KSCJ) AS 高等数学FROM XKWHERE KCH=090101(15)GROUP BY子句Group by 子句将查询结果表按某一列或多列值分组,值相 等的分为一组。 如:在表xk中查询各课程编号及相应的选课人数注:GROUP BY子句中不能使用 聚合函数,并且必须在GROUP BY子句中列出SELECT列表中所 有的非聚合项。例:在表stu_info中查询每个专业的男生、女生人数在group by子句后面加WITH ROLLUP或WITH CUBE如果还要显示每个专 业的总人数及全体学 生总人数,如何实现 ?SELECT kch,count(xh) FROM xkGROUP BY kchSELECT zyh, xbm, count(*) as 人数 FROM stu_infoGROUP BY zyh, xbm例:查询选修了3门以上课程的学生及选课数:SELECT XH, COUNT(*) FROM

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号