mysql 的 外连查询
生活随笔
收集整理的這篇文章主要介紹了
mysql 的 外连查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:外連查詢包含左聯查詢和右聯查詢,下面先介紹左聯查詢:?
第一部分:左連查詢
mysql> select * from employee; +-----+------+--------+------+------+--------------------+ | num | d_id | name | age | sex | homeaddr | +-----+------+--------+------+------+--------------------+ | 1 | 1001 | 張三 | 26 | 男 | 北京市海淀區 | | 2 | 1001 | 李四 | 24 | 女 | 北京市昌平區 | | 3 | 1002 | 王五 | 25 | 男 | 湖南省長沙市 | | 4 | 1004 | Aric | 15 | 男 | England | +-----+------+--------+------+------+--------------------+ 4 rows in set (0.00 sec)mysql> select * from department; +------+-----------+--------------+-------------+ | d_id | d_name | function_ | address | +------+-----------+--------------+-------------+ | 1001 | 科研部 | 研發產品 | 3號樓5層 | | 1002 | 生產部 | 生產產品 | 5號樓1層 | | 1003 | 銷售部 | 策劃銷售 | 5號樓1層 | +------+-----------+--------------+-------------+ 3 rows in set (0.00 sec)下面的這段代碼到底錯在哪里呢??
mysql> select num,name,age,sex,d_name,department.d_id,address,homeaddr from employee left john department on employee.d_id = department.d_id;其實,就是單詞拼寫錯誤,不是john,而是join
比如:
mysql> select d_name,num,employee.d_id,age,sex,homeaddr,address from employee left join department on department.d_id = employee.d_id; +-----------+-----+------+------+------+--------------------+-------------+ | d_name | num | d_id | age | sex | homeaddr | address | +-----------+-----+------+------+------+--------------------+-------------+ | 科研部 | 1 | 1001 | 26 | 男 | 北京市海淀區 | 3號樓5層 | | 科研部 | 2 | 1001 | 24 | 女 | 北京市昌平區 | 3號樓5層 | | 生產部 | 3 | 1002 | 25 | 男 | 湖南省長沙市 | 5號樓1層 | | NULL | 4 | 1004 | 15 | 男 | England | NULL | +-----------+-----+------+------+------+--------------------+-------------+ 4 rows in set (0.00 sec)顯然,左連接查詢的語法是:
select 屬性字段 from 表名1 left join 表名2 on? 表名1.屬性 = 表名2.屬性
可以仿照英語語法記憶,from ....? left join? ... on?
mysql> select num,age,department.d_id from department left join employee on department.d_id = employee.d_id; +------+------+------+ | num | age | d_id | +------+------+------+ | 2 | 24 | 1001 | | 1 | 26 | 1001 | | 3 | 25 | 1002 | | NULL | NULL | 1003 | +------+------+------+ 4 rows in set (0.00 sec)下面來一個內連查詢的例子,體會區別:
mysql> select employee.d_id,age,name,address from employee,department -> where employee.d_id=department.d_id; +------+------+--------+-------------+ | d_id | age | name | address | +------+------+--------+-------------+ | 1001 | 26 | 張三 | 3號樓5層 | | 1001 | 24 | 李四 | 3號樓5層 | | 1002 | 25 | 王五 | 5號樓1層 | +------+------+--------+-------------+ 3 rows in set (0.00 sec)自己體會,內連查詢就是同時查詢兩個表的字段,代碼特點是from后有用逗號分割的兩個表,但是外連查詢是固定句型from ...left join ... on ...=...,比內連查詢語法復雜些。
左連接查詢能查出表1的所有記錄,而表2的匹配記錄才可以查出。
第二部分:右連查詢
右連接查詢和左連接查詢正好相反,左連接查詢用詞left,而右連接查詢用right,左連接查詢能查詢左表(表1)的所有記錄,而右連接查詢能查詢右表(表2)的所有記錄:
mysql> select function_,name,employee.d_id,d_name,homeaddr from employee right join department on employee.d_id = department.d_id; +--------------+--------+------+-----------+--------------------+ | function_ | name | d_id | d_name | homeaddr | +--------------+--------+------+-----------+--------------------+ | 研發產品 | 李四 | 1001 | 科研部 | 北京市昌平區 | | 研發產品 | 張三 | 1001 | 科研部 | 北京市海淀區 | | 生產產品 | 王五 | 1002 | 生產部 | 湖南省長沙市 | | 策劃銷售 | NULL | NULL | 銷售部 | NULL | +--------------+--------+------+-----------+--------------------+ 4 rows in set (0.00 sec)仍然是select from ...right join ...on ...=....
mysql> select function_,name,department.d_id,d_name,homeaddr from employee rightjoin department on employee.d_id = department.d_id; +--------------+--------+------+-----------+--------------------+ | function_ | name | d_id | d_name | homeaddr | +--------------+--------+------+-----------+--------------------+ | 研發產品 | 李四 | 1001 | 科研部 | 北京市昌平區 | | 研發產品 | 張三 | 1001 | 科研部 | 北京市海淀區 | | 生產產品 | 王五 | 1002 | 生產部 | 湖南省長沙市 | | 策劃銷售 | NULL | 1003 | 銷售部 | NULL | +--------------+--------+------+-----------+--------------------+ 4 rows in set (0.00 sec)上面的2個查詢看起來一樣,只是employee.d_id換成了department.d_id,卻都顯示了一個d_id,由此,右連接查詢公共字段使用表2字段,左連接查詢公共字段盡量使用表1字段,否則可能不顯示。
總結
以上是生活随笔為你收集整理的mysql 的 外连查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的内连接查询
- 下一篇: python3 用pygame 简单