本篇文章给大家带来了关于sql的相关知识,其中主要介绍了关于表连接的相关内容,sql server中支持多种连接,包括内连接、左连接、右连接、交叉连接和全外连接,下面一起来看一下,希望对大家有帮助。
推荐学习:《sql教程》
sql的表连接在关系数据库中,数据分布在多个逻辑表。想要获得完整有意义的数据集,则需要使用连接来查询这些表中的数据。sql server中支持多种连接,包括内连接、左连接、右连接、交叉连接和全外连接。
一、内连接
内部连接子句用于查询来自两个或多个相关表的数据。inner join 子句的语法:
select p.product_name, p.list_price ,c.category_namefrom production.products p inner join production.categories c on c.category_id = p.category_id
注意:要查询的字段,必须要在字段的前面加上表名或者表的别名,如:p.product_name
其中from后面的是主表,然后 inner join 后面的表是要连接的表。主表和连接表进行比较,查 找满足的条件的所有行。连接谓词的计算结果为true是,则将主表和连接表进行合并成新的结果 集,如下图所示:
内连接的多个表连接,如下所示:
select p.product_name, p.list_price ,c.category_name, b.brand_namefrom production.products p inner join production.categories c on c.category_id = p.category_id inner join production.brands b on b.brand_id = p.brand_id
二、左连接
在左连接中使用 left join 子句用于查询来自多个表的数据,它返回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,则使用null代替显示,如图所示:
使用 left join 语句进行连接:如下所示:
select p.product_name, p.list_price ,c.category_namefrom production.products p left join production.categories c on c.category_id = p.category_id
在上面的语法中 from 后面的表是左表(production.products),而 left join 后面紧跟的右 表(production.categories)。
三、右连接
在右连接中使用right join子句来进行两个表或多个表进行查询。右查询刚好与左查询的是相反 的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,则返回null代替显示,如图所示:
使用 right join 语句进行连接:如下所示:
select p.product_name, p.list_price ,c.category_namefrom production.products p right join production.categories c on c.category_id = p.category_id
在上面的语法中 from 后面的表是左表(production.products),而 right join 后面紧跟的右 表(production.categories)。
四、交叉连接
cross join 连接两个或多个不相关的表。 以下是两个表的cross join 的语法,两种写法:
select t1.select_list from t1 cross join t2;
或者
select t1.select_list from t1, t2;
cross join 将第一个表(t1)中的每一行与第二个表(t2)中的每一行连接起来。 换句话说,交叉连 接返回两个表中行的笛卡尔积。与inner join或left join不同,交叉连接不会在连接的表之间 建立关系。
假设 t1 表包含三行: 1 , 2 和 3 , t2 表包含三行: a , b 和 c 。 cross join 从第一个 表(t1)获取一行,然后为第二个表(t2)中的每一行创建一个新行。 然后它对 第一个 表(t1)中的 下一行执行相同操作,依此类推。在此图中, cross join 总共创建了 9 行。
五、自连接
自联接用于将表连接到自身(同一个表)。 它对于查询分层数据或比较同一个表中的行很有用。
自联接使用内连接或左连接子句。 由于使用自联接的查询引用同一个表,因此表别名用于为查询 中的表分配不同的名称。
注意:如果在不使用表别名的情况下在查询中多次引用同一个表,则会出现错误。
示例:
select t1.select_list from t1 t1inner join t1 t2 on t1.category_id = t2.category_id
在 inner join 这里可以使用其他的子句,比如:left join ,right join
六、全外连接
full outer join当左表或右表中存在匹配项时,该命令将返回所有行。如图所示:
使用 full outer join 查询 pm.projects 表和 pm.member 表中的数据:
select m.name member, p.title project from pm.members m full outer join pm.projects p on p.id = m.project_id;
pm.projects 表数据:
pm.member 表数据:
查询结果:
推荐学习:《sql教程》
以上就是一起聊聊sql的表连接的详细内容。