1、查询员工名中第三个字符为e,第五个字符为a的员工的姓名和工资
SELECT LAST_NAME,SALARY FROM EMPLOYEES LAST_NAME  LIKE '__e_a%';
2、员工名中第二个字符为下划线的员工名(此时,我们使用下划线作为模糊匹配条件和mysqk中的下划线就冲突了,需要进行转移)
select last_name from employees where last_name like '_\_%'

当然了,已不是说只能使用/来进行转移,我们还可以自己设置转义字符,使用ESCAPE关键字来指定转义字符;比如上面的sql还可以这样写,escape指定了我们使用$来当转义字符

select last_name from employees where  last_name like '_$_%' ESCAPE '$';
3、函数学习
3.1 单行函数
  • 字符函数
    length函数,用于查询字节个数,例如
select LENGTH('john') ##4
select LENGTH('张三丰hahahha') ##16中文根据字符集而定,utf8则一个汉字占三个字节,

concat函数,拼接字符

select CONCAT(last_name,'_',first_name) FROM employees;

upperlower函数,大小写转化

select UPPER('john')

substr或者substring函数,截取字符串

#一参:需要截取的字段名;
#二参:开始位置(从一开始);
#三参:截取的字符个数()
select SUBSTR('李莫愁爱上了路展元',7);
select SUBSTR('李莫愁爱上了路展元',1,3); #从一开始,截取三位

instr 函数:返回指定字符串在字段中的的第一次出现的位置,如果没有,则返回0

select INSTR('杨不悔爱上了殷六侠','殷六侠');

trim函数:去除字段两边的空格
注意,这个函数只能去除字段两边的空格

select TRIM('    张翠山   ')

另外一种:可以去除收尾指定的字符,例如,就可以将收尾的a去除

select TRIM('a' FROM 'aaaaaaaaaaa张翠擦汗你aaaaaaaaaaaaa');

lpad函数: 用指定的字符左填充指定的长度。
指定多少长度就是多少,超过了就会阶段,不够就会填充。

select LPAD('殷素素',10,'*') as a

Rpad函数:用指定的字符右填充指定的长度。
replace函数:替换(全部替换)

select REPLACE('周芷若喜欢张无忌','周芷若','赵敏')
  • 数学函数
    round函数:四舍五入
# 默认取整
select ROUND(3.6415);

select ROUND(-1.55);
# 指定保留多少位
select ROUND(3.1445 ,2);

ceil函数:向上取整,返回大于等于该参数的最小整数

# 向上取整,返回大于等于该参数的最小整数
select CEIL(1.001) # 返回2
select CEIL(1.0) # 返回1

floor函数:向下取整
truncate函数:截断,保留多少位数

select TRUNCATE(1.65,1) #返回1.6

mod函数:取余,

select MOD(10,2) # 返回0
select MOD(10,3) # 返回1
  • 日期函数
    **now()**函数:当前日期
select NOW() #返回:2020-06-26 14:52:49
select CURDATE() #返回:2020-06-26
select CURRENT_TIME() #返回:14:54:24
select YEAR(NOW()) #当前年份
select MONTH(NOW()) #当前月份
select MONTHNAME(NOW()) #当前月份(英文)
......以此类推

str_to_date:将日期格式的字符转换成指定格式的日期

select STR_TO_DATE('2020-6-26','%Y-%c-%d') as out_put; #返回:2020-06-26

另外,我们试试其他的字符串日期格式:
比如,java8中的localdatetime

System.out.println(LocalDateTime.now()); 输出: 2020-06-26T15:04:48.707
select STR_TO_DATE('2020-06-26T15:04:48.707','%Y-%c-%dT%H:%i:%s') as out_put; #返回:2020-06-26 15:04:48

date_format:将日期转换成字符

select DATE_FORMAT(NOW(),'%y年%m月% d日'); # 返回:20年06月26日
  • 其他函数
select VERSION(); #查看mysql版本号
select DATABASE(); #查看当前版本号
select USER();查看当前用户
。。。。。。
  • 流程控制函数
    if函数:
# 1 为true,返回2的值,为false,返回三的值
select IF(expr1,expr2,expr3)

select last_name,commission_pct,if(commission_pct is null ,'没奖金,呵呵','有奖金') as comm FROM employees

case函数
结构:

SELECT
	salary,
	CASE
		department_id 
		WHEN 30 THEN salary * 1.1 
		WHEN 40 THEN salary * 1.2
		ELSE salary
	END  as xingongzi 

FROM
	employees
3.2 分组函数

用作统计使用,又称聚合函数

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; # 个数,计算不为空(null)的个数

特点:

  • sum和avg一般用于处理数值型数据,忽略null值
  • max min count 可以处理任何类型