一、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中。sql