格式: SELECT (查询列表) FROM (表名)
例:
方式一:使用AS
方式二:使用空格
例:
SELECT salary AS “out put” FROM employees; (别名有特殊字符使用单引号或者双引号引起来)
SELECT DISTINCT department_id
FROM employees;
(使用DISTINCT去重)
SELECT CONCAT(e.last_name,e.first_name) “name”
FROM employees e;
DESC employees;
语法:
SELECT 查询列表
FROM 表名
WHERE 筛选条件 ;
分类:
例:
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_a%b';
统配符 :
转义符:
SELECT 查询列表
FROM 表
[ WHERE 筛选条件 ]
ORDER BY 排序列表 [ asc | desc ] #asc:升序 desc:降序 默认升序
分类:
SELECT LENGTH('john');
SELECT LENGTH('张三丰hahaha');
查看客户端使用的字符集:
SHOW VARIABLES LIKE ‘%char%’
SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
SELECT UPPER('john');
SELECT LOWER('joHn');
#示例:将姓变大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
注意:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元', 7 ) out_put;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元' , 1 , 3 ) out_put;
#案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put
FROM employees;
SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;
SELECT LENGTH(TRIM(' 张翠山 ')) AS out_put;
SELECT TRIM('aa' FROM 'aaa张aaaaaaaaaaaa翠山aaaaaaaaaaaa') AS out_put;
SELECT LPAD('殷素素',2,'*') AS out_put;
SELECT RPAD('殷素素',12,'ab') AS out_put;
SELECT REPLACE('周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;
###数学函数
SELECT ROUND(-1.55);
SELECT ROUND(1.567,2); #保留2位
SELECT CEIL(-1.02); # -1
SELECT FLOOR(-9.99); # 10
SELECT TRUNCATE(1.69999,1); #小数点后保留1位
SELECT MOD(10,-3);
SELECT 10%3;
SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();
SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;
序号 | 格式符 | 功能 |
---|---|---|
1 | %Y | 四位的年份 |
2 | %y | 两位的年份 |
3 | %m | 月份(01,02,03,04…12) |
4 | %c | 月份(1,2,3,4…12) |
5 | %H | 小时(24小时制) |
6 | %h | 小时(12小时制) |
7 | %i | 分钟(00,01…59) |
8 | %s | 秒(00,01,59) |
查询入职日期为1992-4-3的员工信息
SELECT * FROM employees WHERE hiredate = ‘1992-4-3’;
SELECT * FROM employees WHERE hiredate = STR_TO_DATE(‘4-3 1992’,’%c-%d %Y’);
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,’%m月/%d日 %y年’) 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;
SELECT DATEDIFF ('2019-4-30','2019-2-8');
SELECT IF(10<5,'大','小');
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
#1、简单 的使用
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;
#2、和distinct搭配
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;
语法:
SELECT 分组函数,列(要求是GROUP BY 中的列)
FROM 表
[ WHERE 筛选条件 ]
GROUP BY 分组列表
[ ORDER BY 子句 ]
特点:
针对的表 | 位置 | 连接的关键字 | |
---|---|---|---|
分组前筛选 | 原始表 | group by前 | where |
分组后筛选 | group by后的结果集 | group by后 | having |
案例:查询哪个部门的员工个数>5
# 1查询每个部门的员工个数
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id;
# 2筛选刚才1结果
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>5;
案例:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
SELECT count(*)
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*) >5;
案例:查询每个工种每个部门的最低工资,并按最低工资降序
SELECT MIN(salary),job_id,department_id
FROM employees
GROUP BY department_id,job_id
ORDER BY MIN(salary) DESC;
案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序
SELECT job_id,MAX(salary) m
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING m>6000
ORDER BY m ;