﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-zwws's blog-随笔分类-SQL技巧</title><link>http://www.phpweblog.net/zwws/category/177.html</link><description>Blog For PHP Learning...</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:48:23 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:48:23 GMT</pubDate><ttl>60</ttl><item><title>SQL--JOIN之完全用法(版本1)</title><link>http://www.phpweblog.net/zwws/archive/2007/02/23/945.html</link><dc:creator>zwws</dc:creator><author>zwws</author><pubDate>Fri, 23 Feb 2007 12:58:00 GMT</pubDate><guid>http://www.phpweblog.net/zwws/archive/2007/02/23/945.html</guid><wfw:comment>http://www.phpweblog.net/zwws/comments/945.html</wfw:comment><comments>http://www.phpweblog.net/zwws/archive/2007/02/23/945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/zwws/comments/commentRss/945.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/zwws/services/trackbacks/945.html</trackback:ping><description><![CDATA[外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 <br />在 FROM 子句中指定外联接时，可以由下列几组关键字中的一组指定：<br /><br />LEFT JOIN 或 LEFT OUTER JOIN。 <br />左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行，而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行，则在相关联的结果集行中右表的所有选择列表列均为空值。<br /><br />RIGHT JOIN 或 RIGHT OUTER JOIN。 <br />右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行，则将为左表返回空值。<br /><br />FULL JOIN 或 FULL OUTER JOIN。 <br />完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时，则另一个表的选择列表列包含空值。如果表之间有匹配行，则整个结果集行包含基表的数据值。<br /><br />仅当至少有一个同属于两表的行符合联接条件时，内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行，只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行，以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。<br /><br />Microsoft&amp;reg; SQL Server™ 2000 对在 FROM 子句中指定的外联接使用以下 SQL-92 关键字： <br /><br />LEFT OUTER JOIN 或 LEFT JOIN<br /><br /><br />RIGHT OUTER JOIN 或 RIGHT JOIN<br /><br /><br />FULL OUTER JOIN 或 FULL JOIN <br />SQL Server 支持 SQL-92 外联接语法，以及在 WHERE 子句中使用 *= 和 =* 运算符指定外联接的旧式语法。由于 SQL-92 语法不容易产生歧义，而旧式 Transact-SQL 外联接有时会产生歧义，因此建议使用 SQL-92 语法。<br /><br />使用左向外联接<br />假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。<br /><br />若要在结果中包括所有的作者，而不管出版商是否住在同一个城市，请使用 SQL-92 左向外联接。下面是 Transact-SQL 左向外联接的查询和结果：<br /><br />USE pubs<br />SELECT a.au_fname, a.au_lname, p.pub_name<br />FROM authors a LEFT OUTER JOIN publishers p<br />   ON a.city = p.city<br />ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br /><br />下面是结果集：<br /><br />au_fname             au_lname                       pub_name          <br />-------------------- ------------------------------ ----------------- <br />Reginald             Blotchet-Halls                 NULL<br />Michel               DeFrance                       NULL<br />Innes                del Castillo                   NULL<br />Ann                  Dull                           NULL<br />Marjorie             Green                          NULL<br />Morningstar          Greene                         NULL<br />Burt                 Gringlesby                     NULL<br />Sheryl               Hunter                         NULL<br />Livia                Karsen                         NULL<br />Charlene             Locksley                       NULL<br />Stearns              MacFeather                     NULL<br />Heather              McBadden                       NULL<br />Michael              O'Leary                        NULL<br />Sylvia               Panteley                       NULL<br />Albert               Ringer                         NULL<br />Anne                 Ringer                         NULL<br />Meander              Smith                          NULL<br />Dean                 Straight                       NULL<br />Dirk                 Stringer                       NULL<br />Johnson              White                          NULL<br />Akiko                Yokomoto                       NULL<br />Abraham              Bennet                         Algodata Infosystems<br />Cheryl               Carson                         Algodata Infosystems<br /><br />(23 row(s) affected)<br /><br />不管是否与 publishers 表中的 city 列匹配，LEFT OUTER JOIN 均会在结果中包含 authors 表的所有行。注意：结果中所列的大多数作者都没有相匹配的数据,因此，这些行的 pub_name 列包含空值。<br /><br />使用右向外联接<br />假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。SQL-92 右向外联接运算符 RIGHT OUTER JOIN 指明：不管第一个表中是否有匹配的数据，结果将包含第二个表中的所有行。<br /><br />若要在结果中包括所有的出版商，而不管城市中是否还有出版商居住，请使用 SQL-92 右向外联接。下面是 Transact-SQL 右向外联接的查询和结果：<br /><br />USE pubs<br />SELECT a.au_fname, a.au_lname, p.pub_name<br />FROM authors AS a RIGHT OUTER JOIN publishers AS p<br />   ON a.city = p.city<br />ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br /><br />下面是结果集：<br /><br />au_fname             au_lname                 pub_name             <br />-------------------- ------------------------ -------------------- <br />Abraham              Bennet                   Algodata Infosystems<br />Cheryl               Carson                   Algodata Infosystems<br />NULL                 NULL                     Binnet &amp; Hardley<br />NULL                 NULL                     Five Lakes Publishing<br />NULL                 NULL                     GGG&amp;G<br />NULL                 NULL                     Lucerne Publishing<br />NULL                 NULL                     New Moon Books<br />NULL                 NULL                     Ramona Publishers<br />NULL                 NULL                     Scootney Books<br /><br />(9 row(s) affected)<br /><br />使用谓词（如将联接与常量比较）可以进一步限制外联接。下例包含相同的右向外联接，但消除销售量低于 50 本的书籍的书名：<br /><br />USE pubs<br />SELECT s.stor_id, s.qty, t.title<br />FROM sales s RIGHT OUTER JOIN titles t<br />   ON s.title_id = t.title_id<br />   AND s.qty &gt; 50<br />ORDER BY s.stor_id ASC<br /><br />下面是结果集：<br /><br />stor_id qty    title                                                     <br />------- ------ --------------------------------------------------------- <br />(null) (null) But Is It User Friendly?                                   <br />(null) (null) Computer Phobic AND Non-Phobic Individuals: Behavior <br />            Variations                  <br />(null) (null) Cooking with Computers: Surreptitious Balance Sheets       <br />(null) (null) Emotional Security: A New Algorithm                        <br />(null) (null) Fifty Years in Buckingham Palace Kitchens                  <br />7066   75     Is Anger the Enemy?                                        <br />(null) (null) Life Without Fear                                          <br />(null) (null) Net Etiquette                                              <br />(null) (null) Onions, Leeks, and Garlic: Cooking Secrets of the <br />            Mediterranean                  <br />(null) (null) Prolonged Data Deprivation: Four Case Studies              <br />(null) (null) Secrets of Silicon Valley                                  <br />(null) (null) Silicon Valley Gastronomic Treats                          <br />(null) (null) Straight Talk About Computers                              <br />(null) (null) Sushi, Anyone?                                             <br />(null) (null) The Busy Executive's Database Guide                        <br />(null) (null) The Gourmet Microwave                                      <br />(null) (null) The Psychology of Computer Cooking                         <br />(null) (null) You Can Combat Computer Stress!                            <br /><br />(18 row(s) affected)<br /><br />有关谓词的更多信息，请参见 WHERE。 <br /><br />使用完整外部联接<br />若要通过在联接结果中包括不匹配的行保留不匹配信息，请使用完整外部联接。Microsoft&amp;reg; SQL Server™ 2000 提供完整外部联接运算符 FULL OUTER JOIN，不管另一个表是否有匹配的值，此运算符都包括两个表中的所有行。<br /><br />假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者（本例中为 Abraham Bennet 和 Cheryl Carson）。SQL-92 FULL OUTER JOIN 运算符指明：不管表中是否有匹配的数据，结果将包括两个表中的所有行。<br /><br />若要在结果中包括所有作者和出版商，而不管城市中是否有出版商或者出版商是否住在同一个城市，请使用完整外部联接。下面是 Transact-SQL 完整外部联接的查询和结果：<br /><br />USE pubs<br />SELECT a.au_fname, a.au_lname, p.pub_name<br />FROM authors a FULL OUTER JOIN publishers p<br />   ON a.city = p.city<br />ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC<br /><br />下面是结果集：<br /><br />au_fname             au_lname                     pub_name             <br />-------------------- ---------------------------- -------------------- <br />Reginald             Blotchet-Halls               NULL<br />Michel               DeFrance                     NULL<br />Innes                del Castillo                 NULL<br />Ann                  Dull                         NULL<br />Marjorie             Green                        NULL<br />Morningstar          Greene                       NULL<br />Burt                 Gringlesby                   NULL<br />Sheryl               Hunter                       NULL<br />Livia                Karsen                       NULL<br />Charlene             Locksley                     NULL<br />Stearns              MacFeather                   NULL<br />Heather              McBadden                     NULL<br />Michael              O'Leary                      NULL<br />Sylvia               Panteley                     NULL<br />Albert               Ringer                       NULL<br />Anne                 Ringer                       NULL<br />Meander              Smith                        NULL<br />Dean                 Straight                     NULL<br />Dirk                 Stringer                     NULL<br />Johnson              White                        NULL<br />Akiko                Yokomoto                     NULL<br />Abraham              Bennet                       Algodata Infosystems<br />Cheryl               Carson                       Algodata Infosystems<br />NULL                 NULL                         Binnet &amp; Hardley<br />NULL                 NULL                         Five Lakes Publishing<br />NULL                 NULL                         GGG&amp;G<br />NULL                 NULL                         Lucerne Publishing<br />NULL                 NULL                         New Moon Books<br />NULL                 NULL                         Ramona Publishers<br />NULL                 NULL                         Scootney Books<br /><br />(30 row(s) affected)<img src ="http://www.phpweblog.net/zwws/aggbug/945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/zwws/" target="_blank">zwws</a> 2007-02-23 20:58 <a href="http://www.phpweblog.net/zwws/archive/2007/02/23/945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql的left join 命令详解</title><link>http://www.phpweblog.net/zwws/archive/2007/02/23/944.html</link><dc:creator>zwws</dc:creator><author>zwws</author><pubDate>Fri, 23 Feb 2007 09:32:00 GMT</pubDate><guid>http://www.phpweblog.net/zwws/archive/2007/02/23/944.html</guid><wfw:comment>http://www.phpweblog.net/zwws/comments/944.html</wfw:comment><comments>http://www.phpweblog.net/zwws/archive/2007/02/23/944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/zwws/comments/commentRss/944.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/zwws/services/trackbacks/944.html</trackback:ping><description><![CDATA[给个通俗的解释吧. <br />例表a <br />aid adate <br />1 a1 <br />2 a2 <br />3 a3 <br />表b <br />bid bdate <br />1 b1 <br />2 b2 <br />4 b4 <br />两个表a,b相连接,要取出id相同的字段 <br />select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据. <br />此时的取出的是: <br />1 a1 b1 <br />2 a2 b2 <br />那么left join 指: <br />select * from a left join b on a.aid = b.bid <br />首先取出a表中所有数据,然后再加上与a,b匹配的的数据 <br />此时的取出的是: <br />1 a1 b1 <br />2 a2 b2 <br />3 a3 空字符 <br />同样的也有right join <br />指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 <br />此时的取出的是: <br />1 a1 b1 <br />2 a2 b2 <br />4 空字符 b4<br /><br />LEFT JOIN 或 LEFT OUTER JOIN。 <br />左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行，而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行，则在相关联的结果集行中右表的所有选择列表列均为空值。 <br /><br /><img src ="http://www.phpweblog.net/zwws/aggbug/944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/zwws/" target="_blank">zwws</a> 2007-02-23 17:32 <a href="http://www.phpweblog.net/zwws/archive/2007/02/23/944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>