[计算机软件及应用]SQL语句超详细教程

上传人:公**** 文档编号:555197384 上传时间:2022-12-26 格式:DOC 页数:42 大小:248KB
返回 下载 相关 举报
[计算机软件及应用]SQL语句超详细教程_第1页
第1页 / 共42页
[计算机软件及应用]SQL语句超详细教程_第2页
第2页 / 共42页
[计算机软件及应用]SQL语句超详细教程_第3页
第3页 / 共42页
[计算机软件及应用]SQL语句超详细教程_第4页
第4页 / 共42页
[计算机软件及应用]SQL语句超详细教程_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《[计算机软件及应用]SQL语句超详细教程》由会员分享,可在线阅读,更多相关《[计算机软件及应用]SQL语句超详细教程(42页珍藏版)》请在金锄头文库上搜索。

1、我们可以在一个 SQL 语句中放入另一个 SQL 语句。当我们在 WHERE 子句或 WHERE 子句或 HAVING 子句中插入另一个 SQL 语句时,我们就有一个 subquery 的架构。 Subquery 的作用是什么呢?第一,它可以被用来连接表格。另外,有的时候 subquery 是唯一能够连接两个表格的方式。 Subquery 的语法如下: SELECT 栏位1 FROM 表格 WHERE 栏位2 比较运算素 (SELECT 栏位1 FROM 表格WHERE 条件) 比较运算素 可以是相等的运算素,例如 =, , =, =. 这也可以是一个对文字的运算素,例如 LIKE. 我们就用

2、刚刚在阐述 SQL 连接时用过的例子: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 Geography 表格 region_name store_name East Boston East New York West Los Angeles West San Diego 我们要运用 subquery 来找出所有在西部的店的营业额。我们可以

3、用下面的 SQL 来达到我们的目的: SELECT SUM(Sales) FROM Store_InformationWHERE Store_name IN(SELECT store_name FROM Geography WHERE region_name = West) 结果: SUM(Sales)2050在这个例子中,我们并没有直接将两个表格连接起来,然后由此直接算出每一间西区店面的营业额。我们做的是先找出哪些店是在西区的,然后再算出这些店的营业额总共是多少。 UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指

4、令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。 UNION 的语法如下: SQL 语句 1UNIONSQL 语句 2 假设我们有以下的两个表格, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan

5、-08-1999 Internet Sales 表格 Date Sales Jan-07-1999 $250 Jan-10-1999 $535 Jan-11-1999 $320 Jan-12-1999 $750 而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_InformationUNIONSELECT Date FROM Internet_Sales 结果: DateJan-05-1999Jan-07-1999Jan-08-1999Jan-10-1999Jan-11-1999Jan-12-1999

6、有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 SELECT DISTINCT Date 的话,那我们会得到完全一样的结果。 UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。 UNION ALL 的语法如下: SQL 语句 1UNION ALLSQL 语句 2 我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同。同样假设我们有以下两个表格, Store_Information 表格st

7、ore_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 Internet Sales 表格 Date Sales Jan-07-1999 $250 Jan-10-1999 $535 Jan-11-1999 $320 Jan-12-1999 $750 而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_Info

8、rmationUNION ALLSELECT Date FROM Internet_Sales 结果: DateJan-05-1999Jan-07-1999Jan-08-1999Jan-08-1999Jan-07-1999Jan-10-1999Jan-11-1999Jan-12-1999和 UNION 指令类似, INTERSECT 也是对两个 SQL 语句所产生的结果做处理的。不同的地方是, UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选出),而 INTERSECT 则比较像 AND ( 这个值要存在于第一句和第二句才会被选出)。 UNION 是联集,而 IN

9、TERSECT 是交集。 INTERSECT 的语法如下: SQL语句 1INTERSECTSQL语句 2 假设我们有以下的两个表格, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 Internet Sales 表格 Date Sales Jan-07-1999 $250 Jan-10-1999 $535 Jan-11-1999 $320

10、Jan-12-1999 $750 而我们要找出哪几天有店面交易和网络交易。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_InformationINTERSECTSELECT Date FROM Internet_Sales 结果: DateJan-07-1999请注意,在 INTERSECT 指令下,不同的值只会被列出一次。 MINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所

11、产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。 MINUS 的语法如下: SQL 语句 1MINUSSQL 语句 2 我们继续使用一样的例子: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 Internet Sales 表格 Date Sales Jan-07-1999 $250 Jan-10-1999 $5

12、35 Jan-11-1999 $320 Jan-12-1999 $750 而我们要知道有哪几天是有店面营业额而没有网络营业额的。要达到这个目的,我们用以下的 SQL 语句: SELECT Date FROM Store_InformationMINUSSELECT Date FROM Internet_Sales 结果: DateJan-05-1999Jan-08-1999Jan-05-1999, Jan-07-1999, and Jan-08-1999 是 SELECT Date FROM Store_Information 所产生的结果。在这里面,Jan-07-1999 是存在于 SELE

13、CT Date FROM Internet_Sales 所产生的结果中。因此 Jan-07-1999 并不在最后的结果中。 请注意,在 MINUS 指令下,不同的值只会被列出一次。 有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的: MySQL: CONCAT() Oracle: CONCAT(), | SQL Server: + CONCAT() 的语法如下: CONCAT(字串1, 字串2, 字串3, .): 将字串1、字串2、字串3,等字串连在一起。请注意,Oracle的CONCAT()只允许两个参数;换言之,一次只能将两个字串串连起来。不过,

14、在Oracle中,我们可以用|来一次串连多个字串。 来看几个例子。假设我们有以下的表格: Geography 表格 region_namestore_nameEastBostonEastNew YorkWestLos AngelesWestSan Diego例子1: MySQL/Oracle: SELECT CONCAT(region_name,store_name) FROM Geography WHERE store_name = Boston; 结果: EastBoston 例子2: Oracle: SELECT region_name | | store_name FROM Geography WHERE store_name = Boston; 结果: East Boston 例子3: SQL Server: SELECT region_name + + store_name FROM Geography WHERE store_name = Boston; 结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

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