15.4 What are the different types of joins? Please explain how they differ and why certain types are better in certain situations.

Join是用来联合两个表的,每个表至少需要有一列是相同的,不同的Join类型会返回不同的结果。我们来看一个例子,有两个表,普通饮料和无卡饮料如下:

-- TABLE RegularBeverages

+-----------+-----------+
| Name | Code |
+-----------+-----------+
| Budweiser | BUDWEISER |
| Coca-Cola | COCACOLA |
| Pepsi | PEPSI |
+-----------+-----------+

-- TABLE CalorieFreeBeverages

+----------------+----------+
| Name | Code |
+----------------+----------+
| Diet Coca-Cola | COCACOLA |
| Fresca | FRESCA |
| Diet Pepsi | PEPSI |
| Pepsi Light | PEPSI |
| Purfied water | Water |
+----------------+----------+

如果我们想联合这两个表,有很多种Join可以使用:

内交Inner Join:只会显示相同列匹配的项:

SELECT * FROM RegularBeverages
INNER JOIN CalorieFreeBeverages
ON RegularBeverages.Code = CalorieFreeBeverages.Code; +-----------+----------+----------------+----------+
| Name | Code | Name | Code |
+-----------+----------+----------------+----------+
| Coca-Cola | COCACOLA | Diet Coca-Cola | COCACOLA |
| Pepsi | PEPSI | Diet Pepsi | PEPSI |
| Pepsi | PEPSI | Pepsi Light | PEPSI |
+-----------+----------+----------------+----------+

外交Outer Join:外交会包含内交的结果,同时也会包含一些没有匹配到的结果,外交有如下几种:

- 左交Left Outer Join (Left Join),会包含左表的所有结果,如果没有匹配,右边就是NULL:

SELECT * FROM RegularBeverages
LEFT JOIN CalorieFreeBeverages
ON RegularBeverages.Code = CalorieFreeBeverages.Code; +-----------+-----------+----------------+----------+
| Name | Code | Name | Code |
+-----------+-----------+----------------+----------+
| Coca-Cola | COCACOLA | Diet Coca-Cola | COCACOLA |
| Pepsi | PEPSI | Diet Pepsi | PEPSI |
| Pepsi | PEPSI | Pepsi Light | PEPSI |
| Budweiser | BUDWEISER | NULL | NULL |
+-----------+-----------+----------------+----------+

- 右交Right Outer Join (Right Join),返回右表的所有项,如果没有匹配,左边就是NULL:

SELECT * FROM RegularBeverages
RIGHT JOIN CalorieFreeBeverages
ON RegularBeverages.Code = CalorieFreeBeverages.Code; +-----------+----------+----------------+----------+
| Name | Code | Name | Code |
+-----------+----------+----------------+----------+
| Coca-Cola | COCACOLA | Diet Coca-Cola | COCACOLA |
| Pepsi | PEPSI | Diet Pepsi | PEPSI |
| Pepsi | PEPSI | Pepsi Light | PEPSI |
| NULL | NULL | Fresca | FRESCA |
| NULL | NULL | Purfied water | Water |
+-----------+----------+----------------+----------+

- 全交Full Outer Join,联合左交和右交的结果,不论有没有匹配都把结果显示出来,由于MySQL中没有这个命令,所以我们用Union把左右交的结果并起来:

SELECT * FROM RegularBeverages
LEFT JOIN CalorieFreeBeverages
ON RegularBeverages.Code = CalorieFreeBeverages.Code
UNION
SELECT * FROM RegularBeverages
RIGHT JOIN CalorieFreeBeverages
ON RegularBeverages.Code = CalorieFreeBeverages.Code; +-----------+-----------+----------------+----------+
| Name | Code | Name | Code |
+-----------+-----------+----------------+----------+
| Coca-Cola | COCACOLA | Diet Coca-Cola | COCACOLA |
| Pepsi | PEPSI | Diet Pepsi | PEPSI |
| Pepsi | PEPSI | Pepsi Light | PEPSI |
| Budweiser | BUDWEISER | NULL | NULL |
| NULL | NULL | Fresca | FRESCA |
| NULL | NULL | Purfied water | Water |
+-----------+-----------+----------------+----------+

关于此内容还可以参见我之前的一篇博客SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结

CareerCup All in One 题目汇总

[CareerCup] 15.4 Types of Join 各种交的更多相关文章

  1. [CareerCup] 15.7 Student Grade 学生成绩

    15.7 Imagine a simple database storing information for students' grades. Design what this database m ...

  2. [CareerCup] 15.5 Denormalization 逆规范化

    15.5 What is denormalization? Explain the pros and cons. 逆规范化Denormalization是一种通过添加冗余数据的数据库优化技术,可以帮助 ...

  3. [CareerCup] 15.2 Renting Apartment II 租房之二

    Write a SQL query to get a list of all buildings and the number of open requests (Requests in which ...

  4. [CareerCup] 15.1 Renting Apartment 租房

    Write a SQL query to get a list of tenants who are renting more than one apartment. -- TABLE Apartme ...

  5. [CareerCup] 15.6 Entity Relationship Diagram 实体关系图

    15.6 Draw an entity-relationship diagram for a database with companies, people, and professionals (p ...

  6. [CareerCup] 15.3 Renting Apartment III 租房之三

    Building #11 is undergoing a major renovation. Implement a query to close all requests from apartmen ...

  7. 15 Linux Split and Join Command Examples to Manage Large Files--reference

    by HIMANSHU ARORA on OCTOBER 16, 2012 http://www.thegeekstuff.com/2012/10/15-linux-split-and-join-co ...

  8. CareerCup All in One 题目汇总

    Chapter 1. Arrays and Strings 1.1 Unique Characters of a String 1.2 Reverse String 1.3 Permutation S ...

  9. SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结

    在SQL语言中,存在着各种Join,有Left Join, Right Join, Inner Join, and Natural Join等,对于初学者来说肯定一头雾水,都是神马跟神马啊,它们之间到 ...

随机推荐

  1. 人性的弱点&&影响力

    How wo win friends and influence people 人性的弱点 by 卡耐基 人际关系基本技巧 不要批评.谴责.抱怨 真诚的欣赏他人 激发他人的渴望 获得别人好感的方式 微 ...

  2. Android:dimen尺寸资源文件的使用(转)

    为了适配不同的分辨率. dimen.xml在values文件夹下面 <resources> <!-- Default screen margins, per the Android ...

  3. 数据库是.frm,.myd,myi备份如何导入mysql (转)

    今天找了个案例,琢磨了半天,才分析大概出来,数据库是.frm,.myd,myi备份,不会导入mysql,到网上找了些资料,导入成功. 首先说一下这几种文件是干什么的,*.frm是描述了表的结构,*.M ...

  4. HTML Entity Sets - All

    http://www.htmlentities.com/html/entities/ The view below displays the characters used in the offici ...

  5. 【项目经验】——JSON.parse() && JSON.stringify()

    我们在做项目的时候,都知道序列化和反序列化,师哥说:"有正就有反,有来就有回!"的确,就是这样.然后我们在这里分享一下JSON.stringify()  和JSON.parse() ...

  6. supervisor(二)event

    supervisor的event机制其实,就是一个监控/通知的框架.抛开这个机制实现的过程来说的话,event其实就是一串数据,这串数据里面有head和body两部分.咱们先弄清楚event数据结构, ...

  7. hdu2476 String painter(区间dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...

  8. 转:ExpressBars中的停靠控件使用

    http://www.cnblogs.com/jxsoft/archive/2011/08/25/2152872.html 1          新手上路 1.1      控件简介 Dock pan ...

  9. js获取一个对象的所以属性和值

    在HTML DOM中,获取某个元素对象的时候,往往记不住它的很多属性,可以通过下面的例子来查找一下: <!DOCTYPE html> <html> <body> & ...

  10. 持续集成基础-Jenkins(一)

    什么是jenkins: Jenkins是持续集成的一个系统,它是一种软件开发实践活动(经常执行集成,可能每天) 持续集成的价值: 1.减少风险 - 能够尽早的发生问题 2.减少重复过程 - 把重复的东 ...