SQL 進階(2),sql

來源:互聯網
上載者:User

SQL 進階(2),sql
SQL 進階(2)SQL INNER JOIN 關鍵字        在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。
INNER JOIN 關鍵字文法

SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注釋:INNER JOIN 與 JOIN 是相同的。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
        "Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
內串連(INNER JOIN)執行個體        現在,我們希望列出所有人的定購。
        您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
        INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。
SQL LEFT JOIN 關鍵字SQL LEFT JOIN 關鍵字        LEFT JOIN 關鍵字會從左表 (table_name1) 那裡返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
LEFT JOIN 關鍵字文法
SELECT column_name(s)FROM table_name1LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注釋:在某些資料庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
        "Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
左串連(LEFT JOIN)執行個體        現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。
        您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
        LEFT JOIN 關鍵字會從左表 (Persons) 那裡返回所有的行,即使在右表 (Orders) 中沒有匹配的行。
SQL RIGHT JOIN 關鍵字
SQL RIGHT JOIN 關鍵字        RIGHT JOIN 關鍵字會右表 (table_name2) 那裡返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。
RIGHT JOIN 關鍵字文法
SELECT column_name(s)FROM table_name1RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注釋:在某些資料庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
        "Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
右串連(RIGHT JOIN)執行個體        現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。
        您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsRIGHT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764
        RIGHT JOIN 關鍵字會從右表 (Orders) 那裡返回所有的行,即使在左表 (Persons) 中沒有匹配的行。
SQL FULL JOIN 關鍵字SQL FULL JOIN 關鍵字        只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。
FULL JOIN 關鍵字文法
SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
        注釋:在某些資料庫中, FULL JOIN 稱為 FULL OUTER JOIN。
        原始的表 (用在例子中的):
        "Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
        "Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
全串連(FULL JOIN)執行個體        現在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購它們的人。
        您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsFULL JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
        結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
    34764
        FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裡返回所有的行。如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行同樣會列出。
SQL UNION 和 UNION ALL 操作符SQL UNION 操作符        UNION 操作符用於合并兩個或多個 SELECT 語句的結果集。
        請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料類型。同時,每條 SELECT 語句中的列的順序必須相同。
SQL UNION 文法
SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2
        注釋:預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。
SQL UNION ALL 文法
SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2
        另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
        下面的例子中使用的原始表:
        Employees_China:
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming
        Employees_USA:
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill
使用 UNION 命令執行個體        列出所有在中國和美國的不同的僱員名:
SELECT E_Name FROM Employees_ChinaUNIONSELECT E_Name FROM Employees_USA
        結果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill
         注釋:這個命令無法列出在中國和美國的所有僱員。在上面的例子中,我們有兩個名字相同的僱員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。
UNION ALL        UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。
SQL Statement 1UNION ALLSQL Statement 2
        使用 UNION ALL 命令
執行個體:        列出在中國和美國的所有的僱員:
SELECT E_Name FROM Employees_ChinaUNION ALLSELECT E_Name FROM Employees_USA
        結果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill

SQL進階賦值查詢匯總

INSERT INTO 表B
SELECT a1,SUM(a4) FROM 表A GROUP BY a1
 
SQL 進階問題

declare @sql varchar(8000)
select @sql='select id,NAME,DAPTNAME,'
select @sql=@sql+'sum(case date when '''+date+''' then abs else 0 end) as '+date+',' from (select distinct date from 表B ) a
select @sql=substring(@sql,1,len(@sql)-1)+' into 實現功能表3 from 表a,表B where 表A.id=表B.id group by id,NAME,DAPTNAME'
exec (@sql)

---
以上,希望對你有所協助。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.