1. 程式人生 > 其它 >SQL 入門教程:拼接欄位

SQL 入門教程:拼接欄位

目錄

目錄彙總:SQL 入門教程:面向萌新小白的零基礎入門教程

為了說明如何使用 計算欄位,我們來舉一個簡單例子,建立由兩列組成的標題。

Vendors 表包含供應商名和地址資訊。假如要生成一個供應商報表,需要在格式化的名稱(位置)中列出供應商的位置。

此報表需要一個值,而表中資料儲存在兩個列 vend_namevend_country 中。此外,需要用括號將 vend_country 括起來,這些東西都沒有儲存在資料庫表中。這個返回供應商名稱和地址的 SELECT 語句 很簡單,但我們是如何建立這個組合值的呢?

拼接(concatenate)

將值聯結到一起(將一個值附加到另一個值)構成單個值。

解決辦法是把兩個列拼接起來。在 SQL 中的 SELECT 語句中,可使用一個特殊的操作符來拼接兩個列。根據你所使用的 DBMS,此操作符可用加號(+)或兩個豎槓(||)表示。在 MySQL 和 MariaDB 中,必須使用特殊的函式。

說明:是 + 還是 ||

SQL Server 使用 + 號。DB2、Oracle、PostgreSQL 和 SQLite 使用 ||。詳細請參閱具體的 DBMS 文件。

下面是使用加號的例子(多數 DBMS 使用這種語法):

輸入▼

SELECT vend_name + '(' + vend_country + ')'
FROM Vendors
ORDER BY vend_name;

輸出▼

-----------------------------------------------------------
Bear Emporium                                (USA        )
Bears R Us                                   (USA        )
Doll House Inc.                              (USA        )
Fun and Games                                (England    )
Furball Inc.                                 (USA        )
Jouets et ours                               (France     )

下面是相同的語句,但使用的是 || 語法:

輸入▼

SELECT vend_name || '(' || vend_country || ')'
FROM Vendors
ORDER BY vend_name;

輸出▼

-----------------------------------------------------------
Bear Emporium                                (USA        )
Bears R Us                                   (USA        )
Doll House Inc.                              (USA        )
Fun and Games                                (England    )
Furball Inc.                                 (USA        )
Jouets et ours                               (France     )

下面是使用 MySQL 或 MariaDB 時需要使用的語句:

輸入▼

SELECT Concat(vend_name, ' (', vend_country, ')')
FROM Vendors
ORDER BY vend_name;

分析▼

上面兩個 SELECT 語句拼接以下元素:

  • 儲存在 vend_name 列中的名字;
  • 包含一個空格和一個左圓括號的字串;
  • 儲存在 vend_country 列中的國家;
  • 包含一個右圓括號的字串。

從上述輸出中可以看到,SELECT 語句返回包含上述四個元素的一個列(計算欄位)。

再看看上述 SELECT 語句返回的輸出。結合成一個計算欄位的兩個列用空格填充。許多資料庫(不是所有)儲存填充為列寬的文字值,而實際上你要的結果不需要這些空格。為正確返回格式化的資料,必須去掉這些空格。這可以使用 SQL 的 RTRIM() 函式來完成,如下所示:

輸入▼

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
FROM Vendors
ORDER BY vend_name;

輸出▼

-----------------------------------------------------------
Bear Emporium (USA)
Bears R Us (USA)
Doll House Inc. (USA)
Fun and Games (England)
Furball Inc. (USA)
Jouets et ours (France)

下面是相同的語句,但使用的是 ||

輸入▼

SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
FROM Vendors
ORDER BY vend_name;

輸出▼

-----------------------------------------------------------
Bear Emporium (USA)
Bears R Us (USA)
Doll House Inc. (USA)
Fun and Games (England)
Furball Inc. (USA)
Jouets et ours (France)

分析▼

RTRIM() 函式去掉值右邊的所有空格。通過使用 RTRIM(),各個列都進行了整理。

說明:TRIM 函式

大多數 DBMS 都支援 RTRIM()(正如剛才所見,它去掉字串右邊的空格)、LTRIM()(去掉字串左邊的空格)以及 TRIM()(去掉字串左右兩邊的空格)。

使用別名

從前面的輸出可以看到,SELECT 語句可以很好地拼接地址欄位。但是,這個新計算列的名字是什麼呢?實際上它沒有名字,它只是一個值。如果僅在 SQL 查詢工具中檢視一下結果,這樣沒有什麼不好。但是,一個未命名的列不能用於客戶端應用中,因為客戶端沒有辦法引用它。

為了解決這個問題,SQL 支援列別名。別名(alias)是一個欄位或值的替換名。別名用 AS 關鍵字賦予。請看下面的 SELECT 語句:

輸入▼

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
 AS vend_title
FROM Vendors
ORDER BY vend_name;

輸出▼

vend_title
-----------------------------------------------------------
Bear Emporium (USA)
Bears R Us (USA)
Doll House Inc. (USA)
Fun and Games (England)
Furball Inc. (USA)
Jouets et ours (France)

下面是相同的語句,但使用的是 || 語法:

輸入▼

SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
 AS vend_title
FROM Vendors
ORDER BY vend_name;

下面是 MySQL 和 MariaDB 中使用的語句:

輸入▼

SELECT Concat(RTrim(vend_name), ' (',
       RTrim(vend_country), ')') AS vend_title
FROM Vendors
ORDER BY vend_name;

分析▼

SELECT 語句本身與以前使用的相同,只不過這裡的計算欄位之後跟了文字 AS vend_title。它指示 SQL 建立一個包含指定計算結果的名為 vend_title 的計算欄位。從輸出可以看到,結果與以前的相同,但現在列名為 vend_title,任何客戶端應用都可以按名稱引用這個列,就像它是一個實際的表列一樣。

說明:AS 通常可選

在很多 DBMS 中,AS 關鍵字是可選的,不過最好使用它,這被視為一條最佳實踐。

提示:別名的其他用途

別名還有其他用途。常見的用途包括在實際的表列名包含不合法的字元(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它。

注意:別名

別名的名字既可以是一個單詞,也可以是一個字串。如果是後者,字串應該括在引號中。雖然這種做法是合法的,但不建議這麼去做。多單詞的名字可讀性高,不過會給客戶端應用帶來各種問題。因此,別名最常見的使用是將多個單詞的列名重新命名為一個單詞的名字。

說明:匯出列

別名有時也稱為匯出列(derived column),不管怎麼叫,它們所代表的是相同的東西。

請參閱

(完)