分享
 
 
 

2006-5-20 SQL 外链接操作小结 inner join & left join & right join

王朝mssql·作者佚名  2006-05-20
窄屏简体版  字體: |||超大  

标题: 2006-5-20 SQL 外链接操作小结 inner join & left join & right join

正文:

QUOTE:

数据库操作语句

7. 外连接——交叉查询

7.1 查询

7.2 等值连接

7.3 右外连接

7.4 左外连接

7.5 更新操作

简介:

外部连接和自联接

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

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

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

on 指定表间联结字段及其关系的等号 "=" 表达式, 返回 true 或 false. 当表达式返回 true 时, 则查询中包含该记录.

! 外部连接只能操作已存在于数据库中的数据

CODE:

7.5.2

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

7.5.1

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;

7.5 更新操作

74.5 左连接中数据的筛选

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

//本语句功能为, 显示主表的全部内容, 插入数据到副表中没有的数据

//主要作用为: 让数据减少冗余

7.4.4.1 上例中的延续

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;

7.4.4 显示文章表中的全部, 调用类别表中的栏目

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 为子类别

7.4.3 同上例, 选择追加数据时加上空格

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;

7.4.2 连接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

7.4.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

7.4. 左连接

7.3.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

7.3 右外连接

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

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

7.2.3 添加数据到连接表之一

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;

7.2.2 变通中的用法二

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;

7.2.1 实际应用中的变通

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;

7.2 添加数据到其他表

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 不等于 没有

7.1.1 实际应用中的变通

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;

7.1 查询

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 不是必要

7. 外连接——交叉查询

提示: 注意表中相同的栏目

shawl.qiu

1:15 2006-5-20

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有