1.order
按升降序排序
SELECT * FROM employees
ORDER BY salary ASC/DESC; #asc代表升序 desc代表降序 默认升序
按表达式排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE department_id>=90
ORDER BY salary*12*(1+IFNULL(commission_pct,0);
#ORDER BY 年薪 DESC;#按别名排序
SELECT LENGTH (last_name) 字节长度,last_name,salary
FROM employees
ORDER BY LENGTH(last_name) DESC;#按函数排序
按多个字段排序
SELECT * FROM employees
ORDER BY salary ,employee_id DESC;
2.模糊查询
通配符
%任意多个字符 _任意单个字符
SELECT * FROM employees
WHERE last_name LIKE '%a%';
SELECT last_name 姓,salary FROM employees
WHERE last_name LIKE '__s_i%';
SELECT last_name 姓,salary FROM employees
WHERE last_name LIKE '_\_%'; // \是转义字符
SELECT last_name 姓,salary FROM employees
WHERE last_name LIKE '_(_%' ESCAPE '('; //escape表转义
#between and
#不能颠倒顺序 等价于 大于等于1000 小于等于3000 提高简洁度
SELECT * FROM employees
WHERE salary BETWEEN 1000 AND 3000;
#IN 表示 或 简洁
SELECT * FROM employees
WHERE job_id IN('IT_PROG','AD_VP','AD_PRES')
#is null/IS NOT NULL 判断是否是null
SELECT last_name ,commission_pct 奖金率 FROM employees
WHERE commission_pct IS NOT NULL;
分组函数
SELECT SUM(salary) 求和,AVG(salary) 平均值,MAX(salary) 最大值,MIN(salary) 最小值,COUNT(salary) 个数
FROM employees;
# 建议使用 count(*)
SELECT COUNT(DISTINCT salary),COUNT(salary) ,
SUM(DISTINCT salary),SUM(salary) FROM employees;//distinct去重
分组前筛选 在原表筛选where 能用where优先用where
3.分组查询 group by
#每个工种最高薪
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;
#每个位置部门个数
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;
#有筛选条件 邮箱含a的 部门平均工资
SELECT AVG(salary) ,department_id,email
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;
#分组后筛选 (having)部门员工个数>2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 2;