`

[原]SQL内外连接

阅读更多

-- Author:Winty(天堂露珠)
-- Date:2009-6-14
use test;
-- 创建表
CREATE TABLE Student(
    sid VARCHAR(20),
    sname VARCHAR(50),
    cid VARCHAR(20),
    PRIMARY KEY(sid)
);

CREATE TABLE Course(
    cid VARCHAR(20),
    cname VARCHAR(50),
    PRIMARY KEY(cid)
);

INSERT INTO Student values('S001','张三','C100');
INSERT INTO Student values('S002','李四','C200');
INSERT INTO Student values('S003','王五','C300');
-- C000是Course表中没有的
INSERT INTO Student values('S004','赵六','C000');

INSERT INTO Course values('C100','操作系统');
INSERT INTO Course values('C200','编译原理');
INSERT INTO Course values('C300','网络安全');
-- C400是Student表中没有引用的
INSERT INTO Course values('C400','软件技术');


-- 笛卡尔积
SELECT * FROM Student , Course;
/*
结果
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C100 | 操作系统 |
| S003 | 王五  | C300 | C100 | 操作系统 |
| S004 | 赵六  | C000 | C100 | 操作系统 |
| S001 | 张三  | C100 | C200 | 编译原理 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C200 | 编译原理 |
| S004 | 赵六  | C000 | C200 | 编译原理 |
| S001 | 张三  | C100 | C300 | 网络安全 |
| S002 | 李四  | C200 | C300 | 网络安全 |
| S003 | 王五  | C300 | C300 | 网络安全 |
| S004 | 赵六  | C000 | C300 | 网络安全 |
| S001 | 张三  | C100 | C400 | 软件技术 |
| S002 | 李四  | C200 | C400 | 软件技术 |
| S003 | 王五  | C300 | C400 | 软件技术 |
| S004 | 赵六  | C000 | C400 | 软件技术 |
+------+-------+------+------+----------+
*/


-- 自然连接:NATURAL JOIN
SELECT * FROM Student NATURAL JOIN Course;
/*
结果:
+------+------+-------+----------+
| cid  | sid  | sname | cname    |
+------+------+-------+----------+
| C100 | S001 | 张三  | 操作系统 |
| C200 | S002 | 李四  | 编译原理 |
| C300 | S003 | 王五  | 网络安全 |
+------+------+-------+----------+
*/


-- 内连接:INNER JOIN
SELECT * FROM Student s INNER JOIN Course c ON s.cid=c.cid;
/*
结果:
+------+------+-------+----------+
| cid  | sid  | sname | cname    |
+------+------+-------+----------+
| C100 | S001 | 张三  | 操作系统 |
| C200 | S002 | 李四  | 编译原理 |
| C300 | S003 | 王五  | 网络安全 |
+------+------+-------+----------+
*/

-- 与使用INNER JOIN结果类似,但包含重复列(cid)
SELECT * FROM Student s , Course c WHERE s.cid=c.cid;
/*
结果:
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C300 | 网络安全 |
+------+-------+------+------+----------+
*/


-- 左外连接: LEFT OUTER JOIN
SELECT * FROM Student AS s LEFT JOIN Course AS c ON s.cid=c.cid;
/*
结果:
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C300 | 网络安全 |
| S004 | 赵六  | C000 | NULL | NULL     |
+------+-------+------+------+----------+
*/


-- 右外连接: RIGHT OUTER JOIN
SELECT * FROM Student s RIGHT JOIN Course c ON s.cid=c.cid;
/*
结果:
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C300 | 网络安全 |
| NULL | NULL  | NULL | C400 | 软件技术 |
+------+-------+------+------+----------+
*/


-- FULL OUTER JOIN:用左右连接实现
SELECT * FROM Student AS s LEFT JOIN Course AS c ON s.cid=c.cid
UNION
SELECT * FROM Student s RIGHT JOIN Course c ON s.cid=c.cid;
/*
结果
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C300 | 网络安全 |
| S004 | 赵六  | C000 | NULL | NULL     |
| NULL | NULL  | NULL | C400 | 软件技术 |
+------+-------+------+------+----------+
*/

-- 交叉连接:CROSS JOIN
-- 与SELECT * FROM Student
SELECT * FROM Student CROSS JOIN Course;
/*
结果
+------+-------+------+------+----------+
| sid  | sname | cid  | cid  | cname    |
+------+-------+------+------+----------+
| S001 | 张三  | C100 | C100 | 操作系统 |
| S002 | 李四  | C200 | C100 | 操作系统 |
| S003 | 王五  | C300 | C100 | 操作系统 |
| S004 | 赵六  | C000 | C100 | 操作系统 |
| S001 | 张三  | C100 | C200 | 编译原理 |
| S002 | 李四  | C200 | C200 | 编译原理 |
| S003 | 王五  | C300 | C200 | 编译原理 |
| S004 | 赵六  | C000 | C200 | 编译原理 |
| S001 | 张三  | C100 | C300 | 网络安全 |
| S002 | 李四  | C200 | C300 | 网络安全 |
| S003 | 王五  | C300 | C300 | 网络安全 |
| S004 | 赵六  | C000 | C300 | 网络安全 |
| S001 | 张三  | C100 | C400 | 软件技术 |
| S002 | 李四  | C200 | C400 | 软件技术 |
| S003 | 王五  | C300 | C400 | 软件技术 |
| S004 | 赵六  | C000 | C400 | 软件技术 |
+------+-------+------+------+----------+
*/


-- UNION
SELECT * FROM Student WHERE sid='S001'
UNION
SELECT * FROM Student WHERE sid='S002';
-- 与此等价
SELECT * FROM Student WHERE sid='S001' OR sid='S002';
/*
结果
+------+-------+------+
| sid  | sname | cid  |
+------+-------+------+
| S001 | 张三  | C100 |
| S002 | 李四  | C200 |
+------+-------+------+
*/

分享到:
评论

相关推荐

    SQL语言与excel。VBA结和

    2.sql = "select 构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺 from [参数$B2:K" & CSMaxrow & "] where (大样代码='" & DYDH & "') and (内外框='WKXC')" **************************************...

    SSIS:从MsSql到Mysql

    1. **服务器准备**:由于原MsSql服务器与目标MySQL服务器之间无法直接通信,需要在一台能够同时访问内外网的计算机上部署SSIS。 2. **SSIS安装**:安装SQL Server中的商业智能工具包,包括SSIS。考虑到后续连接MySQL...

    2021-2022计算机二级等级考试试题及答案No.10075.docx

    6. Hub是集线器的英文缩写,它是网络连接设备,用于多台计算机的汇聚连接,实现数据传输。 7. 在Word的编辑状态下,打开文档ABC,修改后另存为ABD,则原文档ABC未被修改,仍保持原样,未被覆盖或关闭。 8. 计算机...

    xml.tar.gz_linux 网关_socket_sqlite3_xml数据库

    Linux操作系统作为网络环境中的网关,通常起到连接内外网络、转发数据包的作用。它可以作为路由器,根据IP地址和端口号来决定数据的流向。在这个场景中,Linux系统可能被配置为监听特定端口(如9005)以接收来自eko...

    imail 小型群发邮件系统 -ASP源码.zip

    这可能涉及到数据库操作,如使用ADO(ActiveX Data Objects)连接到SQL Server或其他类型的数据库,存储和检索用户信息。同时,为了防止垃圾邮件,系统可能还设置了邮件发送频率限制和黑名单机制。 此外,考虑到...

    Crystal Report报表设计培训

    3. 报表发布管理:Crystal Reports确保了报表的安全发布和高效管理,使得组织内外的信息需求得以满足,无论是在企业内部还是面向客户,都能实现信息的安全共享。 4. 应用系统集成:强大的二次开发支持使得Crystal ...

    Delphi7管理信息系统实例教程

    - **数据库连接**: 利用ADO组件或其他数据库接口实现与数据库的连接。 - **界面设计**: 利用Delphi提供的VCL组件库设计用户界面。 - **数据处理**: 实现数据的增删改查等操作。 - **安全性设计**: 包括用户权限...

    webview的使用,优化,缓存

    2. 数据存储:Webview还可以通过`localStorage`、`IndexedDB`、`WebSQL`等方式存储数据,但需要注意其可能会占用大量空间,应定期清理。 3. 离线缓存:通过Service Worker技术,可以实现离线缓存,即使在无网络连接...

    Microsoft SharePoint Server 2010 Overview Simple V3.pdf

    - **脱机访问:**即使在没有网络连接的情况下,用户也可以继续查看和编辑SharePoint中的文档和列表内容。 - **智能模板填充文档元数据:**提高了内容管理的效率和准确性。 **2. 社交网络功能** - **Outlook社交网络...

Global site tag (gtag.js) - Google Analytics