MySQL子查詢

來源:互聯網
上載者:User

標籤:

一、資料庫的基本概念:
1、資料庫(DATABASE)的集中式控制的優點:
(1)降低儲存資料的冗餘度
(2)更高的資料一致性
(3)儲存的資料可以共用
(4)可以建立資料庫所遵循的標準
(5)便於維護資料完整性
(6)能夠實現資料的安全性(資料庫管理員--DBA)

2、資料庫的資料模型:
(1)層次模型(倒掛樹---運用舉例:IBM的資訊管理系統)
(2)網狀模型
(3)關聯式模式【把世界看做是實體(Entity)和聯絡(Relationship)組成的】
(4)物件模型

3、關聯式資料庫的基本概念
(1)英語單詞總結:
列:column; 行:row;
屬性:Attribute; 主鍵:Primary Key; 外鍵:Foreign Key
資料庫管理系統(DBMS):Datebase Management System;
關係型資料管理系統(RDBMS)Relational Datebase Management System;

(2)主鍵:在關係型資料庫的表中,使用一個唯一的標識符來標識每一行。

(3)外鍵:就是用來表達表與表之間的關聯關係。

(4)關係型資料庫中的表的關聯關係的基本關聯類型:一對一關聯性、一對多關聯性、多對多關係。

(5)關係型資料管理系統(RDBMS):分為本機資料庫管理系統(同一用戶端)、資料庫伺服器管理系統(在不同的機器上)。
在商業引用程式開發中,為安全及效能考慮,通常採用資料庫伺服器管理系統。

(6)結構化查詢語言 (SQL)SQL(Structured Query Language):
a、資料定義語言 (Data Definition Language)(DDL):用於建立、修改、刪除資料庫內的資料結構
b、資料查詢語言(DQL):用於從資料庫中的一個或者多個表中查詢指定的資料
c、資料操作語言(DML):用於修改資料庫中的資料,包括:插入、更新、刪除資料
d、資料控制語言(DCL):用於控制對資料庫的訪問

4、基本規則:
(1)資料庫名:小寫,不能有中文
(2)`變數名` 用``擴起來的,避免關鍵字,比如name
(3)表名,變數名不區分大小寫
(4)主類不能直接刪,因為從表有引用指向它,除非沒有從表的引用指向它,所以說有關聯刪不了
(5)SQLyog裡邊單行注釋 -- 多行注釋 /**/;SQLyog裡邊選中某一段運行可以單獨運行那一段

二、資料定義語言 (Data Definition Language)的使用:
1、管理資料庫:

(1)資料庫名在伺服器中必須是唯一的,並且符合標識符規則:

a、第一個字元必須是底線 或 @ 或 數字元合# 或Unicode標準3.0所定義的字母
b、後續字元可以是:Unicode標準3.0所定義的字母 或 底線 或 @ 或 數字元合 或美元符合$ 或來自基本拉丁字母或其他省/地區腳步的十進位數字。
c、標識符不能是RDBMS的保留字
d、不允許嵌入空格或其他特殊字元。

(2)建立資料庫:CREATE DATABASE 資料庫名; 例:CREATE DATABASE Datebase_demo;

(3)串連到資料庫:USE 資料庫名; 例:USE Datebase_demo;

(4)刪除資料庫: DROP DATABASE 資料庫名; 例: DROP DATABASE Datebase_demo;

(5)資料庫中資料的類型:(具體的可看教材p22-24或圖片)
A、整數資料類型:
B、浮點數據類型:
C、字串類型:
D、位元據類型:
E、日期與時間資料類型:
2、管理表:
(1)建立表:CREATE TABLE 表名(
列名 列的資料類型 列的約束 -- 有多列時,使用“,”隔開,最後一個不需要寫“,”。且不能交換列名與列的資料類型的位置。
);

例:CREATE TABLE Student(
id bigint PRIMARY key ,-- id用integer比bigint好,對Java的相容性好,出錯率小,最後設定預設編碼為utf8。
name VARCHAR(12) not null,
age int(150)

)CHARSET=utf8;

(2)刪除表:DROP TABLE 表名; 例:DROP TABLE Student;注意:通過外鍵約束串連到一起的表不能被刪除,在刪除之前,必須先刪除約束。

(3)複製表: 使用SELECT。 例:CREATE TABLE Student_copy SELECT * FROM Student;
注意:這裡的複製不能將表的約束一起複製下來。對於只複製表的結構,不複製表的資料我們可以使用WHERE,在WHERE 後添加一個永遠不等於true的條件:
例:CREATE TABLE Student_copy SELECT * FROM Student WHERE id = -1;

(4)修改表:
A、更改資料結構,為資料添加一列:例:ALTER TABLE Student ADD Address VARCHAR(12);-- 為表Student添加了一列Address.若要一次添加多列,則使用“,”隔開,例:ALTER TABLE Student ADD Address VARCHAR(12),Teacher VARCHAR(12);
B、更改列的定義,並為列添加一個預設值約束:ALTER TABLE Student CHANGE 舊列名 新列名 列的類型
例: ALTER TABLE Student CHANGE name StudentName VARCHAR(15) DEFAULT ‘張三‘;

C、刪除列:例:ALTER TABLE Student DROP COLUMN age;

D、修改表的表名:ALTER TABLE Student RENAME Student12; -- RENAME 只針對於表,不能使用它來修改資料庫的名字與表中的列的列名。

(5)管理索引:
A、建立索引(建立索引的好處:當資料大的時候查詢較快,提高效率):例: CREATE INDEX nameIndex ON Student (name); -- 索引值預設為數字類型,不需要指定類型。

B、通過索引查詢:例: SELECT id,name FROM Student WHERE name=‘張三2‘;

C、刪除索引:例:ALTER TABLE Student DROP INDEX nameIndex;

 

三、資料完整性概述:

1、根據資料完整性實施的方法,將其分為4類:
(1)實體完整性:保證一行資料是有效。
實現方法:主鍵約束,唯一約束,識別欄位屬性。

(2)值域完整性:保證一列資料是有效。
實現方法:外鍵約束,檢查約束(在MySQL中不支援),預設值約束,非空約束。

(3)參考完整性:保證引用的編號是有效。
實現方法:外鍵約束
(4)自訂完整性:保證自訂完整性。

2、對資料完整性實現的方法的使用;

(1)建立非空約束:
NOT NULL 約束強制列不接受 NULL 值。NOT NULL 約束強制欄位始終包含值。這意味著,如果不向欄位添加值,就無法插入新記錄或者更新記錄。
CREATE TABLE t_person(
p_id INTEGER PRIMARY KEY AUTO_INCREMENT, /* 設定主鍵為自增長。*/

p_name VARCHAR(20) NOT NULL,-- 在這裡就使用了非空約束。
p_age INTEGER(150) NOT NULL,
p_address VARCHAR(50) DEFAULT ‘成都市‘


)CHARSET=utf8 ,ENGINE=INNODB;
設定自增長的起始值 ALTER TABLE t_person AUTO_INCREMENT = 100;如果手動設定id 值,自增長不生效,下次生效在最大的那裡加1

(2)唯一約束:
A.設定唯一約束:
UNIQUE 約束唯一標識資料庫表中的每條記錄。UNIQUE 和 PRIMARYKEY 約束均為列或列集合提供了唯一性的保證。PRIMARYKEY 擁有自動定義的 UNIQUE 約束。注意:每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

例1:CREATE TABLE Persons(
Id_P int NOT NULL UNIQUE
)CHARSET=utf8 ,ENGINE=INNODB;

例2:CREATE TABLE Persons(
Id_P int NOT NULL,
UNIQUE (Id_P)
)CHARSET=utf8 ,ENGINE=INNODB;

例3:CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) -- 一步設定多個屬性的約束條件為唯一約束。-- 約束名為uc_PersonID。
);

例4:在表已經建立的情況下為屬性添加唯一約束:
ALTER TABLE Persons ADD UNIQUE (Id_P);
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) -- 一步設定多個屬性的約束條件為唯一約束,約束名為uc_PersonID
B.撤銷唯一約束:
ALTER TABLE Persons DROP INDEX uc_PersonID;
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID; -- 在MySQL不支援這種撤銷唯一約束的方法.
(3)主鍵約束
A.設定主鍵約束
注意:預設它就包含了非空約束與唯一約束,一個表中只能有一個主鍵,但一個主鍵不等於將表中的一列作為主鍵,可以將多列作為一個主鍵,這個主鍵稱為複合主鍵。

例1:CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P) -- 設定主鍵約束
);

例2:CREATE TABLE Persons(
Id_P int NOT NULL PRIMARY KEY, -- 設定主鍵約束
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

例3:CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)
);

例4:在表已經建立的情況下添加主鍵約束:
ALTER TABLE Persons MODIFY Id_P PRIMARY KEY;
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注釋:如果您使用 ALTER TABLE 語句添加主鍵,必須把主鍵列聲明為不包含 NULL 值(在表首次建立時)。
B.撤銷主鍵約束:
ALTER TABLE Persons DROP PRIMARY KEY;


(4)外鍵約束:一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。FOREIGN KEY 約束用於預防破壞表之間串連的動作。FOREIGN KEY 約束也能防止非法資料插入外鍵列,因為它必須是它指向的那個表中的值之一。
A.設定外鍵約束:
例1:CREATE TABLE Orders(
O_Id INT NOT NULL PRIMARY KEY,
OrderNo INT NOT NULL,
Id_P INT NOT NULL,
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) -- 設定外鍵約束
);

例2:CREATE TABLE Orders(
O_Id INT NOT NULL PRIMARY KEY,
OrderNo INT NOT NULL,
Id_P INT FOREIGN KEY REFERENCES Persons(Id_P) -- 在MySQL中不支援這種設定外鍵的方法。
);

例3:CREATE TABLE Orders(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

例4:在表已經存在的情況下,設定外鍵約束:

ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P);
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P);

B、撤銷外鍵約束:
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders;
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders; -- 在MySQL中不支援這種撤銷外鍵的方法。

(5)預設值:DEFAULT 約束用於向列中插入預設值。如果沒有規定其他的值,那麼會將預設值添加到所有的新記錄。
A.指定預設值:
例1:CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Sandnes‘ -- 設定預設值約束
)
例2:在表已經存在的情況下,添加預設值:
ALTER TABLE Persons ALTER City SET DEFAULT ‘Sandnes‘;

B、撤銷預設值:
ALTER TABLE Persons ALTER City DROP DEFAULT;


四、使用DML語句更改資料:

1、添加新資料
文法:INSERT INTO 表名 (列名列表)VALUES(值列表);注意:列名列表省略時,需將屬性按順序一一賦值
例:INSERT INTO Student (StudentID,NAME) VALUES (1,‘張三‘),(2,‘張三1‘),(3,‘張三2‘),(4,‘張三3‘);

2、插入多行記錄:實為將資料從一個表複製到另一個表。
文法:INSERT INTO 表名 (列名列表)SELECT SELECT語句;
例:INSERT INTO Student (StudentID,NAME) SELECT StudentID + 2,NAME FROM Student1;
解釋:在上面例子中的SELECT 中的StudentID,NAME指的是Student1中的屬性,將StudentID + 2的原因是因為在Student中將StudentID作為了主鍵,且Student表中已經有了2個資料,加2是為了避免主鍵重複。

3、表資料的複製:
文法:SELECT 列名 INTO 新表名 FROM 表名;
例:SELECT * INTO Student2 FROM Student1;

4、更改已有的資料:
文法:UPDATE 表名 SET 新列值列表 WHERE 過濾條件;
例1:UPDATE Student SET NAME=‘李四‘ WHERE StudentID=2;
例2:UPDATE Student SET NAME=NULL;這樣就會刪除列名為NAME的整列資料。

5、刪除資料
(1)文法:DELETE FROM 表名 WHERE 過濾條件;(注意:如果不指定WHERE子句,表中的所有行將被刪除,但表中的資料仍存在一些記錄,這些記錄是與其他表中的資料有關聯的。例如:主鍵,從表就關聯到了,以前使用了的資料仍然不可以使用)
例:DELETE FROM Student WHERE StudentID < 2;

(2)文法:TRUNCATE TABLE 表名;
注意:TRUNCATE TABLE 可以刪除表中的所有行(原始無資料的狀態),但表的結構、列、約束、索引等不會被改的。且他不能用於有外鍵約束引用的表,這時刪除表的資料需要使用不帶WHERE子句的DELETE語句。
執行TRUNCATE TABLE 表名;語句後,表中自動成長的標識值被設定為預設值。


五、資料庫的簡單查詢

CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT ‘Sandnes‘ -- 設定預設值約束
);後面的查詢以此表為例

1、資料庫的查詢操作基本分類:
(1)投影操作
(2)選擇操作
(3)排序操作

2、投影操作:
(1)查詢文法:
SELECT 列名列表 FROM 表名;(選擇多個列時,列之間以“,”隔開;如果選擇所有列,列名列表用“*”代替)
例1:SELECT Id_P FROM Persons;
例2:SELECT Id_P,LastName FROM Persons;
例3:SELECT * FROM Persons; -- 常用*的查詢語句來做測試,不使用它來做查詢。

(2)使用表名首碼(作用:瞭解資訊來自那個表,區分不同表的同列名)
文法:SELECT 表名1.列名1,表名1.列名2,表名2.列名1 FROM 表名1,表名2;
例:SELECT Persons.Id_P FROM Persons;

(3)為列名取別名:
文法:SELECT 列名 AS 新列名 FROM 表名;(查詢列顯示列別名)
例:SELECT Id_P AS ‘編號’,LastName AS name FROM Persons;(選擇多個列時,列之間以“,”隔開)

(4)使用DISTINCT(distinct)關鍵字排除重複資料:
文法:SELECT DISTINCT 列名 FROM 表名;
例:SELECT DISTINCT FirstName FROM Persons;-- 查詢Persons表格中有什麼樣的FirstName。
當列為多列的時候,即SELECT DISTINCT 列1,列2 FROM 表名;-- 列1,列2同時相同的資料資訊過濾後查詢的結果顯示出來。

(5)計算資料行:
A、連接字串,使用CONCAT(concat)關鍵字:
文法: SELECT CONCAT(列名1,列名2,列名3) AS ‘標題‘ FROM 表名;(在列名之間也可以加入其它的字串)
例1:SELECT CONCAT(FirstName,LastName)AS Name FROM Persons;
例2:SELECT CONCAT(FirstName,‘-’,LastName)AS Name FROM Persons;
B、做簡單的四則運算:
(6)返回限定行數的查詢:
文法:SELECT 列名 FROM 表名 LIMIT 開始序號,返回行數; (注意:開始序號是從0開始的即:若從第一行開始,則開始序號為0)
例1:SELECT DISTINCT FirstName FROM Persons LIMIT 1,4;-- 從第二行開始查詢,總共返回4行資料。
例2:SELECT DISTINCT FirstName FROM Persons LIMIT 4; -- 從第一行開始查詢,返回4行資料


3、選擇操作(使用WHERE關鍵字):
SELECT 列名列表 FROM 表名 WHERE 條件;
(1)單條件選擇操作:
A、文法:SELECT 列1,列2 FROM 表名 WHERE 列3=值;
例:SELECT FirstName,LastName FROM Persons WHERE Id_P=1;
B、比較子(=,!=,^=,<>,>,>=,<,<=):
對於^=,<>與!=類似,只是在值為NULL的時候有區別。

(2)多條件選擇操作:
使用關鍵字AND(同時滿足兩個條件),OR(至少滿足兩個條件中的一個)。
文法1:SELECT 列名 FROM 表名 WHERE 條件 AND 條件;
文法2: SELECT 列名 FROM 表名 WHERE 條件 OR 條件;
註:NOT關鍵字也可以用在查詢條件中,例:SELECT 列名 FROM 表名 WHERE 條件1 AND NOT 條件2; --條件1滿足,條件2不滿足。

(3)執行範圍測試:(使用BETWEEN關鍵字)
文法: SELECT 列名列表 FROM 表名 WHERE 條件 BETWEEN 上限 AND 下限;(包括上下限值。當然在這裡也可以使用NOT關鍵字,排除一個範圍。SELECT 列名列表 FROM 表名 WHERE 條件 NOT BETWEEN 上限 AND 下限;)
例:SELECT * FROM Persons WHERE Id_P BETWEEN 3 AND 8;

