MySQL连接查询join

当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表

内连接查询//只能查询出指定字段取值相同的记录

mysql> select * fromdepartment;

+------+-----------+--------------+---------------------+

| d_id | d_name    | function     | address             |

+------+-----------+--------------+---------------------+

| 1001 | 科研部 | 研发产品 | 3号楼5         |

| 1002 | 生产部 | 生产产品 | 5号楼1         |

| 1003 | 销售部 | 策划销售 | 1号楼销售大厅 |

+------+-----------+--------------+---------------------+

3 rows in set (0.00sec)

 

mysql> select * fromemployee;

+-----+------+--------+------+------+--------------------+

| 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.01sec)

 

mysql> selectnum,name,employee.d_id,age,sex,d_name,function from department,employee whereemployee.d_id=department.d_id;

+-----+--------+------+------+------+-----------+--------------+

| num | name   | d_id | age | sex  | d_name    | function     |

+-----+--------+------+------+------+-----------+--------------+

|   1 | 张三 | 1001 | 26   |  | 科研部 | 研发产品 |

|   2 | 李四 | 1001 | 24   |  | 科研部 | 研发产品 |

|   3 | 王五 | 1002 | 25   |  | 生产部 | 生产产品 |

+-----+--------+------+------+------+-----------+--------------+

3 rows in set (0.01sec)

外连接查询(左连接查询和右连接查询

当该字段取值相等时,可以查询出该记录,如果该字段取值不相等的记录也可以查询出来

左外连接: 可以查询出表名1”所指的表中的所有记录,而表名2”所指的表中,只能查询出匹配的记录

select 属性名列表

       from表名1 left|right join 表名2

       on表名1.属性名1=表名2.属性名2;

mysql> selectnum,name,employee.d_id,age,sex,d_name,function from employee left join department on

   -> employee.d_id=department.d_id;

+-----+--------+------+------+------+-----------+--------------+

| num | name   | d_id | age | sex  | d_name    | function     |

+-----+--------+------+------+------+-----------+--------------+

|   1 | 张三 | 1001 | 26  |   | 科研部 | 研发产品 |

|   2 | 李四 | 1001 | 24  |   | 科研部 | 研发产品 |

|   3 | 王五 | 1002 | 25  |   | 生产部 | 生产产品 |

|  4 | Aric   | 1004 | 15   |   | NULL      | NULL         |

+-----+--------+------+------+------+-----------+--------------+

4 rows in set (0.01 sec)

右外连接:可以查询出表名2”所指的表中的所有记录,而表名1”所指的表中,只能查询出匹配的记录

 

mysql> selectnum,name,age,sex,department.d_id,d_name,function

   -> from employee right join departmenton employee.d_id=department.d_id;

+------+--------+------+------+------+-----------+--------------+

| num  | name  | age  | sex  | d_id | d_name    | function     |

+------+--------+------+------+------+-----------+--------------+

|    1 | 张三 | 26   |   | 1001 | 科研部 | 研发产品 |

|    2 | 李四 | 24   |   | 1001 | 科研部 | 研发产品 |

|    3 | 王五 | 25   |   | 1002 | 生产部 | 生产产品 |

| NULL | NULL   | NULL | NULL | 1003 | 销售部 | 策划销售 |

+------+--------+------+------+------+-----------+--------------+

4 rows in set (0.00 sec)

 

综合查询

mysql> selectnum,name,employee.d_id,age,sex,d_name,function from employee,department whereemployee.d_id=department.d_id and age>24;

+-----+--------+------+------+------+-----------+--------------+

| num | name   | d_id | age | sex  | d_name    | function     |

+-----+--------+------+------+------+-----------+--------------+

|   1 | 张三 | 1001 | 26  |   | 科研部 | 研发产品 |

|   3 | 王五 | 1002 | 25  |   | 生产部 | 生产产品 |

+-----+--------+------+------+------+-----------+--------------+

2 rows in set (0.00 sec)

 

 

 

 

 

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS