【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句

HelloZEX發表於2018-07-26

SQL UNION 操作符

SQL UNION 操作符合並兩個或多個 SELECT 語句的結果。

SQL UNION 操作符

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的每個 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每個 SELECT 語句中的列的順序必須相同。

SQL UNION 語法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

註釋:預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。

SQL UNION ALL 語法

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

註釋:UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。


演示資料庫

在本教程中,我們將使用 RUNOOB 樣本資料庫。

下面是選自 "Websites" 表的資料:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的資料:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘寶 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)

 


SQL UNION 例項

下面的 SQL 語句從 "Websites" 和 "apps" 表中選取所有不同的country(只有不同的值):

例項

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

執行以上 SQL 輸出結果如下:

註釋:UNION 不能用於列出兩個表中所有的country。如果一些網站和APP來自同一個國家,每個國家只會列出一次。UNION 只會選取不同的值。請使用 UNION ALL 來選取重複的值!


SQL UNION ALL 例項

下面的 SQL 語句使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的country(也有重複的值):

例項

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

執行以上 SQL 輸出結果如下:

 


帶有 WHERE 的 SQL UNION ALL

下面的 SQL 語句使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的中國(CN)的資料(也有重複的值):

例項

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

執行以上 SQL 輸出結果如下:


select country from websites union select country from apps;

--連線兩個表的查詢結果集,重複的不顯示

select country from websites union all select country from apps order by country;

--連線倆個個表的查詢結果集,顯示重複

select country,name from websites where country = 'CN' union all 

select country,app_name from apps where country='CN' order by name; 

--通過where條件查詢的結果,連線連個表的結果集,並根據名字排序。

使用UNION命令時需要注意,只能在最後使用一個ORDER BY命令,是將兩個查詢結果合在一起之後,再進行排序!絕對不能寫兩個ORDER BY命令。

另外,在使用ORDER BY排序時,注意兩個結果的別名保持一致,使用別名排序很方便。當然也可以使用列數。


SQL SELECT INTO 語句

通過 SQL,您可以從一個表複製資訊到另一個表。

SELECT INTO 語句從一個表複製資料,然後把資料插入到另一個新表中。

SQL SELECT INTO 語句

SELECT INTO 語句從一個表複製資料,然後把資料插入到另一個新表中。

MySQL 資料庫不支援 SELECT ... INTO 語句,但支援 INSERT INTO ... SELECT 。

當然你可以使用以下語句來拷貝表結構及資料:

CREATE TABLE 新表 SELECT * FROM 舊錶 

SQL SELECT INTO 語法

我們可以複製所有的列插入到新表中:

SELECT *
INTO newtable [IN externaldb]
FROM table1;

或者只複製希望的列插入到新表中:

SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;

 

lamp

提示:新表將會使用 SELECT 語句中定義的列名稱和型別進行建立。您可以使用 AS 子句來應用新名稱。

 


SQL SELECT INTO 例項

建立 Websites 的備份復件:

SELECT *
INTO WebsitesBackup2016
FROM Websites;

只複製一些列插入到新表中:

SELECT name, url
INTO WebsitesBackup2016
FROM Websites;

只複製中國的網站插入到新表中:

SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';

複製多個表中的資料插入到新表中:

SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;

提示:SELECT INTO 語句可用於通過另一種模式建立一個新的空表。只需要新增促使查詢沒有資料返回的 WHERE 子句即可:

SELECT *
INTO newtable
FROM table1
WHERE 1=0;


SQL INSERT INTO SELECT 語句

通過 SQL,您可以從一個表複製資訊到另一個表。

INSERT INTO SELECT 語句從一個表複製資料,然後把資料插入到一個已存在的表中。


SQL INSERT INTO SELECT 語句

INSERT INTO SELECT 語句從一個表複製資料,然後把資料插入到一個已存在的表中。目標表中任何已存在的行都不會受影響。

SQL INSERT INTO SELECT 語法

我們可以從一個表中複製所有的列插入到另一個已存在的表中:

INSERT INTO table2
SELECT * FROM table1;

或者我們可以只複製希望的列插入到另一個已存在的表中:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

 


演示資料庫

在本教程中,我們將使用 RUNOOB 樣本資料庫。

下面是選自 "Websites" 表的資料:

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的資料:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘寶 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)

 


SQL INSERT INTO SELECT 例項

複製 "apps" 中的資料插入到 "Websites" 中:

例項

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;

只復 QQ 的 APP 到 "Websites" 中:

例項

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id=1;


SQL CREATE DATABASE 語句

SQL CREATE DATABASE 語句

CREATE DATABASE 語句用於建立資料庫。

SQL CREATE DATABASE 語法

CREATE DATABASE dbname;


SQL CREATE DATABASE 例項

下面的 SQL 語句建立一個名為 "my_db" 的資料庫:

CREATE DATABASE my_db;

資料庫表可以通過 CREATE TABLE 語句來新增。


SQL CREATE TABLE 語句

SQL CREATE TABLE 語句

CREATE TABLE 語句用於建立資料庫中的表。

表由行和列組成,每個表都必須有個表名。

SQL CREATE TABLE 語法

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

column_name 引數規定表中列的名稱。

data_type 引數規定列的資料型別(例如 varchar、integer、decimal、date 等等)。

size 引數規定表中列的最大長度。

提示:如需瞭解 MS Access、MySQL 和 SQL Server 中可用的資料型別,請訪問我們完整的 資料型別參考手冊


SQL CREATE TABLE 例項

現在我們想要建立一個名為 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。

我們使用下面的 CREATE TABLE 語句:

例項

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

PersonID 列的資料型別是 int,包含整數。

LastName、FirstName、Address 和 City 列的資料型別是 varchar,包含字元,且這些欄位的最大長度為 255 個字元。

空的 "Persons" 表如下所示:

PersonID LastName FirstName Address City
         

提示:可使用 INSERT INTO 語句向空表寫入資料。


 

相關文章