GROUP BY
GROUP BY語法可以根據給定數據列的每個成員對查詢結果進行分組統計,最終得到一個分組匯總表。在GROUP BY子句后面包含了一個HAVING子句,HAVING類似于WHERE,(唯一的差別是WHERE過濾行,HAVING過濾組)。
1)列出每個部門最高薪水的結果
select dept , max(salary) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
2)where, group by查詢公司2010年入職的各個部門每個級別里的最高薪水
SELECT dept,edlevel,MAX(salary) AS MAXIMUM
FROM STAFF
WHERE hiredate > '2010-01-01'
GROUP BY dept,edlevel
3)where, group by, having查找雇員數超過2個的部門的最高和最低薪水:
SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
IF
if函數也能通過判斷條件來返回特定值,當表達式結果對時,返回result_true,否則返回result_false。語法結構是:
if (表達式,result_true, result_false)
IFNULL
IFNULL() 函數用于判斷第一個表達式是否為 NULL,如果為 NULL 則返回第二個參數的值,如果不為 NULL 則返回第一個參數的值。
IFNULL(expression, alt_value)
INSERT INTO
向指定的表中,插入如下幾列數據,列的值通過value 指定
方法1
INSERT INTO?? 表名? (列一 , 列二? ...) VALUE (值一 , 值二 ...)
方法2
INSERT INTO 表名 SET? 字段1 = 值1,字段1 = 值1,字段1 = 值1;
JOIN
JOIN用于連表查詢,主要有5種用法:
1)笛卡爾積:CROSS JOIN
使兩張表的所有字段直接進行笛卡爾積,假設表1有m條數據,表2有n條數據,則結果數量為m*n條
SELECT * FROM tab1 CROSS JOIN tab2
2)內連接:INNER JOIN
內連接需要用ON來指定兩張表需要比較的字段,最終結果只顯示滿足條件的數據
SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id1 = tab2.id2
3)左連接:LEFT JOIN
左連接可以看做在內連接的基礎上,把左表中不滿足ON條件的數據也顯示出來,但結果中的右表部分中的數據為NULL
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2
4)右連接:RIGHT JOIN
右連接就是與左連接完全相反
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2
5)全連接:OUTER JOIN
全連接就是左連接和右連接的并集,但是MySQL中并不支持全連接的寫法:
SELECT * FROM tab1 OUTER JOIN tab2 ON tab1.id1 = tab2.id2
不過MySQL可以用UNION聯合左連接和右連接的結果來代替:
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2
UNION
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2