sql 链接 查询

sql的的连接: 分为 内链接 和外连接:

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,是它区别于其它类型 数据库管理系统的一个标志。

一、内链接:

内连接就是用比较运算符比较要用连接列的值的连接。join或者inner join。

可以看一看这一篇文章,作者总结的很好:SQL连接查询总结和练习

内连接是应用程序中用的普遍的"连接"操作,它一般都是默认连接类型。内连接基于连接谓词将两张表(如 A 和 B)的列组合在一起,产生新的结果表。查询会将 A 表的每一行和 B 表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行。连接产生的结果集,可以定义为首先对两张表做笛卡尔积(交叉连接) -- 将 A 中的每一行和 B 中的每一行组合,然后返回满足连接谓词的记录。实际上 SQL 产品会尽可能用其他方式去实现连接,笛卡尔积运算是非常没效率的. 

SQL语法:

select *fron table1 join table2  on table1.条件列名 = table2.条件列名。  返回符合匹配条件的两表列

等价于:

           select A* ,B* from table1 A ,table2 B where A.条件列名 =B.条件列名

           select *form table1 cross join table2 where table1.条件列名 = table2.条件列名

所以这个效率是很低的,

二、外连接

外连接并不要求连接的两表的每一条记录在对方表中都一条匹配的记录. 连接表保留所有记录 -- 甚至这条记录没有匹配的记录也要保留. 外连接可依据连接表保留左表, 右表或全部表的行而进一步分为左外连接, 右外连接和全连接.

外连接分为左连接(left join 或left outer join)、右连接(right join 或者 right outer join)、和完整外部连接 (full join 或者 full outer join)

1、左外连接 left join

左外连接会返回左表的所有记录和右表中匹配记录的组合(如果右表中无匹配记录, 来自于右表的所有列的值设为 NULL). 如果左表的一行在右表中存在多个匹配行, 那么左表的行会复制和右表匹配行一样的数量, 并进行组合生成连接结果.

 显示的就是press中的所有列和能匹配的列

2、右外连接

    右外连接, 亦简称右连接, 它与左外连接完全类似, 只不过是作连接的表的顺序相反而已.右连接操作返回右表的所有行和这些行在左表中匹配的行(没有匹配的, 来源于左表的列值设为 NULL).

3、全连接

    全连接是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充.。一些数据库系统(如 MySQL)并不直接支持全连接, 但它们可以通过左右外连接的并集(参: union)来模拟实现

三、自连接

     自身连接是指同一个表自己与自己进行连接。既可以用内连接,也可以用外连接。
  例如:SELECT * FROM   authors a1 LEFT JOIN authors a2 ON a2.press_id = a1.id

其他:

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。

原文地址:https://www.cnblogs.com/a-lonely-wolf/p/6442401.html