第3章 创建数据库 重点内容: 创建数据库和表 列约束 创建索引 修改数据库和表 删除数据库和表.

Slides:



Advertisements
Similar presentations
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
数据查询 单表查询 连接查询 嵌套查询 集合查询.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
關聯查詢.
SQL的简单查询.
第4章 查询数据和修改数据.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
数据库及应用 授课教师:岳静 教学网站: Tel:
第2讲 Transact-SQL语言.
数据库技术 实践.
Chap 11 SQL基本查詢指令.
第3章 SQL语言初步 2017/3/14.
使用SQL Server Management Studio 进行数据查询与维护
10.2 立方根.
第一讲 数据查询优化.
Oracle数据库 Oracle 子程序.
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
2-7、函数的微分 教学要求 教学要点.
在PHP和MYSQL中实现完美的中文显示
第五讲 利用视图进行查询优化.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
第 8 章 資料的 新增、修改與刪除.
資料庫系統 Database Systems
第4章 数据的查询与更新 4.1 SQL查询语句格式 4.2 简单查询 4.3 统计查询 4.4 连接查询 4.5 嵌套查询
实验 2:MS Access QBE Query使用
SQL Injection.
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
SPARQL若干问题的解释 刘颖颖
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
MySQL 結構化查詢語言 MySQL.
数据库基础 1.
第二章 Java语言基础.
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第6章 SQL基础 本章概述 本章要点 教学过程.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第一章 函数与极限.
SQL 范引娣.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
VB与Access数据库的连接.
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
用计算器开方.
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
Web安全基础教程
第07章 操作查询和SQL查询 操作查询是Microsoft Access 2007查询中的重要组成部分,利用它可以对数据库中的数据进行简单的检索、显示和统计,而且可以根据需要对数据库进行修改。SQL是一种结构化查询语言,也是一种功能极其强大的关系数据库语言。本章将介绍在Access中创建操作查询和SQL查询。
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
学习目标 1、limit的作用 2、实例操作.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
学习目标 1、如何对结果进行分组 2、分组函数的一些实用方法.
第十一章 查询.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
VB与Access数据库的连接.
WEB程序设计技术 数据库操作.
第4章 数据查询.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第 9 章 查詢資料- 善用 SELECT 敘述.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第3章 创建数据库 重点内容: 创建数据库和表 列约束 创建索引 修改数据库和表 删除数据库和表

一、子查询定义 子查询(subquery)就是嵌套在另一个查询语句中的SELECT语句,那个外部的查询语句称作为该子查询的外围查询,而这个子查询则称为被嵌套查询。子查询的结果将作为外围查询的参数,这种关系就好像我们的函数调用的嵌套,将一个函数调用作为另一个函数的输入参数。 子查询的外围查询可以是多种SQL语句:子查询可以嵌套在另一个SELECT语句的FROM子句、WHERE子句或者是HAVING子句中,它还可以嵌套在INSERT语句、UPDATE语句和DELETE语句中,甚至子查询的外围查询也可以是一个子查询,即嵌套子查询。 子查询具有两种不同处理方式的类型:子查询的两种不同处理方式的类型是:相关子查询(correlated subquery)和无关子查询(noncorrelated subquery)。无关子查询语句的运行和它的外围查询关系密切,而无关子查询运行是不需要和外围查询发生联系。 子查询有多种用途:随着子查询返回的数据类型的不同,它的用途也随着发生变化。

二、子查询和连接 在实际的SQL语句的编写中,需要在多个表的基础上运行一个查询语句的情况也是很常见的。在这两种情况下,可以在查询语句编写中使用表的自连接和连接,也可以使用子查询。一般来说,这两种结构的查询语句的结果是相同的,性能也差不多,选用哪种方式可以依据自己的习惯。 当需要使用聚集函数,并将它的值和其它值进行比较时,要使用子查询;当查询的结果要显示多个表的内容时,要使用连接。在其它的子查询和连接可以相互替换的情况下,由于性能相近,使用何种方式就依赖个人的风格习惯了。

三、子查询类型 1、无关子查询 无关子查询是这样的一种查询,它在外围查询之前执行,然后返回数据供外围查询使用,它和外围查询的联系仅此而已。在编写嵌套了子查询的SQL语句时,如果被嵌套的查询中不包含对于外围查询的任何引用,就可以使用无关子查询。编写无关子查询的方式有很多种,最常见的是在IN子句中嵌套。 SELECT select_list FROM table_name[, table_name, ...] WHERE column_name IN (SELECT [DISTINCT] column FROM table_name [WHERE condition])

