石建 | Fat Mind

          sql連接查詢

          請參考:http://en.wikipedia.org/wiki/Join_(SQL)#Sample_tables

          inner JOINS

            An inner join is the most common join operation used in applications and can be regarded as the default join-type. Inner join creates a new result table by combining column values of two tables (A and B) based upon the join-predicate. The query compares each row of A with each row of B to find all pairs of rows which satisfy the join-predicate. When the join-predicate is satisfied, column values for each matched pair of rows of A and B are combined into a result row. The result of the join can be defined as the outcome of first taking the Cartesian product (or cross-join) of all records in the tables (combining every record in table A with every record in table B)—then return all records which satisfy the join predicate. Actual SQL implementations normally use other approaches like a Hash join or a Sort-merge join where possible, since computing the Cartesian product is very inefficient.

            注意:innner查詢(默認的連接查詢方式),是先查詢“Cartesian”生成中間表,再根據where條件篩選結果;但此方法非常低效,SQL具體的實現可能是 
          Hash join or a Sort-merge join 。
                  
          One can further classify inner joins as equi-joins, as natural joins, or as cross-joins.

          SELECT *
          FROM employee INNER JOIN department
          ON employee.DepartmentID = department.DepartmentID;
          The following example shows a query which is equivalent to the one from the previous example.
          
          
          SELECT *
          FROM   employee, department
          WHERE  employee.DepartmentID = department.DepartmentID;
          

          Outer joins

            An outer join does not require each record in the two joined tables to have a matching record. The joined table retains each record—even if no other matching record exists. Outer joins subdivide further into left outer joins, right outer joins, and full outer joins, depending on which table(s) one retains the rows from (left, right, or both).

          Example of a left outer join, with the additional result row italicized:

          SELECT *
          FROM   employee  LEFT OUTER JOIN department
          ON employee.DepartmentID = department.DepartmentID;
          
          Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
          Jones 33 Engineering 33
          Rafferty 31 Sales 31
          Robinson 34 Clerical 34
          Smith 34 Clerical 34
          John NULL NULL NULL
          Steinberg 33 Engineering 33


          Example right outer join, with the additional result row italicized:

          SELECT *
          FROM   employee RIGHT OUTER JOIN department
          ON employee.DepartmentID = department.DepartmentID;
          
          Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
          Smith 34 Clerical 34
          Jones 33 Engineering 33
          Robinson 34 Clerical 34
          Steinberg 33 Engineering 33
          Rafferty 31 Sales 31
          NULL NULL Marketing 35


          Example full outer join: (mysql is not support)

          SELECT *
          FROM   employee
          FULL OUTER JOIN department
          ON employee.DepartmentID = department.DepartmentID;
          
          Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
          Smith 34 Clerical 34
          Jones 33 Engineering 33
          Robinson 34 Clerical 34
          John NULL NULL NULL
          Steinberg 33 Engineering 33
          Rafferty 31 Sales 31
          NULL NULL Marketing 35


          Self-join

          A query to find all pairings of two employees in the same country is desired.

          An example solution query could be as follows:

          SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country
          FROM Employee F, Employee S
          WHERE F.Country = S.Country
          AND F.EmployeeID < S.EmployeeID
          ORDER BY F.EmployeeID, S.EmployeeID;
          

          Which results in the following table being generated.

          Employee Table after Self-join by Country
          EmployeeIDLastNameEmployeeIDLastNameCountry
          123 Rafferty 124 Jones Australia
          123 Rafferty 145 Steinberg Australia
          124 Jones 145 Steinberg Australia
          305 Smith 306 John Germany










          Join algorithms

          Three fundamental algorithms exist for performing a join operation: Nested loop joinSort-merge join and Hash join.




           

          posted on 2010-11-03 15:36 石建 | Fat Mind 閱讀(291) 評論(0)  編輯  收藏 所屬分類: database


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2010年11月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          What 、How、Why,從細節中尋找不斷的成長點
          主站蜘蛛池模板: 长泰县| 三明市| 铁力市| 汉源县| 防城港市| 金坛市| 新干县| 荔波县| 涿州市| 那曲县| 景泰县| 邓州市| 余干县| 雷州市| 威远县| 南澳县| 武鸣县| 罗山县| 青冈县| 伊宁县| 安乡县| 桃源县| 乌拉特中旗| 大宁县| 青龙| 自治县| 绥棱县| 玛纳斯县| 博爱县| 静乐县| 墨竹工卡县| 石台县| 剑河县| 灵寿县| 新乡县| 临高县| 东兰县| 泾川县| 清原| 喀什市| 玛纳斯县|