旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

mysql多表衔接查询操纵实例【MySQL教程】,mysql,mysql多表查询

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:45评论:0


导读:现实的项目,存在多张表的关联关联。不可能在一张表内里就能够检索出一切数据。假如没有表衔接的话,那末我们就须要异常多的操纵。比方须要从A表找出限制性的前提来从B表中检索数据。不只须要...
现实的项目,存在多张表的关联关联。不可能在一张表内里就能够检索出一切数据。假如没有表衔接的话,那末我们就须要异常多的操纵。比方须要从A表找出限制性的前提来从B表中检索数据。不只须要分多表来操纵,而且效力也不高。比方书中的例子:

代码以下:

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,如许就能够够到T_Order中检索FCustomerId即是2 的纪录:

代码以下:

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

下面我们细致来看看表衔接。表衔接有多种差别的范例,有交织衔接(CROSS JOIN)、内衔接(INNER JOIN)、外衔接(OUTTER JOIN)。

(1)内衔接(INNER JOIN):内衔接组合两张表,而且只猎取满足两表衔接前提的数据。

代码以下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

注:在大多数数据库系统中,INNER JOIN中的INNER是可选的,INNER JOIN 是默许的衔接体式格局。

在运用表衔接的时刻能够不局限于只衔接两张表,由于有许多情况下须要联络许多表。比方,T_Order表同时还须要衔接T_Customer和T_OrderType两张表才检索到所须要的信息,编写以下SQL语句即可:

代码以下:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId

(2)交织衔接(CROSS JOIN):交织衔接一切触及的表中的一切纪录都包含在效果集合。能够采纳两种体式格局来定义交织衔接,分别是隐式和显式的衔接。

下面看看隐式的例子:

代码以下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order

运用显式的衔接则须要运用CROSS JOIN,例子以下:

代码以下:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order

(3)外衔接(OUTTER JOIN):内部衔接只猎取满足衔接前提的数据,而关于外部衔接来讲,主如果处理如许的一种场景。满足前提的数据检索出来,这个没有疑问,外部衔接还会检索另一部份数据,那就是将不满足前提的数据以NULL来添补。先来看一下外衔接的分类:左外部衔接(LEFT OUTER JOIN)、右外部衔接(RIGHT OUTER JOIN)和全外部衔接(FULLOUTER JOIN)。

I、左外部衔接(LEFT OUTER JOIN):前头也说了,将不满足前提的数据以NULL来添补。那末详细是哪些须要以NULL来添补呢,关于左外衔接来讲的话,衔接前提当中,假如涌现满足前提的左表的数据在右表中没有响应婚配时,须要把响应的右表字段添补NULL值。也就是说左外部衔接的主体是左表,右表来合营。

代码以下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:假如运用左外部衔接的话,经由过程where语句能过滤个中不符合的数据

代码以下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

II、右外部衔接(RIGHT OUTER JOIN):右外部衔接与左外连部接相反,将会被添补NULL值的是左表的字段。也就是说右外部衔接的主体是右表,左表来合营。

代码以下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

注:同左外衔接一样,能够运用where语句举行过滤

III、全外部衔接(FULLOUTER JOIN):全外部衔接是左外部衔接和右外部衔接的合集。也就是既包含左外部衔接的效果集,也包含右外部衔接的效果集。

代码以下:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

其效果相当于:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

=======================================================================================

多表查询的多种sql写法:(下面是从两个内外查询<也能够算作从三个内外查询>,显现表v_goods里的一切字段,显现admin2内外的name字段作为添加人,显现表admin2表的name字段作为操纵人) 多个表的查询都可根据下面三个例句举行编写sql

SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v  where 1=1;
SELECT v.*,a.name  aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ;
SELECT v.*,a.name  aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;

以上就是mysql多表衔接查询操纵实例的细致内容,更多请关注ki4网别的相干文章!

标签:mysqlmysql多表查询


欢迎 发表评论: