mysql左/右/内连接
2015-07-08 16:31
567 查看
一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试。
先说左外连接和右外连接:
SQL>select * from t1;
SQL>select * from t2;
左外连接:
SQL>select * from t1 left join t2 on t1.id=t2.id;
右外连接:
SQL>select * from t1 right join t2 on t1.id=t2.id;
从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。
再看内连接:
SQL>select * from t1 inner join t2 on t1.id=t2.id;
看到没有?只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。
先说左外连接和右外连接:
SQL>select * from t1;
ID NAME 1 aaa 2 bbb
SQL>select * from t2;
ID AGE 1 20 3 30
左外连接:
SQL>select * from t1 left join t2 on t1.id=t2.id;
ID NAME ID AGE 1 aaa 1 20 2 bbb
右外连接:
SQL>select * from t1 right join t2 on t1.id=t2.id;
ID NAME ID AGE 1 aaa 1 20 3 30
从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。
再看内连接:
SQL>select * from t1 inner join t2 on t1.id=t2.id;
ID NAME ID AGE 1 aaa 1 20
看到没有?只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。
相关文章推荐
- MySQL中的integer 数据类型
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复
- MySQL 优化
- MySQL 数据类型
- Facebook's New Real-time Messaging System: HBase to Store 135+ Billion Messages a Month