有的時候,我們有需要將由不同欄位獲得的資料串聯在一起。每一種資料庫都有提供方法來達到這個目的:
- MySQL: CONCAT()
- Oracle: CONCAT(), ||
- SQL Server: +
CONCAT() 的文法如下:
CONCAT(字串1, 字串2, 字串3, ...): 將字串1、字串2、字串3,等字串聯在一起。請注意,Oracle的CONCAT()只允許兩個參數;換言之,一次只能將兩個字串串聯起來。不過,在Oracle中,我們可以用'||'來一次串聯多個字串。
來看幾個例子。假設我們有以下的表格:
Geography 表格
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San 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';
結果:
'East Boston'
SQL 中的 substring 函數是用來抓出一個欄位資料中的其中一部分。這個函數的名稱在不同的資料庫中不完全一樣:
- MySQL: SUBSTR(), SUBSTRING()
- Oracle: SUBSTR()
- SQL Server: SUBSTRING()
最常用到的方式如下 (在這裡我們用SUBSTR()為例):
SUBSTR(str,pos): 由<str>中,選出所有從第<pos>位置開始的字元。請注意,這個文法不適用於SQL Server上。
SUBSTR(str,pos,len): 由<str>中的第<pos>位置開始,選出接下去的<len>個字元。
假設我們有以下的表格:
Geography 表格
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
例1:
SELECT SUBSTR(store_name, 3)
FROM Geography
WHERE store_name = 'Los Angeles';
結果:
's Angeles'
例2:
SELECT SUBSTR(store_name,2,4)
FROM Geography
WHERE store_name = 'San Diego';
結果:
'an D'
MINUS 指令是運用在兩個 SQL 陳述式上。它先找出第一個 SQL 陳述式所產生的結果,然後看這些結果有沒有在第二個 SQL 陳述式的結果中。如果有的話,那這一筆資料就被去除,而不會在最後的結果中出現。如果第二個 SQL 陳述式所產生的結果並沒有存在於第一個 SQL 陳述式所產生的結果內,那這筆資料就被拋棄。
MINUS 的文法如下:
[SQL 陳述式 1]
MINUS
[SQL 陳述式 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 |
| Jan-12-1999 |
$750 |
|
而我們要知道有哪幾天是有店面營業額而沒有網路營業額的。要達到這個目的,我們用以下的 SQL 陳述式:
SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales
結果:
| Date |
| Jan-05-1999 |
| Jan-08-1999 |
"Jan-05-1999", "Jan-07-1999", and "Jan-08-1999" 是 "SELECT Date FROM Store_Information" 所產生的結果。在這裡面,"Jan-07-1999" 是存在於 "SELECT Date FROM Internet_Sales" 所產生的結果中。因此 "Jan-07-1999" 並不在最後的結果中。
請注意,在 MINUS 指令下,不同的值只會被列出一次。
<轉自:http://sql.1keydata.com/cn/sql-minus.php >