深刻理解SQL的四种链接-左外链接、右外链接、内链接、全链接_Mysql_脚本之家 html
a、内链接(INNER JOIN):当两个表中存在匹配时,才返回行( 返回具备where,on条件相的信息)内联接使用比较运算符根据每一个表共有的列的值匹配两个表中的行spa
b、外链接.net
一、左链接(LEFT JOIN):返回左表中全部行,即便右表中没有匹配的行code
二、右链接(RIGHT JOIN):返回右表中的全部行,即便左表中没有匹配的行htm
三、全链接(FULL JOIN):只要某一个表存在匹配,就返回行get
c、笛卡尔链接(CARTESIAN JOIN):返回两个或者更多的表中记录集的笛卡尔积io
a、结合table
是把两个或多个表组合在一块儿来获取数据file
b、结合条件的未知
要结合的表列在 FROM 子句里,而结合是在 WHERE 子句里完成的。
利用通用字段结合两个表,一般用主键
语法
SELECT TABLE1.CONLUMN1, TABLE2.CONLUMN2... FROM TABLE1, TABLE2 [, TABLE3] --表名. 做为限定字段 WHERE TABLE1.CONLUMN_NAME = TABLE2.CONLUMN_NAME [AND TABLE1.CONLUMN_NAME = TABLE3.CONLUMN_NAME]
案例1
SELECT EMPLOYEE_TBL.EMP_ID, EMPLOYEE_PAY_TBL.DATE_HIRE FROM EMPLOYEE_TBL, EMPLOYEE_PAY_TBL WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_TBL.EMP_ID
案例2
select a.*,b.* from a inner jion b on a.id = b.parent_id
结果
其实就是结合两个a.id = parent_id同样的数据
语法
SELECT TABLE1.COLUMN1,TABLE2.CLOUMN2 FROM TABLE1 /* WHERE子句被结合操做符去掉 INNER JION后面是结合的表 ON 后面结合操做符 */ INNER JION TABLE2 ON TABLE1.COLUMN_NAME = TABLE.COLUMN_NAME
案例 SELECT EMPLOYEE_TBL.EMP_ID, EMPLOYEE_PAY_TBL.DATE_HIRE FORM EMPLOYEE_TBL INNER JION EMPLOYEE_PAY_TBL ON EMPLOYYE_TBL.EMP_ID = EMPLOYEE_TBL,EMP_ID
意思WHERE 条件不想等所有拿出来,根据同一个字段在两个表里值不想等来实现结合
语法
SELECT TABLE1.COLUNM,TABLE2.COLUMN FROM TABLE1,TABLE2 WHERE TABLE1_COLUMNNAME <> TABLE2_COLUMNNAME
左向外链接的结果集包括 LEFT OUTER 子句中指定的左表的全部行,而不单单是链接所匹配的行,若是左表中的某行在右表中没有匹配行,则链接后的结果集中右表所选择列表均为空值
语法
SELECT table1.column1,table2.column2... FROM table1 LEFT JOIN table2 ON table1.common_field = table2.common_field;
将两个表用左链接
SELECT ID,NAME,AMOUNT,DATE FORM CUSTOMERS LEFT JION ORDERS ON CUSTOMERS.ID = ORDERS.ID
输出
案例2
表A记录以下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录以下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408
elect * from A left join B on A.aID = B.bID
结果
右向外链接是左向外链接的反向链接,将返回右表的全部行,若是右表的某行在坐标中没有匹配行,则将左表返回空值
语法
SELECT table1.column,table2.column... FROM table1 RIGHT JION table2 ON table1.common_field = table2.common_field
完整外部链接返回左表和右表中的全部行,当某行在另外一个表中没有匹配时,则另外一个表的选择列表列包含空值,若是表之间有匹配行,则整个结果行包含基表的数据值
语法
SELECT table1.column1,table2.column2... FROM tabel1 FULL JOIN table2 ON table1.common_field = table2.common_field
注:
MySQL中不支持该种方法,那么使用UNION ALL子句将左链接和右连接结果组合在一块儿
语法
SELECT table1.column1,table2.column FROM table1 LEFT JOIN table2 ON table1.common_filed = table2.common_filed UNION ALL SELECT table1.column1,table2.column FROM table1 RIGHT JOIN table2 ON table1.common_filed = table2.common_filed
返回左表中的全部行,左表中的每一行与右表中的全部行组合,交叉联接也称做笛卡尔积
语法
SELECT table1.column1,table2.column2... FROM table1,table2 [,table3] --隐式的链接方式,忽略了 cross jion 实际上是 table1 cross jion table2
案例
将会输出二者条数乘积的总条数
若是须要从两个表里获取数据,但它们又没有公用字段,咱们就必须结合另外一个表,这个表与前面两个表都有公用字段,这个表被称为基表,基表用于结合到具备公用字段的一个或多个表,或是结合没用公用字段的多个表
案例
/* ORDERS_TBL拥有CUST_ID,PROD_ID,经过这个来创建联系 */ SELECT C.CUST_NAMW,P.PROD_DESC FROM CUSTOMER_TBL C, PRODUCTS_TBL P, ORDERS_TBL O WHERE C.CUST_ID = O.CUST_ID AND P.PROD_ID = O.PROD_ID