`
gapele
  • 浏览: 56687 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL 链接操作小结 inner join left join right join

    博客分类:
  • SQL
阅读更多

外部连接和自联接
inner join(等值连接) 只返回两个表中联结字段相等的行
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
on 指定表间联结字段及其关系的等号 "=" 表达式, 返回 true 或 false. 当表达式返回 true 时, 则查询中包含该记录.
! 外部连接只能操作已存在于数据库中的数据

Update (ctarticle AS a LEFT JOIN ctclass AS c ON a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid
SET tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid
Where a.classid=23 AND a.nclassid=0 AND tagid is not null

Update (ctarticle AS a LEFT JOIN (ctnclass AS c LEFT JOIN ctclass AS d ON c.classid = d.classid) ON a.nclassid = c.nclassid AND a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid SET tag=d.class+' '+c.nclass, b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid Where a.classid=23 AND a.nclassid=197;

更新操作
左连接中数据的筛选
Insert INTO cttag(articleid,classid,nclassid) Select a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on a.articleid=b.articleid where b.articleid is null

//本语句功能为, 显示主表的全部内容, 插入数据到副表中没有的数据
//主要作用为: 让数据减少冗余

上例中的延续
Select a.*, b.*, c.*, d.*
FROM cttag as d left join ((ctarticle AS a LEFT JOIN ctclass AS b ON a.classid=b.classid) LEFT JOIN ctnclass AS c ON a.nclassid=c.nclassid) on d.articleid=a.articleid;

显示文章表中的全部, 调用类别表中的栏目
select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid

//作用, 有时在文章表中包含了在个别类别表中没有的数据, 用这个语法可以读出文章表的全部数据
//a 为 文章表, b 为主类别, c 为子类别

同上例, 选择追加数据时加上空格
Insert INTO cttag(articleid,classid,nclassid,tag)
Select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass
FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=4 and a.nclassid=154;

连接N个表, 并追加数据到其中一个表, N=4
insert INTO cttag(articleid,classid,nclassid,tag)
Select a.articleid,a.classid,a.nclassid,d.class+c.nclass
FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解读
插入到 表2(栏1,栏2,栏3,栏4)
选择 别名a.栏1, 别名a.栏2, 别名a.栏3, 别名d.栏4 加上 别名c.栏5
从 (表1 别名a 左连接 (表3 别名c 左连接 表4 别名d 在 别名c.栏2 等于 别名d.栏2) 在 别名a.栏2 等于 别名c.栏2 和 别名a.栏3=别名c.栏3) 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏2=1 和 别名a.栏3=1

连接两个表, 并追加数据到其中一个表
Insert INTO cttag(articleid,classid,nclassid)
Select a.articleid,a.classid,a.nclassid
FROM ctarticle AS a LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

//解读
插入到 表2(栏1,栏2,栏3)
选择 别名a.栏1, 别名a.栏2, 别名a.栏3
从 表1 别名a 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏4=1 和 别名a.栏5=1

左连接

同步两表的数据
Update ctarticle a INNER JOIN cttag b ON a.articleid = b.articleid SET b.classid=a.classid, b.nclassid=a.nclassid;

//解读
更新 表1 别名a 联接 表2 别名2 在 别名a.栏1 等于 别名b.栏1 设置 别名b.栏2 更新为 别名a.栏2, 别名b.栏3 更新为 别名a.栏3

右外连接
select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20

查询别名 a,b 表, 只匹配 b 表中的内容.

添加数据到连接表之一
Insert INTO cttag ( tag, articleid ) Select top 1 b.tag, a.articleid FROM ctarticle AS a left JOIN cttag AS b ON a.articleid = b.articleid Where a.articleid order by a.articleid desc;

变通中的用法二
Insert INTO bureply
Select b.*, a.classid, a.nclassid
FROM article AS a INNER JOIN reply AS b ON a.articleid = b.articleid
Where classid=50;

实际应用中的变通
Insert INTO butag ( tag, articleid, classid, nclassid)
Select b.tag, a.articleid, a.classid, a.nclassid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where classid=24;


添加数据到其他表
Insert INTO butag ( tag, articleid )
Select b.tag, a.articleid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.articleid<>False;

//解读
添加到 接收表(列1,列2)
选择 别名b.列1, 别名a.列2
从 表1 表名a 联接 表2 表名b 在 别名a.列c 等于 别名b.列c
在哪里 别名a.列c 不等于 没有

实际应用中的变通
Select b.tag, a.articleid, a.classid, a.nclassid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.classid=24;

查询
Select b.tag, a.articleid
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
Where a.articleid<>False;

//解读
选择 别名b.列, 别名a.列
从 表1 别名a 联接 表2 别名b 在 别名a.列c = 别名b.列c
在哪里 别名a.列c 不等于 没有
注: as 不是必要

分享到:
评论

相关推荐

    SQL语句left join/right join/inner join 的用法比较

    本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN(左连接) LEFT JOIN返回所有左表(在本例中为A表)的记录,即使在右表(B表)中没有...

    inner join、 left join 、right join、 outer join之间的区别

    ### inner join、left join、right join、outer join之间的区别 在数据库操作中,连接(Join)是一种非常重要的操作,用于组合两个或多个表中的数据。根据连接的方式不同,可以分为几种类型:`INNER JOIN`、`LEFT ...

    SQL中的left outer join,inner join,right outer join用法详解

    * FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER 中所有行的超集。 内连接(Inner Join) 内连接是最常见的一种连接,它也被称为普通连接,而 E.FCodd 最早称之为自然连接。例如: SELECT * FROM t_institution i ...

    SQL 外链接操作小结 inner join left join right join

    SQL 外链接操作小结 inner join left join right join SQL 外链接操作是关系型数据库管理系统中的一种基本操作,用于从多个表中检索数据。外链接操作可以分为三种:inner join、left join 和 right join。 inner ...

    SQL语句inner join,left join ,right join连接的不同之处

    根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)。本文将详细探讨这三种连接方式的区别,并通过具体的例子来解释它们的应用场景。 ### 内连接...

    关于sql的left join,right join,inner join,outerjoin

    总之,LEFT JOIN、RIGHT JOIN、INNER JOIN和OUTER JOIN是SQL语言中的核心部分,理解和熟练运用它们对于任何数据库开发人员都至关重要。通过不断的实践和学习,你可以更好地掌握这些JOIN类型,并在解决复杂数据查询...

    (Left join , Right Join, Inner Join)用法详解

    ### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...

    left join right join inner join 区别和联系

    左连接(LEFT JOIN)、右连接(RIGHT JOIN)和内连接(INNER JOIN)是三种最基本的连接类型。在本节中,我们将详细介绍左连接、右连接和内连接的区别和联系。 左连接(LEFT JOIN) 左连接返回左表中的所有行,右表...

    SQL表连接查询(inner join、full join、left join、right join)1

    在SQL中,主要有四种类型的连接查询:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面将详细解释这四种连接方式。 1. 内连接(INNER JOIN): 内连接返回两个表中...

    SQL left join

    SQL Left Join、Right Join和Inner Join都是用于组合表数据的查询操作,但它们之间存在着明显的区别。 * Left Join:以左表为基础,返回左表中的所有记录和右表中符合条件的记录。 * Right Join:以右表为基础,...

    关于SQL 中的inner join的使用

    ### SQL中的INNER JOIN详解 #### 一、INNER JOIN的基本概念 **INNER JOIN** 是SQL中最常用的连接类型之一,主要用于从两个或多个表中提取数据,其中仅返回那些满足连接条件的记录。简单来说,INNER JOIN返回的是两...

    sql join( inner join, outer join) 分析

    在SQL(结构化查询语言)中,JOIN操作是用于合并两个或多个表的数据,以便根据它们之间的关联性创建新的结果集。JOIN关键字是SQL查询中的关键部分,它允许我们在不同的表之间建立联系,以获取更丰富的信息。在这个...

    SQL中inner join、outer join和cross join的区别

    根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...

    SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    SQL语句优化对于大型数据库系统至关重要,特别是在涉及多表查询时,JOIN、LEFT JOIN 和 RIGHT JOIN 的高效运用能显著提升查询速度。以下将详细探讨这些JOIN类型以及相关的优化策略。 JOIN原理: JOIN操作实际上是...

    数据库关联查询(left,right,inner join)

    ### 数据库关联查询(Left, Right, Inner Join) 在数据库管理与操作中,关联查询是一项极为重要的技术,它能够帮助我们高效地从多个表中提取数据,并根据特定条件进行匹配和整合。本文将通过通俗易懂的方式,详细...

    MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx

    本文档详细介绍了 MySQL 中的 JOIN 语法,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等,并提供了实际的实例来说明 JOIN 的用法。 首先,MySQL 的 JOIN 语法用于根据两个或多个表中的字段之间的关系,从...

    hive sql + left join 数据缺失

    ### Hive SQL Left Join 数据缺失问题解析 #### 一、问题背景 在大数据处理场景中,Hive 是一种广泛使用的工具,用于对存储在 Hadoop 文件系统中的数据进行数据汇总、查询和分析。随着Hive版本的不断更新,部分用户...

    SQL联合查询inner join、outer join和cross join的区别详解

    这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....

    join on 语句及扩展

    在SQL查询中,JOIN操作是用于合并两个或更多表中的数据的关键部分,它允许你在不同表之间建立联系,以便从多个源获取所需的信息。这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER ...

Global site tag (gtag.js) - Google Analytics