1、join
1.1 OUTER JOIN:想要包含右側表中的所有行,以及左側表中有匹配記錄的行。
1.11 Mysql中有左連接(left join):
SELECT * FROM a LEFT JOIN b ON a.aID =b.bID
left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為准的.
1.12 右連接(right join):
SELECT * FROM a RIGHT JOING b ON a.aID = b.bID
和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充
1.2 內連接(inner join或者cross join):
SELECT * FROM a,b WHERE a.aID = b.bID
只返回進行聯接的字段上匹配的記錄。INNER JOIN是在做排除。
自引用是為了某種原因把一個表聯接回它自身。
INNER JOIN是默認的聯接方式。
1.3 FULL JOIN :要包含位於聯接兩側的表中所有的行。
1.4 CROSS JOIN:沒有ON聯接符,並且將join一側表中的每一條記錄與另一側的表中所有的記錄聯接起來。即聯接表中的笛卡爾積。
CROSS JOIN可用於提供樣本數據和科學數據
2. ORDER BY
查詢的返回結果通常是以字母或者數字順序方式給出,這是偶然的。以何種方式給出,在沒有指定的情況下,通常取決於SQLServer認為哪一種匯集數據的方式開銷最小。因此,返回的結果通常是基於表中數據的物理順序或者SQLServer用來找尋數據所使用的某個索引。
默認是升序ASC,降序是DESC。
如果對順序有要求,建議在SQL語句中顯式標明。
ORDER BY 子句可以基於查詢中使用的任何表中的任何字段來進行排序,無論該列是否包含在SELECT列表中。
3. GROUP BY
一旦在查詢語句中使用了GROUP BY,SELECT列表中的每一列要么包含在GROUP BY列表中,要不包含在聚集中。
當聚集不與GROUP BY一起使用時,聚集只能與其他聚集一起位於SELECT列表中,而不能與列名搭配出現在SELECT列表中。
除了COUNT(*) 之外,任何聚集函數都會忽略NULL值。
SELECT * , count( id ) FROM `organisms` WHERE 1 GROUP BY user_id
4. HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。
僅當查詢語句中有GROUP BY子句時使用HAVING子句。
WHERE子句應用到形成組的每一行上,HAVING子句應用到組的聚集上。
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area)>1000000
5. DISTINCT
DISTINCT消除重復數據。如果值是相同的,則該值出現一次。
DISTINCT出現在列表的開始處,或者出現在COUNT中。