关闭

SQL基础 之 表连接

标签: sql
230人阅读 评论(0) 收藏 举报
分类:

关键字:基表, 匹配, 笛卡尔积

交叉连接

交叉连接(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条

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    最新评论