700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql 的 外连查询

mysql 的 外连查询

时间:2022-09-14 18:13:07

相关推荐

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字段,否则可能不显示。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。