三、子查询类型 2、相关子查询 相关子查询和无关子查询的定义是相对的。它是这样的一种查询,在该子查询执行时要使用到外围查询的数据。子查询执行结束后再将它的查询结果返回到它的外围查询中,供外围查询比较使用。 SELECT dno Department, name Manager FROM Employee e WHERE 0 <= ANY (SELECT MONTHS_BETWEEN(mgrstrdate, ’2002-01-01’) FROM Department WHERE e.id = mgrid)

四、子查询的规则 使用子查询的限制主要是指对子查询的SELECT列表和子查询中对函数指定的一些限制。 (1)由比较运算符或关键字IN引入的内层子查询的SELECT列表中只允许有一项内容,即只能是一个列名或表达式。而且在子查询的SELECT列表中命名的列必须能与在外围语句的WHERE子句中命名的列连接兼容。 (2)在使用关键字EXISTS引入的子查询的SELECT列表中不需要指定具体的列名,可以都由星号“*”组成,这是因为这种情况下只需要测试任何一个符合标准的行的存在。或者也可以在子查询的WHERE子句中加入行的限定语句。 (3)子查询不能包括ORDER BY子句,因为子查询不需要在内部处理它们的查询结果。但是使用关键字DISTINCT也可以有效地对查询结果进行排序,因为一些系统是通过首先给结果排序来消除复制的。 (4)由后面不跟关键字ANY或ALL的比较运算符所引入的子查询除非预先确定了它只能成组返回单个的值,否则不允许使用GROUP BY或HAVING子句。

五、返回多个值的子查询 1、IN的使用 在IN子句中,子查询和手动输入一组数据的区别就在于,我们手动输入时,一般都会输入两个或两个以上的数值,而使用子查询时,不能确定它返回的结果的数量。但是,即使子查询返回的结果为空,语句也能正常运行。  Results manager mgrid ———— ——— 林志千 1001 陈广海 2001 张宇 3001 张峰 4001 李志深 5001 魏成 6001 [6rows] SELECT name manager, id mgrid FROM Employee WHERE id IN (SELECT mgrid FROM Department)

五、返回多个值的子查询 2、NOT IN的使用 子查询还可以用在外围查询的NOT IN子句中,以产生NOT IN使用的清单。NOT IN的使用和IN的使用基本一样。如果外围查询中用来比较的记录值被检测出与子查询产生的结果集中的所有值都不匹配,那么NOT IN子句就返回“真”,然后将该记录指定列的值输入到最终的结果集中。 Results Name sex ———— ——— 李明 男 李大平 男 林国荣 男 庞文凯 男 刘燕 女 林志祥 男 吴忠彦 男 魏箐 女 王静 女 张敏燕 女 魏华翔 男 王亚鹏 男 林雪飞 女 姜艳成 女 梁朝阳 男 王力刚 男 余文惠 女 陈志强 男 [18rows] SELECT name, sex FROM Employee WHERE id NOT IN (SELECT mgrid FROM Department)

五、返回多个值的子查询 3、IN与相关子查询的联合使用 IN与相关子查询联合使用: SELECT pno Project, name Manager, dno Department FROM Employee e WHERE ’2001’ IN (SELECT TO_CHAR(pstrdate, ’YYYY’) FROM Project WHERE e.id = pmgrid) ORDER BY pno Results Project manager Department ———— ————— ———— 101 李明 1 102 林志千 1 103 林志千 1 201 魏华翔 4 203 魏华翔 4 303 林志千 1 [6rows] 用户可以使用下面的连接或无关子查询来替换上面的IN与相关子查询联合使用的SQL语句,而且可能获得更好的性能 。 SELECT e.pno Project, e.name Manager, e.dno Department FROM Employee e, Project p WHERE TO_CHAR(p.pstrdate, ’YYYY’) = ’2001’ AND e.id = p.pmgrid) ORDER By e.pno SELECT pno Project, name Manager, dno Department FROM Employee WHERE id IN (SELECT pmgrid FROM Project WHERE TO_CHAR(pstrdate, ’YYYY’) = ’2001’) ORDER BY pno

五、返回多个值的子查询 4、交集和差集的查询:EXISTS 使用关键字EXISTS引入子查询可以将该子查询用作存在性测试,即测试是否存在满足子查询准则的数据。如果子查询返回的结果是空集,则判断为不存在,即EXISTS失败,NOT EXISTS成功。如果子查询返回至少一行的数据记录,则判断为存在,即EXISTS成功,NOT EXISTS失败。 关键字EXISTS一般直接跟在外围查询的WHERE关键字后面。它的前面没有列名、常量或者表达式; 关键字EXISTS引入的子查询的SELECT列表清单可以而且通常都是由星号“*”组成的。因为我们只是测试满足子查询的数据行的存在性,在子查询的SELECT列表清单中加入列名没有实际意义。

五、返回多个值的子查询 5、空集的查询:NOT EXISTS 因为使用了关键字EXISTS的子查询在检索到一个为真的结果后就可以停止查询,所以当满足条件的行数比较多时,用户可以使用EXISTS来代替一些有相同的结果但是性能不如EXISTS子查询的SQL语句。

五、返回多个值的子查询 7、ANY的使用 使用关键字ANY引入子查询时,外层查询使用指定的数据值,按照特定的比较运算符与子查询结果集中的每一个值进行比较。如果有一个比较为真,则和整个子查询结果集的比较就为真。 8、ALL的使用 关键字ALL与ANY的区别在于:使用关键字ALL引入子查询时,外层查询使用指定的数据值按照特定的比较运算符与子查询结果集中的每一个值进行比较。如果有一个比较为假,则和整个子查询结果集的比较就为假,只有所有的比较结果都为真,和整个子查询结果集的比较才为真。

六、返回单个值的子查询 1、比较运算符和相关子查询 在保证相关子查询每一次运行返回的结果都是单个值的情况下就可以使用标准比较运算符来直接引入该相关子查询。  Results name sex id ———— —— —— 张峰 男 4001 张敏燕 女 4002 魏华翔 男 4003 王亚鹏 男 4004 林雪飞 女 4005 姜艳成 女 4006 [6rows] SELECT name, sex, id FROM Employee e WHERE ’技术部’ = (SELECT dname FROM Department WHERE e.dno = dnumber) ORDER BY id

六、返回单个值的子查询 2、聚集函数和子查询 只要不使用GROUP BY子句,在SELECT清单中使用了聚集函数的子查询就总是会返回单个值。因此,我们就能使用标准的比较运算符来直接引入这种使用了聚集函数的子查询。 3、返回单个值的GROUP BY和HAVING子句 只有确定我们在子查询中使用的GROUP BY子句和HAVING子句返回的是单个的值,才能使用标准比较运算符来引入该子查询。

七、子查询的嵌套 1、嵌套子查询 子查询可以嵌套在一般的查询语句中一样,子查询本身也可以包含子查询,而且可以是任意多个,这就是嵌套子查询。对嵌套子查询来说,随着嵌套层数的增加,查询语句的性能会不断下降,这也是嵌套子查询的唯一限制。 2、子查询与连接结合 子查询和连接各有优缺点。使用子查询可以计算一个变化的聚集值并返回到外围查询进行比较,连接查询做不到这一点。而使用连接可以在查询语句的最后结果显示多个表中的数据,子查询做不到这一点。如果我们同时使用子查询和连接就可以利用它们的优势而避免它们的缺陷

七、子查询的嵌套 3、在HAVING子句中使用子查询 4、在UPDATE,DELETE和INSERT中使用子查询 在编写UPDATE和DELETE语句时,一般在它们的WHERE子句中使用子查询来代替连接,因为很多数据库都不支持在这两种语句中使用连接来对多个表进行操作。INSERT语句中没有WHERE子句,但是它也可以和子查询一起使用。 SELECT dno, AVG(salary) FROM Employee GROUP BY dno HAVING AVG(salary) > (SELECT AVG(salary) FROM Employee)  Results Dno AVG(salary) —— ———— 4 5166.67. 6 4500.00 [2rows]

七、子查询的嵌套 5、在FROM中使用子查询 ANSI标准允许在查询语句的FROM子句中使用子查询。在FROM子句中使用的子查询相当于一个虚拟表,和视图的作用差不多。 SELECT MAX(temp.avg_salary) FROM ( SELECT dno, AVG(salary) avg_salary FROM Employee GROUP BY dno) temp   Results MAX(temp.avg_salary) ————— 5166.67. [1rows]

本章小结: 掌握子查询的定义和规则 了解子查询的类型 掌握各种子查询的使用方法