佛山北京网站建设公司哪家好,24小时最新在线视频免费观看,网站seo课程,济南网络推广seo1、内联接(典型的联接运算#xff0c;使用像 或 之类的比较运算符)。包括相等联接和自然联接。内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如#xff0c;检索 students和courses表中学生标识号相同的所有行。2、外联接。外联接可以是左向外联…1、内联接(典型的联接运算使用像 或 之类的比较运算符)。包括相等联接和自然联接。内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如检索 students和courses表中学生标识号相同的所有行。2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时可以由下列几组关键字中的一组指定1)LEFT JOIN或LEFT OUTER JOIN左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行则在相关联的结果集行中右表的所有选择列表列均为空值。2)RIGHT JOIN 或 RIGHT OUTER JOIN右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行则将为左表返回空值。3)FULL JOIN 或 FULL OUTER JOIN完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时则另一个表的选择列表列包含空值。如果表之间有匹配行则整个结果集行包含基表的数据值。3、交叉联接交叉联接返回左表中的所有行左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定但是用左或右向外联接指定表或视图时表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息请参见使用外联接。例子-------------------------------------------------a表 id name b表 id job parent_id1 张3 1 23 12 李四 2 34 23 王武 3 34 4a.id同parent_id 存在关系--------------------------------------------------1) 内连接select a.*,b.* from a inner join b on a.idb.parent_id结果是1 张3 1 23 12 李四 2 34 22)左连接select a.*,b.* from a left join b on a.idb.parent_id结果是1 张3 1 23 12 李四 2 34 23 王武 null3) 右连接select a.*,b.* from a right join b on a.idb.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 44) 完全连接select a.*,b.* from a full join b on a.idb.parent_id结果是1 张3 1 23 12 李四 2 34 2null 3 34 43 王武 null--------------------------------------------------------------------------------------------一、交叉连接(CROSS JOIN)交叉连接(CROSS JOIN)有两种显式的和隐式的不带ON子句返回的是两表的乘积也叫笛卡尔积(没有条件的inner join)。例如下面的语句1和语句2的结果是相同的。语句1隐式的交叉连接没有CROSS JOIN。SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAMEFROM ORDERS O , CUSTOMERS CWHERE O.ID1;语句2显式的交叉连接使用CROSS JOIN。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM ORDERS O CROSS JOIN CUSTOMERS CWHERE O.ID1;语句1和语句2的结果是相同的查询结果如下二、内连接(INNER JOIN)内连接(INNER JOIN)有两种显式的和隐式的返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。例如下面的语句3和语句4的结果是相同的。语句3隐式的内连接没有INNER JOIN形成的中间表为两个表的笛卡尔积。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C,ORDERS OWHERE C.IDO.CUSTOMER_ID;语句4显示的内连接一般称为内连接有INNER JOIN形成的中间表为两个表经过ON条件过滤后的笛卡尔积。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C INNER JOIN ORDERS O ON C.IDO.CUSTOMER_ID;语句3和语句4的查询结果三、外连接(OUTER JOIN)外连不但返回符合连接和查询条件的数据行还返回不符合条件的一些行。外连接分三类左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。三者的共同点是都返回符合连接条件和查询条件(即内连接)的数据行。不同点如下左外连接还返回左表中不符合连接条件单符合查询条件的数据行。右外连接还返回右表中不符合连接条件单符合查询条件的数据行。全外连接还返回左表中不符合连接条件单符合查询条件的数据行并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复)即“全外左外 UNION 右外”。说明左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中OUTER 关键字是可省略的。下面举例说明语句5左外连接(LEFT OUTER JOIN)SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_ID;语句6右外连接(RIGHT OUTER JOIN)SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_ID;注意WHERE条件放在ON后面查询的结果是不一样的。例如语句7WHERE条件独立。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_IDWHERE O.ORDER_NUMBERMIKE_ORDER001;语句8将语句7中的WHERE条件放到ON后面。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_ID AND O.ORDER_NUMBERMIKE_ORDER001;从语句7和语句8查询的结果来看显然是不相同的语句8显示的结果是难以理解的。因此推荐在写连接查询的时候ON后面只跟连接条件而对中间表限制的条件都写到WHERE子句中。语句9全外连接(FULL OUTER JOIN)。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_ID;注意MySQL是不支持全外的连接的这里给出的写法适合Oracle和DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。下图是上面SQL在Oracle下执行的结果语句10左外和右外的合集实际上查询结果和语句9是相同的。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_IDUNIONSELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.IDO.CUSTOMER_ID;