MYSQL 内外连接

php中文网
发布: 2016-06-07 15:46:57
原创
1260人浏览过

假设student表有如下记录: +--------+----------+---------+-----------+| stu_id | stu_name | stu_tel | stu_score |+--------+----------+---------+-----------+| 1 | a | 151 | 60 || 2 | b | 152 | 61 || 3 | c | 153 | 62 |+--------+----------+---

假设student表有如下记录:

+--------+----------+---------+-----------+
| stu_id | stu_name | stu_tel | stu_score |
+--------+----------+---------+-----------+
|      1 | a        |     151 |        60 |
|      2 | b        |     152 |        61 |
|      3 | c        |     153 |        62 |
+--------+----------+---------+-----------+
登录后复制

teacher表有如下记录:
+--------+----------+---------+---------+--------+
| tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+---------+--------+
|      1 | A        |     130 |    3000 |      1 |
|      2 | B        |     131 |    4000 |      2 |
|      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+---------+--------+
登录后复制

连接可分为以下几类:                 
内连接。       

内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行,也可以使用显示内连接:inner join ,没有包含一个连接条件时,;结果就是一个笛卡尔积。

mysql> select * from student inner join teacher;(类似于select * from student,teacher;)
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      1 | A        |     130 |    3000 |      1 |
|      3 | c        |     153 |        62 |      1 | A        |     130 |    3000 |      1 |
|      1 | a        |     151 |        60 |      2 | B        |     131 |    4000 |      2 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |      2 | B        |     131 |    4000 |      2 |
|      1 | a        |     151 |        60 |      3 | C        |     132 |    4000 |      0 |
|      2 | b        |     152 |        61 |      3 | C        |     132 |    4000 |      0 |
|      3 | c        |     153 |        62 |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
登录后复制

外连接。外连接可以是左向外连接、右向外连接。

在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:   
左向外连接:left join 或者left outer join    
左向外连接的结果集包括left join子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 

mysql> select * from student left join teacher on student.stu_id=teacher.stu_id;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |   NULL | NULL     |    NULL |    NULL |   NULL |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
登录后复制

右向外连接:right join  或  right outer join 。     
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
mysql> select * from student right join teacher on student.stu_id=teacher.stu_id;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|   NULL | NULL     |    NULL |      NULL |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
登录后复制

自然连接
在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
mysql> select * from student natural join teacher;
+--------+----------+---------+-----------+--------+----------+---------+---------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |
+--------+----------+---------+-----------+--------+----------+---------+---------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |
+--------+----------+---------+-----------+--------+----------+---------+---------+
登录后复制

交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。如果没有包含一个连接条件,交叉连接的结果就是一个笛卡尔积。  
mysql> select * from student cross join teacher;
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay | stu_id |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |      1 |
|      2 | b        |     152 |        61 |      1 | A        |     130 |    3000 |      1 |
|      3 | c        |     153 |        62 |      1 | A        |     130 |    3000 |      1 |
|      1 | a        |     151 |        60 |      2 | B        |     131 |    4000 |      2 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |      2 |
|      3 | c        |     153 |        62 |      2 | B        |     131 |    4000 |      2 |
|      1 | a        |     151 |        60 |      3 | C        |     132 |    4000 |      0 |
|      2 | b        |     152 |        61 |      3 | C        |     132 |    4000 |      0 |
|      3 | c        |     153 |        62 |      3 | C        |     132 |    4000 |      0 |
+--------+----------+---------+-----------+--------+----------+---------+---------+--------+
登录后复制

如果要连接的列的名字相同,并且连接条件就是两者相等,那么也可以使用using,只需把on语句用using替换即可;
mysql> select * from student inner join teacher using(stu_id);
+--------+----------+---------+-----------+--------+----------+---------+---------+
| stu_id | stu_name | stu_tel | stu_score | tea_id | tea_name | tea_tel | tea_pay |
+--------+----------+---------+-----------+--------+----------+---------+---------+
|      1 | a        |     151 |        60 |      1 | A        |     130 |    3000 |
|      2 | b        |     152 |        61 |      2 | B        |     131 |    4000 |
+--------+----------+---------+-----------+--------+----------+---------+---------+
登录后复制


天天团购系统
天天团购系统

天天团购系统是一套强大的开源团购程序,采用PHP+mysql开发,系统内置支付宝、财付通、GOOGLE地图等接口,支持短信发送团购券和实物团购快递发货等;另外可通过Ucenter模块,与网站已有系统无缝整合,实现用户同步注册、登陆、退出。 天天团购系统是一套创新的开源团购程序,拥有多达10项首创功能,同时支持虚拟和实物团购,内置类似淘宝的快递配送体系,并提供强大的抽奖、邀请返利等营销功能,让您轻松

天天团购系统 0
查看详情 天天团购系统
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号