SQL基础 之 表连接
来源:互联网 发布:淘宝优惠券分享网站 编辑:程序博客网 时间:2024/06/03 20:27
关键字:基表, 匹配, 笛卡尔积
交叉连接
交叉连接(cross join):不带on子句,返回的是两表的乘积,也叫笛卡尔积
有两种,显式的和隐式的,(只是SQL书写方式不同而已)
两张原始表
person 表:人员表,包括主键ID, 姓名name
order表:人员喜欢的食物表,包括主键ID, 食物Food, person_id,
交叉连接后(行数是 3*4)
隐式SQL
SELECT o.* , p.* From order as o , person as p
显示SQL (使用CORSS JOIN)
SELECT o.* , p.* From order as o cross join person as p
内连接
a.内连接
内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
内连接的语法如下:
select fieldlist from table1 [inner] join table2 on table1.column = table2.column
例子
select p.* , o.* from person p inner join order o on p.id = o.person_id
结果如下(及从两表的笛卡尔积中选出 符合on后面条件 的行)
外连接
外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。
在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)。
左连接
select p.* , o.* from person p left join order o on p.id = o.id
可以这样去考虑,第一步取出person的第一行,匹配oder表所有行,如果满足 on条件, 则匹配上,如下结果得到两条记录
第二步:用person表的第二行重复第一步的操作,结果也是有两条可以匹配。
第三步:用person表的第三行重复第一步的操作,但是没有一条匹配上。结果会是这样的,如下图
所以最后的结果是5条
- SQL基础 之 表连接
- sql之表连接
- Oracle sql 之表连接
- SQL基础--常见多表连接查询
- SQL基础之多表连接查询
- SQL连接基础类
- Oracle SQL基础之(二) [联合查询、union、子查询、外、内连接、复制表]
- sql基础---sql连接查询
- 数据库基础系列之三:Sql Server连接端口
- sql基础之表关联
- JDBC基础之连接
- SQL回炉之二:多表连接
- 数据库SQL之表关系&连接查询
- SQL多表查询之左右连接
- sql之内外连接
- SQL之连接
- SQL 之---连接
- SQL Server之连接
- js定位DOM元素
- 利用rsync实现自动化部署的一种方案
- Leetcode|Reverse Integer(string转char*总结)
- struts工作流程
- Linux 常用命令(1)
- SQL基础 之 表连接
- Eclipse下的maven web项目部署到tomcat服务器没有启动的解决方案
- MaterialDialog
- 类,方法,协议和nsstring互转
- Android学习之路
- Spring MVC Controller线程问题
- Math Basic
- MySQL5.6的备份与恢复命令
- [LeetOode][Java] Divide Two Integers