`
deng131
  • 浏览: 672682 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MS-SQL左/右等值连接

阅读更多
左,右连接和等值联接;

inner join(等值连接) 只返回两个表中联结字段相等的行

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

on 指定表间联结字段及其关系的等号 "=" 表达式

外部连接只能操作已存在于数据库中的数据
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 不是必要
分享到:
评论

相关推荐

    a-SQL试卷格式[归纳].pdf

    4. 内连接主要包括等值连接,即基于相等条件进行的连接。 以上内容详细解析了SQL Server中的关键概念、操作和特性,涵盖了数据库管理、SQL语句使用、数据完整性、存储过程和触发器等软件开发中的重要知识点。

    数据查询与修改实验

    2. **复杂查询操作**:包括等值连接、自然连接等较为高级的查询技术。 3. **统计查询操作**:运用分组、集函数等来实现更为复杂的统计需求。 4. **嵌套查询操作**:掌握使用IN、EXISTS、NOT EXISTS等关键字构建嵌套...

    21天学通SQL

    - **等值联合**:等值联合(也称为等值连接)是在两个表之间建立连接的一种方式,其中连接条件通常是相等的关系。 - **不等值联合**:不等值联合指的是在连接条件中使用不等关系的情况。 - **外部联合与内部联合**:...

    一般SQL语句优化整理

    - **性能对比**:优化后执行时间由40109.38ms减少至8531.25ms,性能显著提高。 ### 2. 使用TOP关键字 - **应用场景**:在SQL Server中,如果只需要查询结果的前几条记录,可以使用`TOP`关键字来限制返回的数据量...

    数据库实验指导书(20211007022553).pdf

    - 学习不同类型的查询,包括单表查询、连接查询(等值连接、自然连接、自身连接、外连接、复合条件连接和嵌套查询)。 2. **具体查询示例** - 查询供应商、零件信息,以及供应特定工程的供应商和零件等,以实际...

    sql数据库实例(数据库入门)[整理].pdf

    SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,广泛应用于各种数据库管理系统,如MS SQL Server 2000。在这个实验中,我们将深入理解SQL的基础概念,通过创建数据库、设置完整性约束、查询...

    计算机第五章 2.doc

    - 联接运算:将两个关系通过公共属性连接,包括等值连接和自然连接 5. **Access数据库组件** - 表(Table):Access数据库的核心,由表结构(字段定义)和表内容(记录)组成,支持设计视图和数据表视图操作 - ...

    Perl 实例精解(第三版).pdf

    15.4.2 范例15-1:ex1.p1在MS SQL Server上的ADO简单查询,DSN 15.4.3 执行DDL和DML操作 15.4.4 范例15-2:ex2.p1 MSS上persons.sql的Perl ADO,无DSN 15.4.5 范例15-3:ex3.p1 MS SQL Server上的...

    Mysql数据库索引(2)- 为select设计索引- 自学笔记

    将所有等值谓词的列(非范围连接符)作为索引最开头的列,任意顺序即可。例如,如果查询条件包含 `CITY = ?`,则可以创建索引 `(CITY, LNAME)` 或 `(LNAME, CITY)`,这样可以减少索引片的宽度。 2. **二星(索引...

Global site tag (gtag.js) - Google Analytics