程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 小貝_mysqlselect連接查詢

小貝_mysqlselect連接查詢

編輯:MySQL綜合教程

小貝_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聯合

\

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved