SQL 数据库多表连接详细讲解
- 格式:doc
- 大小:183.00 KB
- 文档页数:10
sql join语法SQL Join语法详解SQL Join语法是SQL语言中非常重要的一部分,它提供了一种联结两张或多张表格的方法,使得数据可以在多张表格之间进行共享和访问,方便了数据库的操作和管理。
本文将详细介绍SQL Join语法的各种用法和注意事项。
一、基本概念在SQL语言中,Join语法是一种实现表格联结的方法,它通过连接两个或多个表格的某些字段,将它们的数据进行合并,使得用户可以通过一个查询语句访问多个表格中的数据。
Join语法通常包含以下几个部分:1.连接的表格。
Join语法需要指定要连接的表格名称或别名。
2.连接条件。
Join语法需要指定连接的关键字段,用于将不同表格中的数据进行匹配。
3.连接类型。
Join语法支持多种不同的连接类型,包括Inner Join、Left Join、Right Join、Full Outer Join、Cross Join等。
二、Inner JoinInner Join是Join语法中最常用的一种连接方式,它可以将两个或多个表格中的数据进行匹配,并将匹配的数据合并到一个新表格中。
Inner Join的语法格式如下:SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name = table2.column_name;其中,table1和table2是要连接的两个表格,column_name(s)是要查询的列名,ON语句指定了连接条件。
Inner Join的连接过程是,首先从第一个表格中取出指定的数据列,然后根据ON语句中的连接条件,从第二个表格中取出相应的数据列,最后将两个数据列进行合并。
如果两个表格中的数据无法匹配,则不会显示在结果集中。
三、Left JoinLeft Join是Join语法中的另一种连接方式,它可以将左表格中的所有数据和右表格中匹配的数据合并到一个新表格中。
join在sql中的用法join在SQL中的用法在SQL中,join是一种常用的操作,用于将多个表中的数据连接在一起。
通过join操作,可以从多个表中检索数据并根据指定的条件将它们组合在一起。
本文将详细介绍join的用法,包括不同类型的join操作以及它们的应用场景。
一、什么是join操作在数据库中,数据通常存储在多个表中,这些表之间通过关系进行连接。
而join操作就是通过某种条件连接多个表,并返回满足条件的数据。
join 操作可以根据连接条件的不同分为多种类型,如内连接、外连接和交叉连接等。
二、内连接内连接是最常用的join操作之一。
当执行内连接时,只有满足连接条件(即两个表中对应列的值相等)的行才会被返回。
内连接可以使用关键字INNER JOIN或简单地使用JOIN来实现。
下面是一个示例,假设我们有两个表- "顾客"表和"订单"表:表:顾客顾客ID 姓名地址1 张三北京市2 李四上海市3 王五广州市表:订单订单ID 顾客ID 订单日期1 1 2022-01-012 2 2022-01-023 1 2022-01-03我们可以使用以下SQL语句来执行内连接操作:SELECT *FROM 顾客INNER JOIN 订单ON 顾客.顾客ID = 订单.顾客ID;将上述SQL语句执行后,将返回一个新的表,包含了"顾客"表和"订单"表中符合连接条件的行。
结果如下:顾客ID 姓名地址订单ID 顾客ID 订单日期1 张三北京市 1 1 2022-01-011 张三北京市 3 1 2022-01-032 李四上海市 2 2 2022-01-02三、外连接外连接也是一种常用的join操作。
与内连接不同的是,外连接会返回连接表中的所有行,即使没有满足连接条件的行。
外连接可以分为左外连接、右外连接和全外连接等几种类型。
1.左外连接左外连接即包含左表中的所有行,以及右表中与左表连接条件匹配的行。
SQL Server是一种关系型数据库管理系统,用于管理和处理大规模数据。
在实际应用中,经常需要进行多表查询,而左连接是一种常用的查询方式。
本文将详细介绍SQL Server中多表查询和左连接的写法,希望能够对读者有所帮助。
一、多表查询的概念多表查询是指在一个SQL语句中涉及多个表的查询操作。
在实际应用中,多表查询是非常常见的,因为不同的数据可能存储在不同的表中,需要通过多表查询来获取所需的数据。
在SQL Server中,多表查询可以通过JOIN操作来实现,包括内连接、外连接等不同的方式。
二、左连接的概念左连接是一种外连接的类型,它返回包括左表中的所有记录以及右表中匹配的记录。
如果右表中没有匹配的记录,则返回NULL。
在SQL Server中,左连接可以通过LEFT JOIN关键字来实现。
左连接通常用于获取左表中的所有记录,以及与之相关联的右表中的记录,即使右表中没有匹配的记录。
三、SQL Server中多表查询的实现在SQL Server中,可以使用多种方式来实现多表查询,包括使用子查询、使用关联子查询、使用子查询和JOIN等。
下面将依次介绍这些方法的具体实现方式。
1. 使用子查询使用子查询是最简单的多表查询方式之一。
可以将一个查询的结果作为另一个查询的条件,从而实现多表查询的目的。
例如:```SELECT *FROM Table1WHERE Field1 IN (SELECT Field2 FROM Table2)```2. 使用关联子查询关联子查询是指在子查询中使用外部表的字段来进行条件过滤,从而实现多表查询的目的。
例如:```SELECT *FROM Table1WHERE EXISTS (SELECT * FROM Table2 WHERE Table1.Field1 = Table2.Field2)```3. 使用子查询和JOIN在实际应用中,可以将子查询和JOIN操作结合起来,以实现更复杂的多表查询需求。
sql多表联查语句SQL多表联查语句用于从多个表中检索相关数据。
通过使用JOIN 关键字,我们可以将多个表连接在一起,并通过共享的列或条件关联它们。
下面是一些常见的多表联查语句及其使用方法:1. 内连接(INNER JOIN):内连接返回两个表中匹配的行。
只有当两个表之间的连接条件满足时,才会返回结果。
```sqlSELECT column1, column2, ...FROM table1INNER JOIN table2ON table1.column = table2.column;```2. 左连接(LEFT JOIN):左连接返回左表中的所有行,以及与右表中匹配的行。
如果右表中没有匹配的行,则会返回NULL值。
SELECT column1, column2, ...FROM table1LEFT JOIN table2ON table1.column = table2.column;```3. 右连接(RIGHT JOIN):右连接返回右表中的所有行,以及与左表中匹配的行。
如果左表中没有匹配的行,则会返回NULL值。
```sqlSELECT column1, column2, ...FROM table1RIGHT JOIN table2ON table1.column = table2.column;```4. 全连接(FULL OUTER JOIN):全连接返回左右表中的所有行,如果在左表或右表中没有匹配的行,则会返回NULL值。
SELECT column1, column2, ...FROM table1FULL OUTER JOIN table2ON table1.column = table2.column;```5. 自连接(SELF JOIN):自连接是一种特殊的联接,它将表视为两个独立的实体,并通过共享的列将它们连接起来。
```sqlSELECT column1, column2, ...FROM table1JOIN table1 AS table2ON table1.column = table2.column;```除了以上提到的联接类型,还可以使用其他联接类型,如交叉连接(CROSS JOIN)、自然连接(NATURAL JOIN)等,根据具体需求选择适合的联接类型。
mysql多表联合查询sql语句当我们需要从多个表中检索数据时,可以使用MySQL的多表联合查询语句。
多表联合查询可以通过使用JOIN子句将多个表连接起来,从而实现在一个查询中检索来自不同表的数据。
以下是一些常见的多表联合查询的SQL语句示例:1. 内连接(INNER JOIN):sql.SELECT.FROM table1。
INNER JOIN table2 ON table1.column_name =table2.column_name;2. 左外连接(LEFT JOIN):sql.SELECT.FROM table1。
LEFT JOIN table2 ON table1.column_name =table2.column_name;3. 右外连接(RIGHT JOIN):sql.SELECT.FROM table1。
RIGHT JOIN table2 ON table1.column_name =table2.column_name;4. 全外连接(FULL JOIN),MySQL不支持全外连接,但可以通过UNION操作符来模拟全外连接的效果。
5. 自连接(Self Join):sql.SELECT e1.employee_id, e1.employee_name,e2.employee_name AS manager.FROM employee e1。
LEFT JOIN employee e2 ON e1.manager_id = e2.employee_id;这些是一些常见的多表联合查询的SQL语句示例,通过这些语句可以实现从多个表中检索数据的目的。
在实际应用中,我们可以根据具体的业务需求和数据关系来选择合适的联合查询方式,以实现我们想要的数据检索和分析。
三张表关联查询sql语句
在数据库中,经常需要利用多张表的数据进行关联查询。
以下是三张表关联查询的SQL语句示例。
假设有三张表:学生表(student)、课程表(course)和成绩表(score)。
学生表中包含学生的基本信息,课程表中包含所有的课程,成绩表中包含学生在某个课程中的成绩。
首先,需要通过学生表和成绩表进行关联查询,以获取学生的成绩信息。
查询语句如下:
SELECT , score.course_id, score.score
FROM student
INNER JOIN score ON student.id = score.student_id;
上述语句使用了INNER JOIN语句来关联学生表和成绩表,通过学生表和成绩表之间的id和student_id进行匹配。
这样就能获取每个学生在每门课程中的成绩。
接下来,需要将上述查询结果和课程表进行关联,以获取每门课程的名称。
查询语句如下:
SELECT , , score.score
FROM student
INNER JOIN score ON student.id = score.student_id
INNER JOIN course ON score.course_id = course.id;
上述语句使用了两个INNER JOIN语句来关联学生表、成绩表和课程表。
通过score表中的course_id和course表中的id进行匹配,
得到每门课程的名称。
综合上述两个查询语句,就能获取每个学生在每门课程中的成绩和课程名称。
sqlserver中join用法SQL Server中的JOIN是一种用于在多个表之间建立关联、连接数据的方法。
它允许我们从一个表中获取数据,并与另一个或多个表中的数据进行比较和操作。
JOIN可用于执行多个操作,例如联结两个或多个表、过滤数据、组合数据以及计算聚合函数等。
在本篇文章中,我将详细介绍SQL Server中JOIN的使用方法,并逐步回答有关该主题的问题。
第一步:了解JOIN的类型在开始讨论JOIN的使用方法之前,我们需要先了解SQL Server中几种不同类型的JOIN。
主要的JOIN类型有以下几种:1. 内连接(INNER JOIN):返回两个表中匹配的行。
只有在两个表中都存在匹配的行时,才会返回结果。
2. 左连接(LEFT JOIN):返回左表中的所有行以及与右表中匹配的行。
如果没有匹配的行,右表部分将包含NULL值。
3. 右连接(RIGHT JOIN):返回右表中的所有行以及与左表中匹配的行。
如果没有匹配的行,左表部分将包含NULL值。
4. 全连接(FULL JOIN):返回左表和右表中的所有行,如果没有匹配的行,则对应的另一个表部分将包含NULL值。
第二步:理解JOIN的语法在SQL Server中,JOIN的语法如下所示:SELECT 列名FROM 表名1[JOIN 类型] 表名2ON 表名1.列名= 表名2.列名在这个语法中,表名1和表名2代表要进行JOIN的表,可以使用别名来简化语句。
JOIN类型是可选的,如果不指定JOIN类型,默认为内连接。
ON子句用于指定连接条件,即两个表之间的关系。
第三步:使用JOIN进行数据联接现在我们来看一些具体的例子,演示如何使用JOIN来联接数据。
1. 内连接(INNER JOIN)内连接返回满足连接条件的行,丢弃没有匹配的行。
下面是内连接的语法:SELECT 列名FROM 表名1INNER JOIN 表名2ON 表名1.列= 表名2.列例如,我们有两张表:员工表(Employees)和部门表(Departments),它们共享一个列名:部门ID(DepartmentID)。
sql多表关联查询语句sql表关联查询是数据库管理系统中最常见也是最重要的操作,它能够在多个表中同时执行查询,让我们快速获取所需要的数据。
本文将介绍sql的多表关联查询,包括全部连接、部分连接和内连接。
1、全部连接全部连接是最常见的多表关联查询操作,它可以将查询的多个表的数据进行组合,从而获取所需要的信息。
全连接的语法格式如下: SELECT名称FROM1,2WHERE件使用全连接查询的例子如下:SELECT , s.scoreFROM student s, product pWHERE = ;上面的例子是将学生信息表和考试成绩表进行关联查询,获取学生姓名和考试成绩的结果。
2、部分连接部分连接也是一种多表连接查询,但与全连接不同,部分连接不是将所有数据进行组合,只显示部分数据。
使用部分连接的语法格式如下:SELECT名称FROM1 LEFT JOIN2ON件部分连接的例子如下:SELECT , p.priceFROM student sLEFT JOIN product pON = ;上面的例子是将学生表和产品表进行部分连接,查询学生的姓名和产品的价格。
3、内连接内连接是一种特殊的多表关联查询,它返回的数据是两张表的交集,也就是所谓的“内连接”。
使用内连接时,需要在查询语句中指定查找内容,这样就可以确保查询返回的数据是可靠的。
内连接查询的语法格式如下:SELECT名称FROM1 INNER JOIN2ON件使用内连接查询的例子如下:SELECT , p.priceFROM student sINNER JOIN product pON = ;上面的例子是将学生表和产品表进行内连接,查询学生的姓名和产品的价格。
以上就是sql多表关联查询的语句,其中包括全部连接、部分连接和内连接。
sql多表关联查询是数据库管理系统中最重要的操作,允许用户在多个表中进行查询,这能够极大地提高用户的工作效率。
要使用多表关联查询,用户必须掌握其语句的语法,熟悉的使用其他的查询语句,才能获得最终想要的结果。
sql连表查询语法SQL连表查询语法一、概述在数据库中,有时需要从多个表中获取数据,这时就需要用到SQL连表查询语法。
SQL连表查询语法是用来连接两个或多个表的语句,以便在一个查询中检索数据。
本文将详细介绍SQL连表查询的语法和使用方法。
二、基本语法SQL连表查询有两种方式:内连接和外连接。
内连接只返回两个表中匹配的行,而外连接则返回所有行,即使没有匹配的行也会返回NULL 值。
1. 内连接内连接使用JOIN或INNER JOIN关键字来实现。
其基本语法为:SELECT column_name(s)FROM table1JOIN table2ON table1.column_name = table2.column_name;其中,column_name是要检索的列名,table1和table2是要联接的两个表名。
ON子句指定了两个表之间的关系。
2. 外连接外连接分为左外连接、右外连接和全外连接。
左外连接返回左边表中所有行以及右边表中匹配的行;右外连接则返回右边表中所有行以及左边表中匹配的行;全外连接则返回所有行。
左外连接使用LEFT JOIN或LEFT OUTER JOIN关键字实现;右外连接使用RIGHT JOIN或RIGHT OUTER JOIN关键字实现;全外连接使用FULL OUTER JOIN或FULL JOIN关键字实现。
其基本语法为:SELECT column_name(s)FROM table1LEFT JOIN table2ON table1.column_name = table2.column_name;其中,column_name是要检索的列名,table1和table2是要联接的两个表名。
ON子句指定了两个表之间的关系。
三、实例讲解现在有两个表,一个是学生表(students),包含学生的姓名、性别和年龄;另一个是成绩表(scores),包含学生的姓名和数学成绩。
我们需要查询所有学生的姓名、性别、年龄和数学成绩。
sql多表联合查询语法SQL多表联合查询语法SQL是一种用于访问和处理关系型数据库的语言。
在实际应用中,我们通常需要从多个表中获取数据,这时就需要使用多表联合查询。
本文将介绍SQL多表联合查询的语法及其使用方法。
一、基础知识在进行多表联合查询之前,我们需要了解以下几个概念:1. 表:数据库中存储数据的基本单位。
2. 字段:表中存储数据的列,也称为属性。
3. 主键:唯一标识一条记录的字段。
4. 外键:与其他表关联的字段。
5. 联合查询:从多个表中获取数据的操作。
二、语法格式SQL多表联合查询的基本语法格式如下:SELECT column_name(s)FROM table1JOIN table2ON table1.column_name = table2.column_name;其中,SELECT指定要返回的列名;FROM指定要查询的第一个表;JOIN指定要连接的第二个表;ON指定连接两个表所使用的条件。
在实际应用中,我们还可以使用LEFT JOIN(左连接)、RIGHT JOIN (右连接)和FULL OUTER JOIN(全外连接)等不同类型的连接方式来满足不同需求。
三、实例演示为了更好地理解SQL多表联合查询,我们将通过一个实例来演示其具体使用方法。
假设我们有两个表student和score,其中student表存储学生信息,score表存储学生成绩信息。
我们需要从这两个表中获取学生姓名和对应的总成绩。
具体操作如下:1. 创建表格在实际操作中,我们需要先创建这两个表格并插入一些数据:CREATE TABLE student (id INT PRIMARY KEY,name VARCHAR(20) NOT NULL,age INT NOT NULL,gender VARCHAR(10) NOT NULL);INSERT INTO student (id, name, age, gender) VALUES (1, '张三', 18, '男'),(2, '李四', 19, '女'),(3, '王五', 20, '男');CREATE TABLE score (id INT PRIMARY KEY,student_id INT NOT NULL,course_name VARCHAR(20) NOT NULL,score INT NOT NULL);INSERT INTO score (id, student_id, course_name, score)VALUES (1, 1, '语文', 90),(2, 1, '数学', 85),(3, 2, '语文', 95),(4, 2, '数学', 80),(5, 3, '语文', 85),(6, 3,'数学',90);2. 查询数据接下来,我们可以使用以下SQL语句从student和score两个表中获取所需数据:SELECT AS 学生姓名,SUM(sc.score) AS 总成绩FROM student sJOIN score sc ON s.id = sc.student_idGROUP BY ;其中,AS用于为返回的列名设置别名,GROUP BY用于按学生姓名分组并计算总成绩。
SQL多表连接
应用背景
数据库是由多张表组成的存储结构,并通过多张表之间的关系建立起完整的有效的数据存储形式,形成关系型数据库。
作为数据查询语言SQL,提供了功能强大的数据表连接查询功能,使多张表格之间形成有效的数据联系,使得关系数据库在大型数据库应用中占据了主角地位。
一个普通的大型数据库应用程序所使用的数据库中,有多达几百张表的数据,那么如何将这些表高效的有机的联系起来,就成为设计关系数据库的一个重要指标。
优良的数据库设计指标包括:
1.减少数据冗余,去除掉多余的数据冗余,可以通过建立表之间的连接关系完成。
2.数据更新正确,不能因为表之间存在关系后,使得更新记录出现不正常的数据。
3.添加数据正常,添加数据过程中,应该保持数据表之间的关系,确定表之间的连接。
4.查询简便灵活,在建立数据连接的查询过程中,连接清晰简便,操作灵活准确。
数据库设计是应用软件成功与否的一项重要标志。
设计数据库,除与
系统分析结果,设计员的水平等有关外,还可以参考一些规范的设计范式,下面简单介绍数据库的2个基本设计范式:
1.第一范式:要求表的每列都是不可再分的简单数据项,所以1对N关系就必须用多表表示,而不能用一张表表示。
2.第二范式:表中的每一个非主键列必须完全函数依赖于主键,就是说表中除主键之外的其他列,都必须通过主键能够唯一确定。
数据库的设计非常复杂,没有一成不变的东西,需要就地取材,解决问题,简单化问题。
知识要点
(1) 传统连接
连接就是将多个表中的数据连接到一起的查询,即连接操作可以在一个Select语句中完成从多个表中查找和处理数据,使用连接时可以使用名字相同的不同表的列,也可以不同,但要求连接的列不需可连接,即数据类型相同。
传统的连接语法如下:
Select * from Tblname1 T1,Tblname2 T2 where T1.column=T2.column
连接SQL语句的明显标志为在From子句后边,有多个表Tblname1, Tblname2 ,Where子句后有表连接键T1.column=T2.column。
例1:以销售单据为例,察看每个销售单据的真实客户姓名,单据号,单据金额,销售代表等信息。
Select 语句如下:
SELECT T1.rid, T1.cid, ame, T1.rmoney, T1.remployee
FROM retail T1 , customer T2 where T1.cid = T2.cid
查询结果如下:
例2:以销售明细为例,查询每个销售明细记录的真实产品名称,产品的零售单价,实际销售单价,销售金额等等信息,Select语句如下:SELECT T1.rid, T1.pcode, T2.pname, T2.ptype, T2.pprice, T1.dprice,T1.dmoney
FROM Detail T1 ,product T2 where T1.pcode = T2.pcode
查询结果如下:
例3:多表连接,建立查询销售单据与销售明细连接,销售明细中的产品代码与产品信息中的代码连接,销售单据的客户代码与客户信息的客户代码连接,构成4张表的多表连接,Select 语句如下:
select T1.rid,T1.cid,ame,T2.pcode,T4.pname,T2.dprice, T2.dnumber,T2.dmoney
from retail T1,detail T2,customer T3,product T4
where T1.rid=T2.rid and T1.cid=T3.cid and T2.pcode=T4.pcode 查询结果如下:
(2) 内连接Inner Join
前面的多表连接写法,把表连接条件写在Where子句之后,导致表连接之间与记录筛选条件混合,使查询语句不清晰,故新的表连接条件采用关键字Join表示,连接又分为内连接,左连接,右连接,全连接。
标准内连接写法为:
Select [Distinct] select_list from Tblname1 [T1] Inner join Tblname2 T2 On T1.colomn=T2.colomn [where condition] [Group By] [Order By ]
关键字Inner Join 前后为需要连接的表名,关键字On 后边是连接条件,在执行完连接条件后,才进行记录的筛选语句Where 子句,这样更符合结构化的查询语法。
例1:以销售单据为例,察看每个销售单据的真实客户姓名,单据号,单据金额,销售代表等信息,且要求客户姓名中包含“李”,那么修改后的Select 语句如下:
SELECT T1.rid, T1.cid, ame, T1.rmoney, T1.remployee
FROM retail T1 INNER JOIN
customer T2 ON T1.cid = T2.cid
WHERE (ame LIKE '%李%')
ORDER BY T1.rid
查询结果如下:
例2:多表连接,建立查询销售单据与销售明细连接,销售明细中的产品代码与产品信息中的代码连接,销售单据的客户代码与客户信息的客户代码连接,构成4张表的多表连接,要求客户名称包含“张”,产品名称包含“Nokia”,Select 语句如下:
SELECT T1.rid, T1.cid, ame, T2.pcode, T4.pname, T2.dprice, T2.dnumber,
T2.dmoney
FROM retail T1 INNER JOIN
detail T2 ON T1.rid = T2.rid INNER JOIN
customer T3 ON T1.cid = T3.cid INNER JOIN
product T4 ON T2.pcode = T4.pcode
WHERE (T4.pname LIKE '%nokia%') AND (ame LIKE '%张%')
查询结果如下:
(3) 左连接
内连接一般把所有符合条件的记录都显示出来,而不符合连接条件的记录过滤掉。
但有时候可能期望显示某个表中的所有记录,包括不符合条件的记录,那么就需要使用外连接。
使用外连接可以方便地将连接结果中包含某个表中的所有记录。
外连接,包括左连接,右连接,全连接。
左连接Left Outer Join 关键字左侧的表包含所有记录,右侧的表则只包含部分符合连接条件的记录。
语法如下:
Select [Distinct] select_list from Tblname1 [T1] Left Outer join
Tblname2 T2 On T1.colomn=T2.colomn [where condition] [Group By] [Order By ]
左连接语句将列出所有Tblname1中的所有记录,而Tblname2的记录则只显示符合连接条件的记录。
例1:列出所有客户信息,并把相关客户的销售单据信息列出。
Select 语句如下:
SELECT T1.cid, ame, T2.cdate AS Expr1, T2.rmoney AS Expr2
FROM customer T1 LEFT OUTER JOIN
retail T2 ON T1.cid = T2.cid
查询结果如下:
例2:列出所有产品信息,并将相关产品信息的销售数量合计,销售金额合计列出,Select语句如下:
SELECT T1.pcode, SUM(T2.dnumber) AS Expr1, SUM(T2.dmoney) AS Expr2
FROM product T1 LEFT OUTER JOIN
detail T2 ON T1.pcode = T2.pcode
GROUP BY T1.pcode
上述Select语句没有列出产品名称,是因为在分组列表中没有列出产品名称,查询结果如下:
(4) 右连接
右连接与左连接正好相反,右连接Right Outer Join 关键字右侧的表包含所有记录,左侧的表则只包含部分符合连接条件的记录。
语法如下:Select [Distinct] select_list from Tblname1 [T1] Right Outer join Tblname2 T2 On T1.colomn=T2.colomn [where condition] [Group By] [Order By ]
右连接语句将列出所有Tblname2中的所有记录,而Tblname1的记录则只显示符合连接条件的记录。
例1:列出所有销售单据,并将每个单据的客户名称列出,Select语句如下:
SELECT T2.*, ame AS Expr1
FROM customer T1 RIGHT OUTER JOIN
retail T2 ON T1.cid = T2.cid
查询结果如下:。