mysql關鍵字講解(join 、order by、group by、having、distinct)

一、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

相關文章
相關標籤/搜索