当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表
内连接查询//只能查询出指定字段取值相同的记录
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)