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