SQL语句及其关键字总结(三)
1.SQL外部连接
之前我们看到的左连接 (left join),又称内部连接 (inner join)。在这个情况下,要两个表格内都有同样的值,那一笔资料才会被选出。那如果我们想要列出一个表格中每一笔的资料,无论它的值在另一个表格中有没有出现,那该怎么办呢?在这个时候,我们就需要用到 SQL OUTER JOIN (外部连接) 的指令。
外部连接的语法是依数据库的不同而有所不同的。举例来说,在 Oracle 上,我们会在 WHERE 子句中要选出所有资料的那个表格之后加上一个 "(+)" 来代表说这个表格中的所有资料我们都要。
假设我们有以下的两个表格:
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Geography 表格
Region_Name | Store_Name |
East | Boston |
East | New York |
West | Los Angeles |
West | San Diego |
我们需要知道每一间店的营业额。如果我们用一个普通的连接,我们将会漏失掉 'New York' 这个店,因为它并不存在于 Store_Information 这个表格。所以,在这个情况下,我们需要用外部连接来串联这两个表格:
FROM Georgraphy A1, Store_Information A2
WHERE A1.Store_Name = A2.Store_Name (+)
GROUP BY A1.Store_Name;
我们在这里是使用了 Oracle 的外部连接语法。
结果:
Store_Name | SALES |
Boston | 700 |
New York | |
Los Angeles | 1800 |
San Diego | 250 |
请注意: 当第二个表格没有相对的资料时,SQL 会传回 NULL 值。在这一个例子中,'New York' 并不存在于 Store_Information 表格,所以它的 "SALES" 栏位是 NULL。
2.Subquery
我们可以在一个 SQL 语句中放入另一个 SQL 语句。当我们在 WHERE 子句或 HAVING 子句中插入另一个 SQL 语句时,我们就有一个 subquery 的架构。 Subquery 的作用是什么呢?第一,它可以被用来连接表格。另外,有的时候 subquery 是唯一能够连接两个表格的方式。
Subquery 的语法如下:
FROM "表格"
WHERE "栏位2" [比较运算素]
(SELECT "栏位1"
FROM "表格"
WHERE "条件");
[比较运算素] 可以是相等的运算素,例如 =, >, <, >=, <=. 这也可以是一个对文字的运算素,例如 "LIKE"。
我们就用刚刚在阐述 SQL 连接时用过的例子:
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Geography 表格
Region_Name | Store_Name |
East | Boston |
East | New York |
West | Los Angeles |
West | San Diego |
我们要运用 subquery 来找出所有在西部的店的营业额。我们可以用下面的 SQL 来达到我们的目的:
WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West');
结果:
SUM(Sales) |
2050 |
在这个例子中,我们并没有直接将两个表格连接起来,然后由此直接算出每一间西区店面的营业额。我们做的是先找出哪些店是在西区的,然后再算出这些店的营业额总共是多少。
3.UNION
UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION 这个指令时,我们只会看到不同的资料值 (类似 SELECTDISTINCT)。
UNION 的语法如下:
UNION
[SQL 语句 2];
假设我们有以下的两个表格,
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Internet Sales 表格
Txn_Date | Sales |
07-Jan-1999 | 250 |
10-Jan-1999 | 535 |
11-Jan-1999 | 320 |
12-Jan-1999 | 750 |
而我们要找出来所有有营业额 (Sales) 的日子。要达到这个目的,我们用以下的 SQL 语句:
UNION
SELECT Txn_Date FROM Internet_Sales;
结果:
Txn_Date |
Jan-05-1999 |
Jan-07-1999 |
Jan-08-1999 |
Jan-10-1999 |
Jan-11-1999 |
Jan-12-1999 |
有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 SELECT DISTINCT Txn_Date 的话,那我们会得到完全一样的结果。
4.UNION ALL
UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2];
我们用和上一页同样的例子来显示出 UNION ALL 和 UNION 的不同。同样假设我们有以下两个表格,
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Internet Sales 表格
Txn_Date | Sales |
07-Jan-1999 | 250 |
10-Jan-1999 | 535 |
11-Jan-1999 | 320 |
12-Jan-1999 | 750 |
而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 SQL 语句:
UNION ALL
SELECT Txn_Date FROM Internet_Sales;
结果:
Txn_Date |
Jan-05-1999 |
Jan-07-1999 |
Jan-08-1999 |
Jan-08-1999 |
Jan-07-1999 |
Jan-10-1999 |
Jan-11-1999 |
Jan-12-1999 |
5.INTERSECT
和 UNION 指令类似,INTERSECT 也是对两个 SQL 语句所产生的结果做处理的。不同的地方是,UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选出),而 INTERSECT 则比较像 AND ( 这个值要存在于第一句和第二句才会被选出)。UNION 是联集,而 INTERSECT 是交集。
INTERSECT 的语法如下:
INTERSECT
[SQL语句 2];
假设我们有以下的两个表格,
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Internet Sales 表格
Txn_Date | Sales |
07-Jan-1999 | 250 |
10-Jan-1999 | 535 |
11-Jan-1999 | 320 |
12-Jan-1999 | 750 |
而我们要找出哪几天有店面交易和网络交易。要达到这个目的,我们用以下的 SQL 语句:
INTERSECT
SELECT Txn_Date FROM Internet_Sales;
结果:
Txn_Date |
Jan-07-1999 |
请注意,在 INTERSECT 指令下,不同的值只会被列出一次。
6.MINUS
MINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。
MINUS 的语法如下:
MINUS
[SQL 语句 2];
我们继续使用一样的例子:
Store_Information 表格
Store_Name | Sales | Txn_Date |
Los Angeles | 1500 | 05-Jan-1999 |
San Diego | 250 | 07-Jan-1999 |
Los Angeles | 300 | 08-Jan-1999 |
Boston | 700 | 08-Jan-1999 |
Internet Sales 表格
Txn_Date | Sales |
07-Jan-1999 | 250 |
10-Jan-1999 | 535 |
11-Jan-1999 | 320 |
12-Jan-1999 | 750 |
而我们要知道有哪几天是有店面营业额而没有网络营业额的。要达到这个目的,我们用以下的 SQL 语句:
MINUS
SELECT Txn_Date FROM Internet_Sales;
结果:
Txn_Date |
Jan-05-1999 |
Jan-08-1999 |
'Jan-05-1999', 'Jan-07-1999', 和 'Jan-08-1999' 是 "SELECT Txn_Date FROM Store_Information" 所产生的结果。在这里面,'Jan-07-1999' 是存在于 "SELECT Txn_Date FROM Internet_Sales" 所产生的结果中。因此 'Jan-07-1999' 并不在最后的结果中。
请注意,在 MINUS 指令下,不同的值只会被列出一次。
相关推荐
以下是对这些类别中常见SQL语句的详细介绍: 1. **DDL(数据定义语言)**: - `CREATE DATABASE`: 用于创建新的数据库,例如`CREATE DATABASE database-name`。 - `ALTER DATABASE`: 修改已存在的数据库结构。 -...
这些关键字在SQL语句中有特定的意义,不能用作标识符(如表名、列名等)。本文将详细介绍Microsoft SQL Server中的保留关键字及其用途。 #### 一、SQL Server 保留关键字分类 SQL Server 的保留关键字可以分为以下...
### SQL 常用关键字解析 ...总结以上内容,我们介绍了 SQL 语言中的一些常用关键字,这些关键字对于进行有效的数据操作至关重要。了解和熟练掌握这些关键字及其用法,可以帮助开发者更高效地管理和操作数据。
`SELECT`语句是最常用的SQL语句之一,用于从表中检索数据。 **示例代码:** ```sql SELECT * FROM test_table; ``` - `SELECT *`表示选择所有列。 - `FROM`后跟表名。 ### 删除表 (DROP TABLE) `DROP TABLE`语句...
学习并熟练掌握这些SQL语句将使你能够高效地操作和管理数据库,无论是在开发、数据分析还是数据库管理领域,SQL都是不可或缺的基础技能。通过"SQL 语句大全"文档,你可以深入理解并实践这些知识点,提升自己的数据库...
### SQL语句教程及总结 #### 一、SQL指令概览 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它主要用于处理存储在数据库中的数据,包括存储、读取和处理等功能。本教程...
### SQL语句实例及常用语句总结 #### 一、表操作 **1. 创建表** - **示例1**: 对于表的教学管理数据库中的表`STUDENTS`,可以定义如下: ```sql CREATE TABLE STUDENTS ( SNO NUMERIC(6,0) NOT NULL, SNAME...
本文将根据提供的标题、描述、标签以及部分内容,详细解析与SQL Server相关的几个重要概念及其用法,包括`TRUNCATE TABLE`、`ALTER TABLE`(包括`ADD COLUMN`、`DROP COLUMN`)、`ADD CONSTRAINT`(涉及`PRIMARY KEY...
根据给定文件中的标题、描述、标签以及部分内容,我们可以总结出以下重要的SQL知识点: ### SQL基础知识 #### 1. 创建数据库(CREATE DATABASE) 在SQL中,`CREATE DATABASE`语句用于创建新的数据库。例如,创建...
### SQL语句运用技巧 #### 一、SQL语言概述 SQL(Structured Query Language,结构化查询语言)是一种用于处理数据库的标准计算机语言。它允许用户在数据的高层次结构上操作而无需关心具体的存储细节。SQL的强大之...
以上仅为入门级SQL语句教程的部分内容,包括了`SELECT`, `DISTINCT`, `WHERE`, `AND`, `OR`, `IN`等基本概念及其应用示例。掌握这些基础知识,是进一步学习更复杂SQL查询技术的基石。接下来的章节会涵盖`BETWEEN`, `...
本文档将详细探讨手工SQL注入的基础知识及其常用SQL语句,帮助初学者更好地理解和防范此类攻击。 #### SQL注入基础概念 SQL注入是指攻击者通过在输入字段中插入恶意SQL代码来控制或操纵数据库的一种攻击手段。这种...
以下是对文档中提到的SQL语句精华的详细解释: 1. **BETWEEN**:`BETWEEN`操作符用于选取介于两个值之间的数据,例如在例子中选取了`C0001`到`C0004`之间的客户编号。 2. **COUNT(DISTINCT column)**:这个函数...
本篇文章将带你快速入门SQL,了解基本的查询语句及其应用。 首先,SQL中的SELECT语句是最基础也是最常用的,它的主要作用是从数据库中的表格中选取数据。例如,如果我们有一个名为`Store_Information`的表格,包含...
### 使用SQL语句查询日期 #### 一、概述 在数据库操作中,经常需要根据日期进行数据筛选。本文档将详细介绍如何使用SQL语句来查询特定日期的数据,特别是使用`DATEDIFF`函数来精确地查询一天内或者一周内的数据。 ...
该算法可以将SQL查询语句中的字段、表名、函数、操作符、值和关键字转换成图结构,以便更好地理解和处理SQL查询语句。 1. SQL查询语句的图结构设计 在设计SQL查询语句的图结构时,我们首先需要定义SQL子句和关键字...
在SQLSERVER数据库管理中,掌握一系列的经典SQL语句对于数据的创建、更新、删除以及数据操作的高级应用是至关重要的。本知识点将详细介绍在SQLSERVER中一些基础和进阶SQL语句的用法,以及数据开发过程中常见操作技巧...
根据提供的文件信息,我们可以总结出一系列DBA(数据库管理员)常用的SQL语句,这些语句在Oracle数据库管理中非常实用。下面将详细解释每个SQL语句的功能及其应用场景。 ### SQL语句1:查询等待事件 ```sql select...
本文将深入探讨一个示例SQL语句中的关键知识点及其应用场景。 #### 二、SQL语句概述 给定的SQL语句主要包含了以下几个部分: 1. **SELECT子句**:用于指定要查询的数据字段。 2. **FROM子句**:指定查询所涉及的...