T-SQL之JOIN关键字详解

这几天由于工作的需要,写了一个业务逻辑较复杂的存储过程,其中多次用到了JOIN、LEFT
JOIN、RIGHT
JOIN在处理表之间的逻辑的作用被渲染的淋漓尽致。说明一下,之前少处理数据库后台的经验,特别是没有好好的研究SQL的知识细节。不过也简单的学习了,自以为看明白了。就懂了。现在想来那时就是浅尝辄止。用了之后,对它的理解更深了。现在及时总结下。以备忘和日后查看。下面示例的demo代码是来自W3School。接下来直入主题。

JOIN

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 INNER JOIN Orders
4 ON Persons.Id_P = Orders.Id_P
5 ORDER BY Persons.LastName

下面是查询结果:

LEFT JOIN

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 LEFT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName

下面是查询结果:

RIGHT JOIN

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 RIGHT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName

下面是查询结果:

FULL JOIN

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 FULL JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName

下面是查询结果:

从上面的这张查询结果,我们可以看到它们几个之间的关系(我觉得W3School上面的这个例子十分经典,它顺着一条线下来,很清晰、很明了)。

1.取上面4条数据就是A [INNER]JOIN B

2.取上面的5条数据就是A LEFT JOIN B

3.取上面的4条和最后一条数据就是 A RGHT JOIN B

4.将这些数据联合起来计时A FULL JOIN B.

5.如果现在有一个需求是:取出A中的数据必须在B中存在的,就是上面例子中的RIGHT JOIN 语句后面加一个条件: WHERE
Persons.Id_P IS NOT NULL

6.如果现在有一个需求是:取出B中的数据必须在A中存在的,就是上面例子中的LEFT JOIN 语句后面加一个条件: WHERE
Orders.Id_P IS NOT NULL

呵呵,写得不好,希望各位朋友指正。我好学习进步。

T-SQL之JOIN关键字详解,布布扣,bubuko.com

时间: 2024-10-22 18:15:33

T-SQL之JOIN关键字详解的相关文章

SQL Server 一些关键字详解(二)

1.LEFT JOIN 容易让人误解的地方 背景:因为在网上搜了下 LEFT JOIN 和 OUTER APPLY 的区别,时发现,有的网友解释为: 1) A   left  join  B  的连接的记录数与A表的记录数同. 2) LEFT JOIN 左连接 -- 显示左表所有存在的记录 记录数=左表. 像这些说法都不对的.根据我测试得出的结论应该是: LEFT JOIN 返回结果数 >= 左表的记录数 网上有部分人的解释都漏了 大于(>) 的那部分,后我找了下感觉比较权威的答案: 在W3S

SQL中的JOIN语法详解

参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, right join的意义和用法. 第二个是 SQL中的left outer join,inner join,right outer join用法详解 讲了关系运算背后的数学原理,以及提到了更多类型的连接操作: inner join- 笛卡尔乘积再选取, left outer join, right out

SQL注入攻防入门详解(2)

SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文

[转]SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么

SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么

【转载】SQL注入攻防入门详解

滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长统计|  今日IP[353] | 今日PV[848] | 昨日IP[922] |  昨日PV[2188] |当前在线[10] SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但

PL/SQL程序设计基础语法详解(一)

一.什么是PL/SQL(Procedure Language/SQL) 概念:PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. PL/SQL的结构: declare 说明部分 (变量说明,光标申明,例外说明 ] begin 语句序列 (DML语句]- exception 例外处理语句 End; 简单的PL/SQL程序 如果是在命令行中需要使用 set serveroutput on先打开显示 declare

sql语句联合查询详解

sql语句联合查询详解 2011-03-01 18:58:22|  分类: mysql|举报|字号 订阅 例子: person表和user表没有约束person表: user表: 有以下几种关联 1.UNION 格式:查询语句 UNION [ALL] 查询语句 [UNION [ALL] 查询语句][…n] 说明:ALL选项表示将所有行合并到结果集合中.不指定该项时,被联合查询结果集合中的重复行将只保留一行. 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序.例

Java synchronized 关键字详解

Java synchronized 关键字详解 前置技能点 进程和线程的概念 线程创建方式 线程的状态状态转换 线程安全的概念 synchronized 关键字的几种用法 修饰非静态成员方法 synchronized public void sync(){ } 修饰静态成员方法 synchronized public static void sync(){ } 类锁代码块 synchronized (类.class){ } 对象锁代码块 synchronized (this|对象){ } syn