SQL连接查询语句(内、外、交叉和合并查询)接触Sql语句时间挺长时间了,听他⼈说过sql语句的连接查询,但⼀直没有认真研究和使⽤过!!最近在公司实习,需要⽤到⼀些连接的语句,我也从中体会到连接查询带来的⽅便。
下⾯总结⼀下SQL连接查询语句。
1、内连接(INNER JOIN)
  内连接也称⾃然连接,它是根据两个或多个表中的列之间的关系,从这些表中查询数据。
注意:内连接是从结果表中删除与其他被连接表中没有匹配⾏的所有⾏,所以内连接可能会丢失信息。
重点:内连接,只查匹配⾏。
语法:(INNER可省略)
select dishname,dishcode,nums,catename from sn_dish_info inner join sn_dish_category
on sn_dish_info.cateuuid=sn_dish_category.cateuuid
菜品类别表:
sql语句查询不包含菜品表
结果表
  这样我们就把两张表中我们想要的数据查出来了。但同时招牌菜这个的数据就丢失了!!不过这对于我们好像不影响我们。我们只要菜品类别下有菜品的数据。
2、外连接(左,右,全连接)
  外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。通常我们省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。
  在左外连接和右外连接时都会以⼀张表为基表,该表的内容会全部显⽰,然后加上两张表匹配的内容。如果基表的数据在另⼀张表没有记录。那么在相关联的结果集⾏中列显⽰为空值(NULL)。
(1)左连接
以左表为基准,结果集保留左表的所有⾏,对于右表只包含左表匹配的⾏。如果右表不存在与左表相对应的数据,就将查询结果集合对应的数据字段放⼊NULL值。
Select  dishname,dishcode,nums,sn_dish_category.catename as carename
from sn_dish_info  left join sn_dish_info.cateuuid sn_dish_category.cateuuid
结果:
(2)右连接
与左连接正好相反。
Select  dishname,dishcode,nums,sn_dish_category.catename as carename
from sn_dish_info right join sn_dish_category on sn_dish_info.cateuuid=sn_dish_category.cateuui
结果:
(3)全连接
将左右两个表中的数据都查询出来,如果两个表中没有相对应的数据,就将该字段放⼊NULL值。
Select  dishname,dishcode,nums,sn_dish_category.catename as carename
from sn_dish_info full join sn_dish_category on sn_dish_info.cateuuid=sn_dish_category.cateuuid
3、交叉连接(Cross join)
交叉连接也称笛卡尔积,是将两个表中的每⼀条数据都进⾏组合。
例:a(a,1),b(2,3,4)    交叉连接后c{(a,2) ,(a,3),(a,4)(1,2),(1,3),(1,4)}
Select  dishname,dishcode,nums,sn_dish_category.catename as
carename from sn_dish_info cross join sn_dish_category
他和⽤内连接进⾏查询的结果⼀样,就是太慢了,因为它得先进⾏组合,在进⾏筛选,导致查询的效率很低。
4、UNION
UNION 操作符⽤于合并两个或多个 SELECT 语句的结果集。
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复⾏⽽派⽣出⼀个结果表。
当 ALL 随 UNION ⼀起使⽤时(即 UNION ALL),不消除重复⾏。两种情况下,派⽣表的每⼀⾏不是
来⾃ TABLE1 就是来⾃ TABLE2。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使⽤ UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。