3.关键字排序(order的升序和降序)、模糊查询、分组


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;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM