union 操作符用於合併兩個或多個 select 語句的結果集。
請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。
//聯合兩個表,沒有重複
select e_name from employees_china
union
select e_name from employees_usa
資料來源:
結果:
預設地,union 操作符選取不同的值。如果允許重複的值,請使用 union all。
另外,union 結果集中的列名總是等於 union 中第乙個 select 語句中的列名。
//聯合兩個表,允許重複
select e_name from employees_china
union
allselect e_name from employees_usa
結果:
有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。
資料庫中的錶可通過鍵將彼此聯絡起來。主鍵(primary key)是乙個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重複每個表中的所有資料的情況下,把表間的資料交叉**在一起。
資料來源:
persion表:
orders表:
//使用連表查詢
select persons.lastname, persons.firstname, orders.orderno
from persons, orders
where persons.id_p = orders.id_p
//使用join查詢
select persons.lastname, persons.firstname, orders.orderno
from persons
inner
join orders
on persons.id_p = orders.id_p
order
by persons.lastname
結果:
不同的 sql join
除了我們在上面的例子中使用的 inner join(內連線),join預設使用內連線,可以省略inner。 我們還可以使用其他幾種連線。
下面列出了您可以使用的 join 型別,以及它們之間的差異。
//使用left join查詢,只要左表有匹配的條件,就會生成一行,右表的列值為空。
select persons.lastname, persons.firstname, orders.orderno
from persons
left
join orders
on persons.id_p=orders.id_p
order
by persons.lastname
結果:
//使用right join查詢,只要右表有匹配的條件,就會生成一行,左表的列值為空。
select persons.lastname, persons.firstname, orders.orderno
from persons
right
join orders
on persons.id_p=orders.id_p
order
by persons.lastname
結果:
//使用full join查詢,只要其中乙個表中存在匹配,就會生成一行,另乙個表的列值為空。
select persons.lastname, persons.firstname, orders.orderno
from persons
full
join orders
on persons.id_p=orders.id_p
order
by persons.lastname
結果:
有時候會遇到需要多個表連線的情況,只要遵守以下規則就可以輕鬆的應對多表連線的情況了。
比如:欲連線abcde五個表
//a: 可以這樣:
select * from a inner
join(((
b inner
join c on b.b = c.c)
inner
join d on b.b = d.d)
inner
join e on d.d = e.e)
on a.a = e.e
//b: 也可以這樣:
select * from (((
a inner
join b on a.a = b.b)
inner
join c on c.c = a.a)
inner
join d on d.d = c.c)
inner
join e
on e.e = d.d
//c: 也可以這樣:
select * from
a inner
join b on a.a = b.b
inner
join c on c.c = a.a
inner
join d on d.d = c.c
inner
join e on e.e = d.d
我們可以先把a和b連線起來,然後將結果與c連線,當然,如果c只和b相關而不和a相關的話,我們也可以先把b和c連線起來,結果再與a連線,只要保持關係是正確的,你可以以任意方式來定義巢狀的join。 Sql語句中的DDL語句
資料庫模式定義語言ddl data definition language 是用於描述資料庫中要儲存的現實世界實體的語言。主要由create 新增 alter 修改 drop 刪除 和 truncate 刪除 四個關鍵字完成。create database 資料庫名 建立乙個資料庫 create d...
SQL語句中查詢字元的位置
語法如下 string1 源字串,要在此字串中查詢。string2 要在string1中查詢的字串 start position 代表string1 的哪個位置開始查詢。此引數可選,如果省略預設為1.字串索引從1開始。如果此引數為正,從左到右開始檢索,如果此引數為負,從右到左檢索,返回要查詢的字串在...
SQL語句中查詢字元的位置
語法如下 instr string1,string1 源字串,要在此字串中查詢。string2 要在string1中查詢的字串 start position 代表string1 的哪個位置開始查詢。此引數可選,如果省略預設為1.字串索引從1開始。如果此引數為正,從左到右開始檢索,如果此引數為負,從右...