二 可以查询常量,表达式,函数
基础查询
SELECT 'tom';
SELECT 100*100;
SELECT VERSION();
3. 可以使用distinct关键字去重
SELECT DISTINCT department_id FROM employees;
4. select ‘Tom’ + null :只要有一方为null,结果为null
select ‘Tom’ + 90 :常量为0,再去做运算
5. SELECT CONCAT(last_name,first_name) AS '姓名' FROM employees; 可以使用concat关键字来连接字段
6. IFnull 函数,如果函数中的第一个字段为空,那么就将其替换为0,或者你指定的特定值
SELECT IFNULL(`commission_pct`,0) AS 奖金率, `commission_pct` FROM employees
进阶查询-条件查询
1. 条件运算符 < > = != >= <=
2. 逻辑运算符 and or not
① and:表示两个条件都满足
3. 模糊查询 like between and(包含临界值) in not null
select * from employees where last_name like '_\_%'
_是匹配单子字符,%匹配的是多个字符,如果需要匹配的字符中有_,要用转义符\
4. is null 而非 = null,=和!=不能用于判断null值,只能使用is null 或者 is not null
SELECT * FROM employees WHERE `commission_pct` IS NULL 查询奖金率为0的员工信息
进阶查询——排序查询
1. 查询员工信息按照工资进行排序
SELECT * FROM employees ORDER BY salary DESC
2. 查询部门编号大于90的员工信息,按照入职时间的先后顺序进行排序
SELECT * FROM employees WHERE department_id>90 ORDER BY hiredate DESC
3. 按照年薪排序显示员工的信息和年薪(表达式排序)
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC
Note:排序可以用表达式也可以用别名,都可以实现排序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY 年薪 DESC
4. 按照姓名的长度显示员工的姓名和工资(函数排序)
SELECT first_name,salary FROM employees ORDER BY LENGTH(first_name)
5. 先按照姓名长度排序,再按照工资进行排序(可以按照多个字段进行排序,并没有限制,用逗号隔开即可)
SELECT * FROM employees ORDER BY LENGTH(first_name),salary
6. order by子句一般是放在SQL语句的最后面,只有limit子句是放在order by子句后面的!
进阶查询——常见函数
字符 数学 日期 其他及流程控制函数
1. 字符函数(处理字符串),utf8编码的中文占3个字节,GBK编码的中文占2个字节(10):讲了10个,回去看下
① SELECT LENGTH('Teemo')
② SELECT CONCAT(first_name,'-',last_name) 姓名 FROM employees
③ upper() lower() - 将字符串改写为大写或者小写
SELECT UPPER(first_name) FROM employees
2. 数学函数
1. ROUND 四舍五入,如果是复数,先把绝对值四舍五入,然后加上符号
SELECT ROUND(1.65)
2. SELECT ROUND(3.1415925,3) 保留3位小数
3. ceil:向上取整,返回>=该参数的最小整数
SELECT CEIL(1.02)
4. FLOOR:向下取整,返回<=该参数的最大整数
5. truncate:截断,第二个参数为保留几位小数
SELECT TRUNCATE(2.3345,3)
6. MOD 取余
3. 日期函数
① now 返回当前的系统日期+时间
select now()
② curdate 返回当前系统日期,不包含时间
select curdate()
③ 返回当前系统时间,不包含日期
SELECT CURTIME();
④ 获取指定的部分 年 月 日 时 分 秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());
⑤ 将字符串通过指定的格式转换为日期 STR_TO_DATE
如-查询入职日期为1992-4-3的员工信息,前台一般用户输入一个4-3 1992 这样的不符合格式的日期,我们对应为日期,所以需要将其转为符合查询格式的日期
SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
⑥ DATE_FORMAT: 将日期转为合适格式的字符串
如-查询有奖金的员工姓名和 入职日期,要求日期格式为(XX月/XX日 XX年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') AS 入职日期 FROM employees WHERE commission_pct IS NOT NULL;
4. 流程控制函数
① if : if else的效果
SELECT IF(10>5,'大','小') 类似于三元运算符
② case函数(多用于等值判断)
如:查询员工的工资,要求
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 60 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;
③ 查询员工的工资情况,如果工资大于20000,A级别,如果工资大于15000,B级别,如果工资大于10000,C级别,否则,显示D级别
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>20000 THEN 'B'
WHEN salary>20000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees