MySQL筆記之連接查詢?cè)斀?/h1>
更新時(shí)間:2013年05月03日 17:23:26 作者:
連接查詢是將兩個(gè)或兩個(gè)以上的表按某個(gè)條件連接起來(lái),從中選取需要的數(shù)據(jù)
連接查詢是將兩個(gè)或兩個(gè)以上的表按某個(gè)條件連接起來(lái),從中選取需要的數(shù)據(jù)
當(dāng)不同的表中存在表示相同意義的字段時(shí),可以通過該字段來(lái)連接這幾張表
參考表:employee

參考表:department
可以看到,上面兩張表都有同一個(gè)字段d_id
當(dāng)兩張表含有相同意義的字段(可以不同名)時(shí)就可以進(jìn)行連接查詢
內(nèi)連接查詢
復(fù)制代碼 代碼如下:
mysql> SELECT num, name, employee.d_id, sex, d_name, function
-> FROM employee, department
-> WHERE employee.d_id=department.d_id;
+------+--------+------+------+-----------+--------------+
| num | name | d_id | sex | d_name | function |
+------+--------+------+------+-----------+--------------+
| 1 | 張三 | 1001 | 男 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 女 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 男 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
+------+--------+------+------+-----------+--------------+
rows in set (0.00 sec)
內(nèi)連接查詢只會(huì)查詢完全匹配的結(jié)果,此處使用d_id字段進(jìn)行連接
下面的表中也同樣使用這一字段
外連接查詢
外查詢也需要通過指定字段來(lái)進(jìn)行連接,當(dāng)該字段取值相等時(shí),可以查詢出該記錄
而且,該字段取值不相等的記錄也可以查詢出來(lái)
外連接查詢包括左連接查詢和右連接查詢
左連接查詢
復(fù)制代碼 代碼如下:
mysql> SELECT num, name, employee.d_id, d_name, function
-> FROM employee LEFT JOIN department
-> ON employee.d_id=department.d_id;
+------+--------+------+-----------+--------------+
| num | name | d_id | d_name | function |
+------+--------+------+-----------+--------------+
| 1 | 張三 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
| 4 | Aric | 1004 | NULL | NULL |
+------+--------+------+-----------+--------------+
rows in set (0.00 sec)
此處不僅查詢出了兩表中d_id字段相匹配的信息
并且通過LEFT JOIN查詢出了employee表中所有指定字段的信息
由于Aric沒有對(duì)應(yīng)d_name和function信息,所以顯示null
右連接查詢
復(fù)制代碼 代碼如下:
mysql> SELECT num, name, employee.d_id, d_name, function
-> FROM employee RIGHT JOIN department
-> ON employee.d_id=department.d_id;
+------+--------+------+-----------+--------------+
| num | name | d_id | d_name | function |
+------+--------+------+-----------+--------------+
| 1 | 張三 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
| NULL | NULL | NULL | 銷售部 | 策劃銷售 |
+------+--------+------+-----------+--------------+
rows in set (0.00 sec)
與上面相反,這里查詢出了匹配的信息和department表中的所有指定字段的信息
但是由于employee表中部分字段沒有對(duì)應(yīng),因此最后一行記錄有顯示NULL
復(fù)合條件連接查詢
復(fù)制代碼 代碼如下:
mysql> SELECT num, name, employee.d_id, sex, age, address
-> FROM employee, department
-> WHERE employee.d_id=department.d_id
-> AND age>=25;
+------+--------+------+------+------+-------------+
| num | name | d_id | sex | age | address |
+------+--------+------+------+------+-------------+
| 1 | 張三 | 1001 | 男 | 26 | 3號(hào)樓5層 |
| 3 | 王五 | 1002 | 男 | 25 | 5號(hào)樓1層 |
+------+--------+------+------+------+-------------+
rows in set (0.00 sec)
復(fù)合條件連接查詢是在進(jìn)行連接查詢的時(shí)候加入限制條件,此處的age>=25便是
通常情況下,限制條件越多,查詢?cè)骄_,限制條件可用AND累加
此外,還可以用復(fù)合條件進(jìn)行ORDER BY 排序
tips:連接查詢中使用最多的是內(nèi)連接查詢,而外連接查詢使用頻率較低
相關(guān)文章
-
解決Navicat for MySQL 連接 MySQL 報(bào)2005錯(cuò)誤的問題
在本地MySQL的服務(wù)啟動(dòng)后,由于Navicat的一些功能需要聯(lián)網(wǎng)才可以使用,今天重點(diǎn)給大家介紹Navicat for MySQL 連接 MySQL 報(bào)2005 -Unknown MySQL server host ‘localhost’(0)錯(cuò)誤的情況與解決方法,感興趣的朋友一起看看吧 2021-05-05
-
mysql Event Scheduler: Failed to open table mysql.event
這篇文章主要介紹了mysql Event Scheduler: Failed to open table mysql.event,需要的朋友可以參考下 2016-04-04
-
Mysql5.7.11在windows10上的安裝與配置(解壓版)
本文分為三大步給大家介紹Mysql5.7.11解壓版在windows10上的安裝與配置,另外還給大家?guī)?lái)了mysql5.7.11服務(wù)無(wú)法啟動(dòng),錯(cuò)誤代碼3534的解決方案,非常不錯(cuò),有需要的朋友參考下 2016-08-08
-
MySQL將一個(gè)字段中以逗號(hào)分隔的取出來(lái)形成新的字段實(shí)現(xiàn)
這篇文章主要介紹了MySQL將一個(gè)字段中以逗號(hào)分隔的取出來(lái)形成新的字段實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧 2020-10-10
-
MySQL里的found_row()與row_count()的解釋及用法
MySQL中有兩個(gè)函數(shù)來(lái)計(jì)算上一條語(yǔ)句影響了多少行,不同于SqlServer/Oracle,不要因?yàn)榇朔矫娴牟町惗鸸δ軉栴} 2013-02-02
-
MySQL數(shù)據(jù)庫(kù)所在服務(wù)器磁盤滿了的故障分析和解決方法
這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫(kù)所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下 2024-02-02
最新評(píng)論
連接查詢是將兩個(gè)或兩個(gè)以上的表按某個(gè)條件連接起來(lái),從中選取需要的數(shù)據(jù)
當(dāng)不同的表中存在表示相同意義的字段時(shí),可以通過該字段來(lái)連接這幾張表
參考表:employee

