SQL Subquery的用法
我们可以在一个 SQL 语句中放入另一个 SQL 语句。当我们在 WHERE 子句或 WHERE 子句或 HAVING 子句中插入另一个 SQL 语句时,我们就有一个 subquery 的架构。 Subquery 的作用是什么呢?第一,它可以被用来连接表格。另外,有的时候 subquery 是唯一能够连接两个表格的方式。
Subquery 的语法如下:
SELECT "栏位1"
from "表格"
WHERE "栏位2" [比较运算素]
(SELECT "栏位1"
from "表格"
WHERE [条件])
[比较运算素] 可以是相等的运算素,例如 =, >, <, >=, <=. 这也可以是一个对文字的运算素,例如 "LIKE."
我们就用刚刚在阐述 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 来找出所有在西部的店的营业额。我们可以用下面的 SQL 来达到我们的目的:
SELECT SUM(Sales) from Store_Information
WHERE Store_name IN
(SELECT store_name from Geography
WHERE region_name = 'West')
结果:
SUM(Sales)
2050
在这个例子中,我们并没有直接将两个表格连接起来,然后由此直接算出每一间西区店面的营业额。我们做的是先找出哪些店是在西区的,然后再算出这些店的营业额总共是多少。
相关文档:
SQL语句优化技术分析
最近几周一直在进行数据库培训,老师精湛的技术和生动的讲解使我受益匪浅。为了让更多的新手受益,我抽空把SQL语句优化部分进行了整理,希望大家一起进步。
一、操作符优化
1、IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较 ......
在 SQL 中,在两个情况下会用到 IN 这个指令;这一页将介绍其中之一━━与 WHERE 有关的那一个情况。在这个用法下, 我们事先已知道至少一个我们需要的值,而我们将这些知道的值都放入 IN 这个子句。 IN 指令的语法为下:
SELECT "栏位名"
from "表格名"
WHERE "栏位名" IN ('值一', '值二', ...)
在括弧内可以有一 ......
LIKE 是另一个在 WHERE 子句中会用到的指令。基本上,LIKE 能让我们依据一个套式 (pattern) 来找出我们要的资料。相对来说,在运用 IN 的时候,我们完全地知道我们需要的条件;在运用 BETWEEN 的时候,我们则是列出一个范围。 LIKE 的语法如下:
SELECT "栏位名"
from "表格名"
WHERE "栏位名" LIKE {套式}
{套式} ......
接下来,我们讨论 alias (别名) 在 SQL 上的用处。最常用到的别名有两种: 栏位别名及表格别名。
简单地来说,栏位别名的目的是为了让 SQL 产生的结果易读。在之前的例子中, 每当我们有营业额总合时,栏位名都是 SUM(sales)。 虽然在这个情况下没有什么问题,可是如果这个栏位不是一个简单的总合,而是一个复杂的计算, ......
现在我们介绍连接(join)的概念。要了解连接,我们需要用到许多我们之前已介绍过的指令。 我们先假设我们有以下的两个表格,
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-199 ......