小貝_mysql select串連查詢,_mysqlselect
select串連查詢簡要:
一、union聯集查詢
二、左右內串連
一、union聯集查詢
作用: 把2次或多次查詢結果合并起來
詳細: (表1查詢結果) union (表2查詢結果)
執行: 先算表1查詢結果,再算表2查詢結果。再通過union把結果聯合起來。
總結:
a、左右查詢結果列數一致
b、最終顯示結果以第一張表的列名為主
c、左右查詢結果的列類型最好也一致,不然就會進行轉換。由低到高。如表1結果A列為整形,表2結果A列為浮點型。則表1在A列的結果轉換為浮點型
d、可以是不同表
e、如果不同的語句中取出的行,有完全相同(每個列的值都相同),那麼相同的行將會合并(去重)
案例:
查詢 這樣的結果:
a16,b 21,c 14,d 41
步驟1: union來擷取兩張表的查詢結果
步驟2: 把步驟1的查詢結果看成暫存資料表
不足之處: 上述案例中表ta和tb中不存在完全相同的列(即查詢結果中所有列的值都一樣)
修改下tb表
此時,執行步驟2的sql語句
發現id為a的值總和為5而不是為10.
這是因為如果不同的語句中取出的行,有完全相同(每個列的值都相同),那麼相同的行將會合并(去重)
處理方案: 用union all
二、串連查詢
通常情況下表與表之間是沒有什麼關係的。但是我們可以通過一個欄位,讓表與表發生關係。
把表看成集合。
2.1、左串連
文法: select 列1,列2,列N from tableA left join tableB on tableA.列=tableB.列
2.2、右串連
文法: select 列1,列2,列N from tableA right join tableB on tableA.列=tableB.列
2.3、內串連
文法: select 列1,列2,列N from tableA inner join tableB on tableA.列=tableB.列
2.4、左右內串連的區別
create table boy
( name char(3) not null,
flower char(5)
)engine=myisam charset utf8;
create table girl
( name char(3),
flower char(5)
)engine=myisam charset utf8;
insert into boy values('林書豪','玫瑰'),('劉翔','桃花'),('周杰倫','茉莉花'),('犀利哥','荷花'),
('劉德華','狗尾巴花');
insert into girl values('艾薇爾','玫瑰'),('居裡夫人','桃花'),('芙蓉姐','茉莉花'),('鳳姐','茉莉花'),('林志玲','荷花');
案例一: 根據花,男找女
左串連
以左表為準,去右表找匹配資料,找不到匹配,用NULL補齊。
總結: tableA為N ;tableB為M。則在以tableA為左表的情況下,得到的資料行數至少為N行。
案例二: 根據花,女找男
總結:左串連和右串連相互轉換。
A在 B的左邊 ==》B在A的右邊
A left join B ==》B rightjoin A
如何記憶:
1、 左右串連可以相互轉化
2、 可以把右串連轉換為左串連來使用(相容其它資料版本)
案例三: 無論男女,尋找有伴的人
總結: 內串連inner join 查詢左右串連都有的資料。即得到左右串連的交集
思考: 能否查出左右串連的並集呢?
答: 目前不能直接擷取,目前的mysql不支援外連結。
但可以用union聯合
The quieter you become,the more you are able to hear!