(4)定義集合關係:

SELECT * FROM 表名 WHERE 列名 IN(值集合) ;(找出指定範圍的)
SELECT * FROM 表名 WHERE 列名 NOT IN(值集合);(找出不在指定範圍的)
例:SELECT * FROM Persons WHERE Id_P IN(3,7,8);


(5)模糊查詢:使用萬用字元‘%’(包含0個或更多字元的任一字元串),‘_’(任意單個字元)。
A、文法: SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式;
例1:SELECT FirstName,LastName FROM Persons WHERE FirstName LIKE‘%王%’;-- FirstName中包含‘王’的
例2:SELECT FirstName,LastName FROM Persons WHERE FirstName LIKE‘_’;-- FirstName只有一個字的。

B、轉義符
例:匹配包含50%: ‘%50p%%‘ ESCAPE ‘p‘(這裡的p最好是不在查詢字串中出現的字元) 或者 ‘%50<Escape Char>%%‘ 或者 ‘%50[%%‘(注意:後倆者在MySQL中不使用)

(6)處理空值資料:
SELECT 列名 FROM 表名 WHERE 列名1 IS NOT NULL;(查詢測試列名1不為空白)
SELECT 列名 FROM 表名 WHERE 列名1 IS NULL;(查詢測試列名1為空白)


4、排序操作:

文法: SELECT 列名列表1 FROM 表名 ORDER BY 列1,列2 ASC(升序);
SELECT 列名列表1 FROM 表名 ORDER BY 列1,列2 DESC(降序);(註:首先按照列1的順序進行(降序、升序)排序,當列1的資料出現相同時,再按照列2的順序進行(降序、升序)排序)


六、彙總函式與分組:
1、使用彙總函式進行統計匯總:
(1)常見的彙總函式:
COUNT:返回結果集中的行的數目;
SUM:返回結果集中所有值的總和;
AVG:返回結果集中所有值的平均值;
MAX: 返回結果集中所有值的最大值;
MIN: 返回結果集中所有值的最小值;
註:彙總函式(除COUNT(*)外)處理單個列中全部所選的值以產生單個結果值。
計數規範的關鍵字:
* -- 計算所有選擇的行,包括NULL值;
ALL 列 -- 計算指定列的所有非空值行(預設情況下也是這個)
DISTINCT列 -- 計算指定列的所有非空值行,且不重複資料的行數。

(2)COUNT的使用:
文法: SELECT COUNT(計數規範)AS ‘標題‘ FROM 表名 WHERE 條件;(統計滿足條件的行數量)

(3)SUM的使用:(SUM使用的計數規範關鍵字只有ALL與DISTINCT)
文法:文法: SELECT SUM(計數規範)AS ‘標題‘ FROM 表名 WHERE 條件;(擷取單個列的合計值)

(4)AVG的使用:(AVG使用的計數規範關鍵字只有ALL與DISTINCT)
文法:文法: SELECT AVG(計數規範)AS ‘標題‘ FROM 表名 WHERE 條件;(計算某個列的平均值)

(5)MAX的使用:(沒有關鍵字ALL,DISTINCT,*)
文法:文法: SELECT MAX(最大值規範)AS ‘標題‘ FROM 表名 WHERE 條件;(計算資料行的最大值)

(6)MIN的使用:(沒有關鍵字ALL,DISTINCT,*)
文法:文法: SELECT MIN(最小值規範)AS ‘標題‘ FROM 表名 WHERE 條件;(計算資料行的最小值)

2、資料分組:
(1)過濾分組資料:使用GROUP BY 子句來對資料分組(想要獲得一個資料庫中資料集合中的子集的總計值)
SELECT 列A,彙總函式(彙總函式規範) FROM 表名 WHERE 條件 GROUP BY 列A;
有效分組:①使用了彙總函式;②該列在GROUP BY子句中。
例:select name from bbc grop by id; -- 無效分組。

(2)使用HAVING子句:(當需要使用彙總函式來過濾查詢結果集時使用HAVING子句)
SELECT 列A,彙總函式(彙總函式規範) FROM 表名 WHERE 條件 GROUP BY 列A HAVING 子句;

3、SQL語句的執行順序:
1.FROM子句
2.WHERE子句
3.GROUP BY子句
4.SELECT子句
5.HAVING子句
6.ORDER BY子句
7.LIMIT 子句


七、組合查詢:

1、使用子查詢:
(1)引入:SELECT SUBJECT,COUNT(winner) FROM nobel GROUP BY SUBJECT;當分組的列名與需要查詢列的列名(未使用彙總函式的)相同時,不需要使用子查詢;若不同,則要使用子查詢。
例:查詢成績表中每科的最高分以及獲得最高分的學生的資訊:
SELECT 科目,學生姓名,max(分數) from Student GROUP BY 科目;-- 此時學生的資訊就對不上。這時就應該使用子查詢。
(2)在完整的SQL語句中,嵌套的子查詢可處的位置:FROM、WHERE、GROUP BY、SELECT、HAVING、ORDER BY。
①嵌套在select語句中的SQL語句要求查詢的值只能是單行和單列:
文法:SELECT 列A,(子查詢) AS 列B FTOM 表名;

②嵌套在FROM語句中,多行多列;

③嵌套在WHERE語句中:
A、文法1:SELECT 列A FTOM 表名 WHERE 列B=(子查詢);
B、返回多個結果的子查詢: SELECT 列A FTOM 表名 WHERE 列B (NOT)IN (子查詢1 WHERE 列C IN 子查詢2);
C、在子查詢中使用運算子:
a.使用EXISTS運算子(運算子後跟子查詢,只要子查詢返回了行,EXISTS的值就為真。(要使用表名首碼))
文法:SELECT 列A FROM 表名 s WHERE EXISTS (SELECT 列A FROM 表名 e WHERE 條件 e.列A = s.列A);

b.使用ALL運算子(ALL運算子與子查詢和比較運算一起使用。如果子查詢返回的所有值都滿足比較子,則為真)
文法:SELECT 列A FROM 表名1 WHERE 列A >(比較運算) ALL(SELECT 列B FROM 表名2);

c.使用ANY運算子(如果子查詢返回的所有值中有一個滿足比較子,則為真)
文法:SELECT 列A FROM 表名1 WHERE 列A >(比較運算) ANY(SELECT 列B FROM 表名2);


2、組合查詢資料:SELECT 列A 列B FROM 表名1 運算子 SELECT 列C 列D FROM 表名2;

(1)組合查詢的運算子:UNION、UNION ALL、INTERSECT、DIFFERENCE;

(2)UNION運算子:兩個資料集聯合後將包含每個資料集的每個成員,但是每個成員只被計數一次。
文法:SELECT ColumnA,ColumnB FROM TableA
UNION
SELECT ColumnC,ColumnD FROM TableB;
以數學集合解釋為{1,2,3,4}UNION{3,4,5,6},結果集為{1,2,3,4,5,6}
註:UNION的結果集的列名與UNION運算子中的第一個SELECT語句的結果集中的列名相同,第二個的將被忽略。

(3)UNION ALL運算子:兩個資料集聯合後將包含每個資料集的每個成員,並且保留重複行。
文法:SELECT ColumnA,ColumnB FROM TableA
UNION ALL
SELECT ColumnC,ColumnD FROM TableB;
以數學集合解釋為{1,2,3,4}UNION ALL{3,4,5,6},結果集為{1,2,3,3,4,4,5,6}
註:當我們想知道某個特定值在多個表中出現的次數時,就可以使用這個。

(4)INTERSECT運算子:只留下兩個資料集重複行(交集)。只被Oracle支援
以數學集合解釋為{1,2,3,4}INTERSECT{3,4,5,6},結果集為{3,4}

(5)EXCEPT運算子:只留下沒重複過的行(差分)。只被Oracle支援
以數學集合解釋為{1,2,3,4}EXCEPT{3,4,5,6},結果集為{1,2,5,6}

 

MySQL子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.