參考表:department
可以看到,上面兩張表都有同一個(gè)字段d_id
當(dāng)兩張表含有相同意義的字段(可以不同名)時(shí)就可以進(jìn)行連接查詢
內(nèi)連接查詢mysql> SELECT num, name, employee.d_id, sex, d_name, function
-> FROM employee, department
-> WHERE employee.d_id=department.d_id;
+------+--------+------+------+-----------+--------------+
| num | name | d_id | sex | d_name | function |
+------+--------+------+------+-----------+--------------+
| 1 | 張三 | 1001 | 男 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 女 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 男 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
+------+--------+------+------+-----------+--------------+
rows in set (0.00 sec)
內(nèi)連接查詢只會(huì)查詢完全匹配的結(jié)果,此處使用d_id字段進(jìn)行連接
下面的表中也同樣使用這一字段
外連接查詢
外查詢也需要通過指定字段來(lái)進(jìn)行連接,當(dāng)該字段取值相等時(shí),可以查詢出該記錄
而且,該字段取值不相等的記錄也可以查詢出來(lái)
外連接查詢包括左連接查詢和右連接查詢
左連接查詢
mysql> SELECT num, name, employee.d_id, d_name, function
-> FROM employee LEFT JOIN department
-> ON employee.d_id=department.d_id;
+------+--------+------+-----------+--------------+
| num | name | d_id | d_name | function |
+------+--------+------+-----------+--------------+
| 1 | 張三 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
| 4 | Aric | 1004 | NULL | NULL |
+------+--------+------+-----------+--------------+
rows in set (0.00 sec)
此處不僅查詢出了兩表中d_id字段相匹配的信息
并且通過LEFT JOIN查詢出了employee表中所有指定字段的信息
由于Aric沒有對(duì)應(yīng)d_name和function信息,所以顯示null
右連接查詢
mysql> SELECT num, name, employee.d_id, d_name, function
-> FROM employee RIGHT JOIN department
-> ON employee.d_id=department.d_id;
+------+--------+------+-----------+--------------+
| num | name | d_id | d_name | function |
+------+--------+------+-----------+--------------+
| 1 | 張三 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 2 | 李四 | 1001 | 科技部 | 研發(fā)產(chǎn)品 |
| 3 | 王五 | 1002 | 生產(chǎn)部 | 生產(chǎn)產(chǎn)品 |
| NULL | NULL | NULL | 銷售部 | 策劃銷售 |
+------+--------+------+-----------+--------------+
rows in set (0.00 sec)
與上面相反,這里查詢出了匹配的信息和department表中的所有指定字段的信息
但是由于employee表中部分字段沒有對(duì)應(yīng),因此最后一行記錄有顯示NULL
復(fù)合條件連接查詢
mysql> SELECT num, name, employee.d_id, sex, age, address
-> FROM employee, department
-> WHERE employee.d_id=department.d_id
-> AND age>=25;
+------+--------+------+------+------+-------------+
| num | name | d_id | sex | age | address |
+------+--------+------+------+------+-------------+
| 1 | 張三 | 1001 | 男 | 26 | 3號(hào)樓5層 |
| 3 | 王五 | 1002 | 男 | 25 | 5號(hào)樓1層 |
+------+--------+------+------+------+-------------+
rows in set (0.00 sec)
復(fù)合條件連接查詢是在進(jìn)行連接查詢的時(shí)候加入限制條件,此處的age>=25便是
通常情況下,限制條件越多,查詢?cè)骄_,限制條件可用AND累加
此外,還可以用復(fù)合條件進(jìn)行ORDER BY 排序
tips:連接查詢中使用最多的是內(nèi)連接查詢,而外連接查詢使用頻率較低
相關(guān)文章
解決Navicat for MySQL 連接 MySQL 報(bào)2005錯(cuò)誤的問題
在本地MySQL的服務(wù)啟動(dòng)后,由于Navicat的一些功能需要聯(lián)網(wǎng)才可以使用,今天重點(diǎn)給大家介紹Navicat for MySQL 連接 MySQL 報(bào)2005 -Unknown MySQL server host ‘localhost’(0)錯(cuò)誤的情況與解決方法,感興趣的朋友一起看看吧2021-05-05
mysql Event Scheduler: Failed to open table mysql.event
這篇文章主要介紹了mysql Event Scheduler: Failed to open table mysql.event,需要的朋友可以參考下2016-04-04
Mysql5.7.11在windows10上的安裝與配置(解壓版)
本文分為三大步給大家介紹Mysql5.7.11解壓版在windows10上的安裝與配置,另外還給大家?guī)?lái)了mysql5.7.11服務(wù)無(wú)法啟動(dòng),錯(cuò)誤代碼3534的解決方案,非常不錯(cuò),有需要的朋友參考下2016-08-08
MySQL將一個(gè)字段中以逗號(hào)分隔的取出來(lái)形成新的字段實(shí)現(xiàn)
這篇文章主要介紹了MySQL將一個(gè)字段中以逗號(hào)分隔的取出來(lái)形成新的字段實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
MySQL里的found_row()與row_count()的解釋及用法
MySQL中有兩個(gè)函數(shù)來(lái)計(jì)算上一條語(yǔ)句影響了多少行,不同于SqlServer/Oracle,不要因?yàn)榇朔矫娴牟町惗鸸δ軉栴}2013-02-02
MySQL數(shù)據(jù)庫(kù)所在服務(wù)器磁盤滿了的故障分析和解決方法
這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫(kù)所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02

