MySql RIGHT JOIN 關鍵字 (SQL RIGHT JOIN Keyword) - 右外部連接

RIGHT JOIN 可以用來建立右外部連接

RIGHT JOIN 可以用來建立左外部連接,查詢的 SQL 敘述句 RIGHT JOIN 左側資料表 (table_name1) 的所有記錄都會加入到查詢結果中,即使右側資料表 (table_name2) 中的連接欄位沒有符合的值也一樣。

1
2
3
4
SELECT table_column1, table_column2...
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

Example

1
2
3
4
SELECT customers.C_Id,customers.Name,customers.Address,customers.Phone,customers.Salary,orders.Order_No,orders.Product,orders.Product,orders.Quantity
FROM `customers`
RIGHT JOIN `orders`
ON customers.C_Id =orders.C_Id
LEFT JOIN 會返回左側資料表中所有資料列,就算沒有符合連接條件,而右側資料表中如果沒有匹配的資料值就會顯示為 NULL。

MySql SELECT

SELECT 敘述句 (SQL SELECT Statement)

SELECT *

取得整張資料表裡所有的資料我們可以在 SELECT 語句裡用 * 這個特殊符號

1
SELECT * FROM `customers`;
### SELECT 語法 (SQL SELECT Syntax)
1
2
SELECT table_column1, table_column2, table_column3...
FROM table_name;
SQL SELECT Example
1
SELECT `C_Id`, `Name`, `City`, `Address`, `Phone`, `Salary` FROM `customers`

MySql SELECT WHERE BETWEEN

(NOT) BETWEEN 運算子 (SQL (NOT) BETWEEN Operator)

不同於 IN 運算子是依不連續的值作為 WHERE 查詢子句的篩選條件,BETWEEN 則是用來限定依某範圍內連續的值作為條件來搜尋資料表中的特定資料。

作為查詢範圍條件的欄位型態可為數值、日期或字串,其中字串是依照字母排列順序來界定範圍。

1
2
3
4
SELECT table_column1, table_column2, table_column3...
FROM table_name
WHERE column_name
BETWEEN value1 AND value2;

從下面的 customers 資料表中查詢Salary介於 10000~30000 的顧客資料

1
SELECT * FROM `customers` WHERE `Salary` BETWEEN 10000 AND 30000;

MySql SELECT DISTINCT (SQL SELECT DISTINCT Statement)

SELECT DISTINCT (SQL SELECT DISTINCT Statement)

一個資料表的某欄位中可能會有多個紀錄都是相同值的情況,在 SELECT 查詢語句中我們可使用 DISTINCT 關鍵字過濾重複出現的紀錄值。

1
2
SELECT DISTINCT table_column1, table_column2...
FROM table_name;

從 customers 資料表中查詢顧客分佈在哪幾個縣市

1
SELECT DISTINCT `City` FROM `customers`;

MySql SELECT INTO

SELECT INTO 敘述句 (SQL SELECT INTO Statement)

SELECT INTO 用來從某資料表查詢所得之資料集結果新增到另一個新建的資料表中。此一指令常用來複製備份資料表,或將資料表輸出至另一資料庫中。

1
2
3
SELECT table_column1, table_column2, table_column3...
INTO new_table_name [IN another_database]
FROM table_name;

Example

1
2
3
4
5
6
7
//例如,我們現在想備份顧客資料表 customers:
SELECT * INTO customers_backup FROM customers;
//或者,我們想把它備份到 backup 資料庫中:
SELECT *
INTO customers_backup IN 'backup.mdb'
FROM customers;
//我們也可以只複製資料表結構:

** MySQL 資料庫不支援 SELECT INTO,但你可以用 INSERT INTO…SELECT 來達到同樣的功能。

MySql (NOT) IN 運算子 (SQL (NOT) IN Operator)

萬用字元 (SQL Wildcards)

萬用字元是與 LIKE 運算子一起搭配使用的,我們可以利用萬用字元來建立一個模式 (pattern),進而依此模式為條件來進行資料查詢。

萬用字元 意義
% 用來代替「零個」至「多個」字元
_ 用來代替「一個」字元
[charlist] 用來代替「一個」在列舉範圍內的字元
[^charlist] 或 [!charlist] 用來代替「一個」不在列舉範圍內的字元

萬用字元用法 (Example)

模式 模式意義
abc% 所有以 abc 開頭的字串。如 abc、abcx 或 abcxxx 等字串皆符合此模式。
%abc% 所有包含 abc 的字串。如 abc、xxabcy 或 abcxxxx 等字串皆符合此模式。
a_ 以 a 為開頭的兩個字。如 ab、ac 或 ad 等字串皆符合此模式,但 a 就不符合囉,因為此模式限定 a 之後一定要接任一字元。
a[bcd] 以 a 為開頭其後接著 b 或 c 或 d 其中一個字元。如 ab、ac 或 ad 等字串皆符合此模式,但 ae 就不符合囉。
a[^bcd] 以 a 為開頭其後接著非 b 或 c 或 d 的任何一個字元。如 ax、ay 或 az 等字串皆符合此模式,但 ab 就不符合囉。

例如,找住在台北市的客戶:

1
SELECT * FROM `customers` WHERE City LIKE '台北%';

MySql UNION 運算子 (SQL UNION Operator)

UNION 運算子用來將兩個(以上) SQL 查詢的結果合併起來,而由 UNION 查詢中各別 SQL 語句所產生的欄位需要是相同的資料型別及順序。

UNION 就是像是 OR (聯集),如果紀錄存在於第一個查詢結果集或第二個查詢結果集中,就會被取出。

UNION 與 JOIN 不同的地方在於,JOIN 是作橫向結合 (合併多個資料表的各欄位);而 UNION 則是作垂直結合 (合併多個資料表中的紀錄)。

1
2
3
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
1
2
3
4
CREATE TABLE `products_taiwan` (
P_Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
P_Name VARCHAR(30) NOT NULL
);
1
2
3
4
CREATE TABLE `products_china` (
P_Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
P_Name VARCHAR(30) NOT NULL
);
1
SELECT P_Name FROM `products_taiwan` UNION SELECT P_Name FROM `products_china`;
1
SELECT * FROM `products_taiwan` UNION ALL SELECT * FROM `products_china`;
1
SELECT P_Name FROM `products_taiwan` UNION ALL SELECT P_Name FROM `products_china`;

MySql UNIQUE 唯一限制 (SQL UNIQUE Constraint)

UNIQUE 唯一限制 (SQL UNIQUE Constraint)

UNIQUE 用來保證欄位在資料表中的唯一性,約束資料表中的欄位不能有重複的資料。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE customer (
C_Id INT NOT NULL UNIQUE,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20)
);
//or
CREATE TABLE `customers` (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20),
UNIQUE (C_Id)
);

替唯一鍵命名與多欄位的唯一限制

C_Id 及 Name 這兩個欄位共同唯一,CONSTRAINT 後面接著的即是此唯一鍵的名稱。

1
2
3
4
5
6
7
CREATE TABLE `customers` (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20),
CONSTRAINT u_Customer_Id UNIQUE (C_Id, Name)
);

更改資料表限制 ALTER TABLE

1
ALTER TABLE `customers` ADD UNIQUE (C_Id);
替唯一鍵命名與多欄位的唯一限制:
1
ALTER TABLE `customers` ADD CONSTRAINT u_Customer_Id UNIQUE (C_Id, Name);

移除資料表限制 ALTER TABLE…

刪除C_Id

1
ALTER TABLE `customers` DROP INDEX C_Id;

刪除u_Customer_Id;

1
2
3
ALTER TABLE `customers` DROP INDEX u_Customer_Id;
//CONSTRAINT
ALTER TABLE `customers` DROP CONSTRAINT u_Customer_Id;

MySql UPDATE

UPDATE 修改資料表中的資料

1
2
3
4
UPDATE table_name
SET column1=value1, column2=value2, column3=value3···
WHERE some_column=some_value;

WHERE 條件式

1
2
3
UPDATE `customers`
SET Name="Lara", Address="zzz路29號", Phone="0910-123456",City="台中市"
WHERE C_Id=5;