SQL基本SELECT查询语句_内外连接
- 格式:ppt
- 大小:4.79 MB
- 文档页数:76
sql内连接查询语法及示例
内连接是SQL中最常用的连接类型之一,它用于根据两个表之间的共同值来检索数据。
内连接只返回两个表中共同匹配的行。
以下是内连接查询的语法及示例:
语法:
sql.
SELECT 列名。
FROM 表名1。
INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名;
示例:
假设我们有两个表,一个是"学生"表,包含学生的ID和姓名,另一个是"课程"表,包含课程的ID和名称。
我们想要查询学生所选的课程,可以使用内连接。
sql.
SELECT 学生.姓名, 课程.名称。
FROM 学生。
INNER JOIN 选课 ON 学生.ID = 选课.学生ID.
INNER JOIN 课程 ON 选课.课程ID = 课程.ID;
在这个示例中,我们首先选择了"学生"表和"课程"表,然后使用INNER JOIN关键字将它们连接起来。
在ON子句中,我们指定了连接条件,即学生的ID等于选课表中的学生ID,以及选课表中的课程ID等于课程表中的ID。
最后,我们选择了要检索的列,即学生的姓名和所选课程的名称。
这样,我们就可以通过内连接查询得到学生和他们所选课程的信息。
内连接是SQL中非常重要和常用的查询方式,能够帮助我们从多个表中获取相关联的数据。
SQL 左外连接,右外连接,全连接,内连接连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。
WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。
连接可分为以下几类:内连接。
(典型的连接运算,使用像= 或<> 之类的比较运算符)。
包括相等连接和自然连接。
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
例如,检索students 和courses 表中学生标识号相同的所有行。
外连接。
外连接可以是左向外连接、右向外连接或完整外部连接。
在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。
将返回右表的所有行。
如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。
当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。
如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接。
交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。
交叉连接也称作笛卡尔积。
例如,下面的内连接检索与某个出版商居住在相同州和城市的作者:USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors AS a INNER JOIN publishers AS pON a.city = p.cityAND a.state = p.stateORDER BY a.au_lname ASC, a.au_fname ASCFROM 子句中的表或视图可通过内连接或完整外部连接按任意顺序指定;但是,用左或右向外连接指定表或视图时,表或视图的顺序很重要。
SQL:左连接,右连接,全连接Left join , Right Join, Inner Join 用法(生成新的数据表)即是多表连接,组成一个新的数据表输出!仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。
内联接消除与另一个表中的任何行不匹配的行。
例子Table Aaid adate1 a12 a23 a3TableBbid bdate1 b12 b24 b4两个表a,b相连接,要取出id相同的字段select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.此时的取出的是:1 a1 b12 a2 b2那么left join 指:select * from a left join b on a.aid = b.bid首先取出a表中所有数据,然后再加上与a,b匹配的的数据此时的取出的是:1 a1 b12 a2 b23 a3 空字符同样的也有right join指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据此时的取出的是:1 a1 b12 a2 b24 空字符b4LEFT JOIN 或LEFT OUTER JOIN。
左向外联接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
SQL:JOIN之完全用法外联接可以是左向外联接、右向外联接或完整外部联接。
在FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或LEFT OUTER JOIN。
左向外联接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或RIGHT OUTER JOIN。
深⼊理解SQL的四种连接-左外连接、右外连接、内连接、全连接(典型的联接运算,使⽤像 = 或 <> 之类的⽐较运算符)。
包括相等联接和⾃然联接。
内联接使⽤⽐较运算符根据每个表共有的列的值匹配两个表中的⾏。
例如,检索 students和courses表中学⽣标识号相同的所有⾏。
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM⼦句中指定外联接时,可以由下列⼏组关键字中的⼀组指定:1)LEFT JOIN或LEFT OUTER JOIN左向外联接的结果集包括 LEFT OUTER⼦句中指定的左表的所有⾏,⽽不仅仅是联接列所匹配的⾏。
如果左表的某⾏在右表中没有匹配⾏,则在相关联的结果集⾏中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN右向外联接是左向外联接的反向联接。
将返回右表的所有⾏。
如果右表的某⾏在左表中没有匹配⾏,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN完整外部联接返回左表和右表中的所有⾏。
当某⾏在另⼀个表中没有匹配⾏时,则另⼀个表的选择列表列包含空值。
如果表之间有匹配⾏,则整个结果集⾏包含基表的数据值。
交叉联接返回左表中的所有⾏,左表中的每⼀⾏与右表中的所有⾏组合。
交叉联接也称作笛卡尔积。
FROM ⼦句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,⽤左或右向外联接指定表或视图时,表或视图的顺序很重要。
有关使⽤左或右向外联接排列表的更多信息,请参见使⽤外联接。
-------------------------------------------------a表 id name b表 id job parent_id1 张3 1 23 12 李四 2 34 23 王武 3 34 4a.id同parent_id 存在关系--------------------------------------------------1)内连接select a.*,b.* from a inner join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 22)左连接select a.*,b.* from a left join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 23 王武 null3)右连接select a.*,b.* from a right join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 44)完全连接select a.*,b.* from a full join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 43 王武 null--------------------------------------------------------------------------------------------交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON⼦句,返回的是两表的乘积,也叫笛卡尔积。
SQL的内连接与外连接有两个表A和表B。
表A结构如下:Aid:int;标识种子,主键,自增IDAname:varchar数据情况,即用select * from A出来的记录情况如下图1所示:表B结构如下:Bid:int;标识种子,主键,自增IDBnameid:int数据情况,即用select * from B出来的记录情况如下图2所示:图2:B表数据为了把Bid和Aid加以区分,不让大家有误解,所以把Bid 的起始种子设置为100。
有SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B 表中的Bnameid就是两个连接字段。
下图3说明了连接的所有记录集之间的关系:图3:连接关系图现在我们对内连接和外连接一一讲解。
1.内连接:利用内连接可获取两表的公共部分的记录,即图3的记录集C语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid 运行结果如下图4所示:其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
2.外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)(1)左连接(Left JOIN):即图3公共部分记录集C+表A 记录集A1。
语句如下:select * from A Left JOIN B ONA.Aid=B.Bnameid运行结果如下图5所示:说明:在语句中,A在B的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=图3公共部分记录集C+表A记录集A1在图3中即记录集C中的存在的Aid为:2 3 6 7 8图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9表A记录集A1中存在的Aid=(图1中即A表中所有Aid)-(图3中即记录集C中存在的Aid),最终得出为:1 4 5 9 由此得出图5中A左连接B的记录=图3公共部分记录集C +表A记录集A1,最终得出的结果图5中可以看出Bnameid及Bid非NULL 的记录都为图3公共部分记录集C中的记录;Bnameid及Bid 为NULL的Aid为1 4 5 9的四笔记录就是表A记录集A1中存在的Aid。
SQL查询- 表连接连接查询中用来连接连个表的条件称为连接条件或连接谓词。
其形式为:[<表1>].<列名1><连接运算符>[<表2>].<列2>常见的连接运算符包括1、比较运算符:=、>、<、>=、<=、!=、between和and。
2、逻辑运算符:not、and、or。
3、使用between和and连接查询形式为[<表1>].<列名1><between>[<表2>].<列名2>and[<表2>].<列名3>。
1、内连接:表中的行互相连接。
结果集的行数等于每个表满足条件的行数的乘积,参与连接的表是平等的。
2、外连接:参与连接的表有主次之分,主表的每一行数据去匹配从表的数据列,符合连接条件的数据将直接返回到结果集中,不符合连接条件的数据列将以null填充后返回到结果集中,其中外连接又分左外连接、右外连接和全连接3种。
(一)、等值连接查询select p.*,c.*from country as c,person as p where c.countryid = p.countryid 等上面的等值连接中,两张表都有countryid字段,因此查出来的结果中就会有两列countryid(二)、在等值结果中消除数据就是自然连接select ,c.countryname from country as c,person as p where c.countryid = p.countryid(三)、自身连接一个数据表自己与自己建立连接称为自身连接1、内连接查询的语法结构如下:select<属性或表达式列表>from<表名>[inner]join<表名>on<连接条件>[ where <限定条件> ]inner可以省略,当只见到join时就是省略了inner。
MySQL中的内连接和外连接一. 介绍在MySQL中,连接是一种用于合并两个或多个表之间的关联数据的操作。
连接通常用于在数据库中查询数据时,将多个表中符合指定条件的数据关联在一起。
MySQL提供了两种常见的连接方式,即内连接和外连接。
本文将对MySQL中的内连接和外连接进行详细介绍和分析。
二. 内连接内连接是连接操作中最常用的一种形式。
内连接的目的是筛选出满足两个表中指定条件的数据。
它只返回两个表中满足连接条件的行。
内连接的语法如下:```sqlSELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;```其中,`表1`和`表2`是要连接的两个表,`列名`是要返回的列。
`INNER JOIN`关键字用于指定连接的类型,而`ON`后面的条件则用于指定连接的条件。
内连接可以通过多个条件进行连接,例如:```sqlSELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名1 = 表2.列名1 AND 表1.列名2 = 表2.列名2;```这将返回`表1`和`表2`中同时满足`表1.列名1 = 表2.列名1`和`表1.列名2 = 表2.列名2`的行。
内连接可以用于连接任意多个表,例如:```sqlSELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名 INNER JOIN 表3 ON 表2.列名 = 表3.列名;```这将返回满足`表1.列名 = 表2.列名`且满足`表2.列名 = 表3.列名`的行。
内连接的特点是只返回满足连接条件的行,不包括不满足条件的数据。
也就是说,只有两个表中都存在满足条件的数据时,才会将这些数据连接在一起返回。
三. 外连接外连接是连接操作中的另一种形式。
外连接用于返回连接条件中满足条件的所有行,同时对于不满足条件的行,一般用NULL值进行填充。
外连接有左外连接、右外连接和全外连接三种类型。
深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接1、内联接(典型的联接运算,使用像=或<> 之类的比较运算符)。
包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
例如,检索students和courses表中学生标识号相同的所有行。
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。
在FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:1)LEFT JOIN 或LEFT OUTER JOIN左向外联接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或RIGHT OUTER JOIN右向外联接是左向外联接的反向联接。
将返回右表的所有行。
如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3) FULL JOIN 或FULL OUTER JOIN完整外部联接返回左表和右表中的所有行。
当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。
如果表之间有匹配行,则整个结果集行包含基表的数据值。
3、交叉联接交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。
交叉联接也称作笛卡尔积。
FROM子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。
有关使用左或右向外联接排列表的更多信息,请参见使用外联接。
例子:a 表id nameb 表id job parent_id1 张3 1 23 12 李四 2 34 23 王武 3 34 4a.id同parent_id 存在关系1)内连接select a.*,b.* from a inner join b on a.id=b.p arent_id结果是1 张3 1 23 12 李四 2 34 22)左连接select a.*,b.* from a left join b on ent_id结果是1 张3 1 23 12李四2 34 23王武null3)右连接select a.*,b.* from a right join b on arent_id 结果是1张3 1 23 12李四 2 34 2null 3 34 4 a.id=b.par a.id=b.pent_id结果是1张3 2李四 null 3王武 一、交叉连接(CROSS JOIN )交叉连接(CROSS JOIN ):有两种,显式的和隐式的,不带ON 子句,返回的是两表的乘积,也叫笛卡尔积。
一、内连接概念:内连接就使用比较运算符根据每个表共有的列的值匹配两个表中的行。
内连接(join 或者inner join )SQL语法:select * fron table1 join table2 on table1.条件列名 = table2.条件列名;返回符合匹配条件的两表列二、外连接外连接分为左外连接(left join 或left outer join)、右外连接(right join 或者right outer join)、和完全外连接(full join 或者 full outer join)。
1.左外连接(left join 或 left outer join)的结果就left join子句中的左表的所有行,而不仅仅列所匹配的行,如果左表中的某行在右表中没有匹配,则在相关联的结果行中右表的所有选择列均为空值(NULL)。
SQL语法select * from table1 left join table2 on table1.条件列名 = table2.条件列名;注释:显示的就table1中的所有行和table2中能匹配的行。
2.右外连接(right join 或 right outer join )跟左外连接相反。
SQL语法select * from table1 right join table2 on table1. 条件列= table2.条件列;3.完全外部连接(full join 或 full outer join)的结果就显示左右表中的所有行,当某一个表中没有匹配的行时,则另一个表的选择列均以空值(NULL)显示,如果有则显示全部数据。
SQL语法:select * from table1 full join table2 on table1.条件列名= table2.条件列名;三、自连接概念:一个表与自身进行连接,称为自连接。
例如:select * from table t1,table t2 where t1.条件列名=t2.条件列名;四、UNION运算符UNION将产生的两个或多个记录集(字段要一样)并在,成为一个新的记录集。
mysql sql语句连接查询总结在MySQL中,你可以使用多种方式进行连接查询。
以下是MySQL支持的连接查询方法的总结:1. 内连接(INNER JOIN):返回两个表中存在匹配的行。
如果某行在连接的两个表中没有匹配的行,则结果集中不会包含该行。
使用 `JOIN` 关键字或 `ON` 关键字。
```sqlSELECT FROM table1 INNER JOIN table2 ON _name = _name;```2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN):返回左表中的所有行,以及右表中匹配的行。
如果右表中没有匹配的行,结果集中将返回NULL值。
```sqlSELECT FROM table1 LEFT JOIN table2 ON _name = _name;```3. 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN):返回右表中的所有行,以及左表中匹配的行。
如果左表中没有匹配的行,结果集中将返回NULL值。
```sqlSELECT FROM table1 RIGHT JOIN table2 ON _name = _name;```4. 全外连接(FULL JOIN 或 FULL OUTER JOIN):返回左表和右表中的所有行。
如果某一边没有匹配的行,结果集中将返回NULL值。
MySQL不直接支持全外连接,但可以通过组合左连接和右连接来实现。
```sqlSELECT FROM table1 LEFT JOIN table2 ON _name = _name UNION ALLSELECT FROM table1 RIGHT JOIN table2 ON _name = _name;```5. 交叉连接(CROSS JOIN):返回两个表的笛卡尔积。
结果集中的行数等于左表中的行数乘以右表中的行数。
```sqlSELECT FROM table1 CROSS JOIN table2;```6. 自连接(Self-Join):一个表与其自身进行连接。
深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接本篇文章是对SQL中的四种连接-左外连接、右外连接、内连接、全连接进行了详细的分析介绍,需要的朋友参考下1、内联接(典型的联接运算,使用像= 或<> 之类的比较运算符)。
包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
例如,检索students 和courses表中学生标识号相同的所有行。
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。
在FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:1)LEFT JOIN或LEFT OUTER JOIN左向外联接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或RIGHT OUTER JOIN右向外联接是左向外联接的反向联接。
将返回右表的所有行。
如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或FULL OUTER JOIN完整外部联接返回左表和右表中的所有行。
当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。
如果表之间有匹配行,则整个结果集行包含基表的数据值。
3、交叉联接交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。
交叉联接也称作笛卡尔积。
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。
有关使用左或右向外联接排列表的更多信息,请参见使用外联接。
例子:-------------------------------------------------a表id name b表id job parent_id1 张3 1 23 12 李四 2 34 23 王武 3 34 4a.id同parent_id 存在关系--------------------------------------------------1)内连接select a.*,b.* from a inner join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 22)左连接select a.*,b.* from a left join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 23 王武null3)右连接select a.*,b.* from a right join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 44)完全连接select a.*,b.* from a full join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 43 王武null--------------------------------------------------------------------------------------------一、交叉连接(CROSS JOIN)交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。
SQL中----SELECT语句中内连接,左连接,右连接,⾃连接和全连接---转Sql代码1. create table department( id number primary key, name varchar2(30));2. create table employee( id number primary key, name varchar2(30) not null, salarynumber(6,2), title varchar2(30), manager number, deptid number);3. insert into department values(1,'⼈⼒资源');4. insert into department values(2,'开发中⼼');5. insert into department values(3,'总裁室');6. insert into employee values(4,'赵六',9000,'项⽬经理',null,2);7. insert into employee values(3,'王五',7000,'项⽬组长',4,2);8. insert into employee values(1,'张三',6000,'程序员',3,2);9. insert into employee values(2,'李四',7000,'HR',4,1);不同的 SQL JOIN* JOIN: 如果表中有⾄少⼀个匹配,则返回⾏* LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的⾏* RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的⾏* FULL JOIN: 只要其中⼀个表中存在匹配,就返回⾏INNER JOIN 关键字在表中存在⾄少⼀个匹配时返回⾏。
简要说明sql 查询中内联接、左联接、右联接和完全外联接返回的内容。
(每份回复1摘要:1.内联接(Inner Join)2.左联接(Left Join)3.右联接(Right Join)4.完全外联接(Full Outer Join)5.总结正文:在SQL查询中,连接(JOIN)是一种强大的操作,它可以将两个或多个表中的数据组合在一起。
根据连接的方式,可以分为内联接、左联接、右联接和完全外联接。
1.内联接(Inner Join)内联接是最常用的连接方式,它返回的是两个表中共同拥有的数据。
也就是说,只有当两个表中的记录都满足连接条件时,才会出现在结果集中。
内联接通常用于筛选出同时满足多个条件的记录。
2.左联接(Left Join)左联接返回左表中的所有记录,以及右表中满足连接条件的记录。
即使右表中没有满足条件的记录,左联接也会将左表中的记录展示出来。
左联接常用于需要返回左表全部数据,同时兼顾右表中部分数据的情况。
3.右联接(Right Join)右联接与左联接相反,它返回右表中的所有记录,以及左表中满足连接条件的记录。
即使左表中没有满足条件的记录,右联接也会将右表中的记录展示出来。
右联接适用于需要返回右表全部数据,同时兼顾左表中部分数据的情况。
4.完全外联接(Full Outer Join)完全外联接返回左表和右表中满足连接条件的记录,以及左表和右表中不满足连接条件的记录。
换句话说,完全外联接返回的是两个表中所有的记录,除非表之间没有记录可以连接。
完全外接常用于需要返回两个表全部数据,或者其中一个表的全部数据,同时兼顾另一个表中部分数据的情况。
5.总结在实际应用中,连接操作可以帮助我们从多个表中筛选出满足特定条件的数据,提高查询效率。
内联接、左联接、右联接和完全外联接分别适用于不同的场景,根据实际需求选择合适的连接方式,可以更好地满足我们的查询需求。
举例说明:SQL左外连接,右外连接,全连接,内连接连接可分为以下⼏类:内连接。
(典型的连接运算,使⽤像 = 或 <> 之类的⽐较运算符)。
包括相等连接和⾃然连接。
内连接使⽤⽐较运算符根据每个表共有的列的值匹配两个表中的⾏。
例如,检索 students 和 courses 表中学⽣标识号相同的所有⾏。
外连接。
外连接可以是左向外连接、右向外连接或完整外部连接。
在FROM⼦句中指定外连接时,可以由下列⼏组关键字中的⼀组指定:LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER⼦句中指定的左表的所有⾏,⽽不仅仅是连接列所匹配的⾏。
如果左表的某⾏在右表中没有匹配⾏,则在相关联的结果集⾏中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。
将返回右表的所有⾏。
如果右表的某⾏在左表中没有匹配⾏,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有⾏。
当某⾏在另⼀个表中没有匹配⾏时,则另⼀个表的选择列表列包含空值。
如果表之间有匹配⾏,则整个结果集⾏包含基表的数据值。
交叉连接。
交叉连接返回左表中的所有⾏,左表中的每⼀⾏与右表中的所有⾏组合。
交叉连接也称作笛卡尔积。
例如,下⾯的内连接检索与某个出版商居住在相同州和城市的作者:USE pubsSELECT a.au_fname, a.au_lname, p.pub_nameFROM authors AS a INNER JOIN publishers AS pON a.city = p.cityAND a.state = p.stateORDER BY a.au_lname ASC, a.au_fname ASCFROM ⼦句中的表或视图可通过内连接或完整外部连接按任意顺序指定;但是,⽤左或右向外连接指定表或视图时,表或视图的顺序很重要。
深⼊理解SQL的四种连接-左外连接、右外连接、内连接、全连接1、内联接(典型的联接运算,使⽤像 = 或 <> 之类的⽐较运算符)。
包括相等联接和⾃然联接。
内联接使⽤⽐较运算符根据每个表共有的列的值匹配两个表中的⾏。
例如,检索 students和courses表中学⽣标识号相同的所有⾏。
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM⼦句中指定外联接时,可以由下列⼏组关键字中的⼀组指定:1)LEFT JOIN或LEFT OUTER JOIN左向外联接的结果集包括 LEFT OUTER⼦句中指定的左表的所有⾏,⽽不仅仅是联接列所匹配的⾏。
如果左表的某⾏在右表中没有匹配⾏,则在相关联的结果集⾏中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN右向外联接是左向外联接的反向联接。
将返回右表的所有⾏。
如果右表的某⾏在左表中没有匹配⾏,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN完整外部联接返回左表和右表中的所有⾏。
当某⾏在另⼀个表中没有匹配⾏时,则另⼀个表的选择列表列包含空值。
如果表之间有匹配⾏,则整个结果集⾏包含基表的数据值。
3、交叉联接交叉联接返回左表中的所有⾏,左表中的每⼀⾏与右表中的所有⾏组合。
交叉联接也称作笛卡尔积。
FROM ⼦句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,⽤左或右向外联接指定表或视图时,表或视图的顺序很重要。
有关使⽤左或右向外联接排列表的更多信息,请参见使⽤外联接。
例⼦:-------------------------------------------------a表 id name b表 id job parent_id1 张3 1 23 12 李四 2 34 23 王武 3 34 4a.id同parent_id 存在关系--------------------------------------------------1)内连接select a.*,b.* from a inner join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 22)左连接select a.*,b.* from a left join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 23 王武 null3)右连接select a.*,b.* from a right join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 44)完全连接select a.*,b.* from a full join b on a.id=b.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 43 王武 null--------------------------------------------------------------------------------------------⼀、交叉连接(CROSS JOIN)交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON⼦句,返回的是两表的乘积,也叫笛卡尔积。