教你快速学会连接查询
Posted 另一个隐藏的世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你快速学会连接查询相关的知识,希望对你有一定的参考价值。
大家好!今天教你们如何使用连接查询。
在此之前我们要理解到底什么是连接查询?
连接查询就是把不同表的记录连接在一起汇成一张总表然后再从中查询你想要的信息。
首先连接查询分为:
1.内连接查询
2.多表连接查询
3.外连接查询
1.先从内连接开始,内连接分为:交叉连接(笛卡尔积)、相等连接、自然连接
内连接查询的概要:内连接基于连接谓词,它将两张表(如A和B)的列组合在一起,产生新的结果表。内连接查询会将A表的每一行与B表的每一行进行比较,并找出满足连接谓词的组合,当连接谓词被满足时,A中和B中匹配的行会按列组合成结果集中的一行。
内连接的语法:
SELECT 字段名(列名) FROM 表名1 JOIN 表名2 ON 表名1.字段列名=表名2.字段列名 [WHERE condition]
特别强调内连接语法关键字:join on
注意:1. [WHERE condition]可省略,它为查询条件表达式。
2.连接依据的列可能包含null值,null值不与任何值匹配(甚至和它本身)
3.如果是取表名1和表名2中的所有列,则前面字段名(列名)可用“*”代替,此时连接依据列重复,即表名1中字段列名与表名2中的字段列名为重复列
4.表名1 join 表名2:是将两表进行内连接
案例:
那么做到上述结果的SQL语句应该为:
SELECT goodsname 商品,typename 分类 FROM goods join type on goods.typeid=type.TYpeid
或
SELECT goodsname 商品,typename 分类 FROM goods,type where goods.typeid=type.typeid
说明:goodsname、typename为goods、type表里的字段
自然查询:要求相链接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)
语法:
SELECT 字段名(列名) FROM 表名1 NATURAL JOIN 表名2 【where condition】
2.多表连接查询
多表连接查询:如果查询的信息来源于多张表,则可通过两两连接的方式建立多表连接查询。
语法:
SELECT 字段名(列名) FROM 表名1 join 表名2 on 表名1.字段列名1=表名2.字段列名2_1 join 表名3 on 表名2.字段列名2_2=表名3.字段列名3 【where condition】
说明:1.表名2与表名1、表名3两两相连。
2.三表以上连接查询的方法与三表连接查询的方法一样,均是通过两两相连的方式实现
案例:
那么做到上述结果的SQL语句应该为:
seleect Name 客户, OrderDate 日期,GoodsName 商品 ,Quantity 数量 from user join orders on user.UserID = orders.UserID join ordersdetail on orders.OrdersID = ordersdetail.OrdersID join goods on ordersdetail.goodsId = goods.GoodsId
说明:NAME,OrderDate,GoodsName,Quantity均为上述表中的字段
3.外连接
外连接:将不满足连接条件的记录也在查询结果中出现。
外连接分为:左连接和右连接
左外连接:结果包括左表的所有记录和右表满足连接条件的记录,结果那些不符合连接条件的右表的列的值为null值
右外连接:左外连接的反向连接
语法:
SELECT 字段名称 FROM 表名1 LEFT|RIGHT|FULL JOIN 表名2 on 表名1.字段名1=表名2.字段名2
说明:LEFT 左外连接、RIGHT右连接、full完全外连接
举个简单的例子:这是uesr表
这是folsa表
现在我们把folsa表与uesr表进行左外连接(LEFT join):
SQL语句为:
select * from user left join folsa on user.ID=folsa.ID
说明:1.“*”代表所有列
2.左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).
3.此时我们不能说结果的行数等于左表数据的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。
效果图为:
此外右连接(RIGHT join)与上左连接相反,反向连接。
完全外连接:
SQL语句:
select * from user full join folsa on user.ID=folsa.ID
效果图为:
完全外连接包括(full join)左右两表中所有的字段,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为(NULL)
以上就是连接查询的简单操作
以上是关于教你快速学会连接查询的主要内容,如果未能解决你的问题,请参考以下文章