字符串
1、CONCAT(S1,S2,...Sn) :字符串拼接,将S1
,
S2
,
... Sn
拼接成一个字符串】
2、LOWER(str) :将字符串str全部转为小写
3、UPPER(str) :将字符串str全部转为大写
4、LPAD(str,n,pad): 左填充,用字符串pad对
str
的左边进行填充,达到
n
个字符
串长度
5、RPAD(str,n,pad): 右填充,用字符串pad
对
str
的右边进行填充,达到
n
个字符
串长度
6、TRIM(str): 去掉字符串头部和尾部的空格
7、SUBSTRING(str,start,len): 返回从字符串str
从
start
位置起的
len
个长度的字符
数值函数
1、CEIL(x): 向上取整
2、FLOOR(x): 向下取整
3、MOD(x,y): 返回x/y
的模
4、RAND(): 返回0~1
内的随机数
5、ROUND(x,y): 求参数x
的四舍五入的值,保留
y
位小数
日期函数
1、CURDATE():返回当前日期
2、CURTIME():返回当前时间
3、NOW():返回当前日期和时间
4、YEAR(date):获取指定date
的年份
5、MONTH(date):获取指定date
的月份
6、DAY(date):获取指定date
的日期
7、DATE_ADD(date, INTERVAL expr type) : 返回一个日期/
时间值加上一个时间间隔
expr
后的时间值
例:
select
date_add(now(), INTERVAL
70
YEAR
); //基于现在的时间增加70年
8、DATEDIFF(date1,date2):返回起始时间date1
和 结束时间
date2
之间的天数
流程函数
1、IF(value , t , f) :如果value
为
true
,则返回
t
,否则返回 f
2、IFNULL(value1 , value2):如果value1
不为空,返回
value1
,否则返回value2
3、CASE WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END:如果val1
为
true
,返回
res1
,
...
否则返回default
默认值
4、CASE [ expr ] WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END:如果expr
的值等于
val
返回
res1
,
...
否则返回
default
默认值
演示如下:
if
select
if(
false
,
'Ok'
,
'Error'
);
ifnull
select
ifnull(
'Ok'
,
'Default'
);
select
ifnull(
''
,
'Default'
);
select
ifnull(
null
,
'Default'
);
case when then else end
需求
:
查询
emp
表的员工姓名和工作地址
(
北京
/
上海
---->
一线城市
,
其他
---->
二线城市
)
具体的
SQL
语句如下
:
select
name,
( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end ) as '工作地址'
from emp;
create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95
), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);
select
id,
name,
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )
'数学',
(case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格'
end ) '英语',
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格'
end ) '语文'
from score;
连接查询
内连接:
相当于查询A
、
B
交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
内连接
隐式内连接
SELECT
字段列表
FROM
表
1 ,
表
2
WHERE
条件
... ;
显示内连接
SELECT
字段列表
FROM
表
1 [ INNER ]
JOIN
表
2
ON
连接条件
... ;
外连接
左外连接
左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
SELECT
字段列表
FROM
表
1 LEFT [ OUTER ]
JOIN
表
2
ON
条件
... ;
右外连接
右外连接相当于查询表
2(
右表
)
的所有数据,当然也包含表
1
和表
2
交集部分的数据。
SELECT
字段列表
FROM
表
1 RIGHT [ OUTER ]
JOIN
表
2
ON
条件
... ;
案例
:
查询
emp
表的所有数据
,
和对应的部门信息,由于需求中提到,要查询emp
的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。
表结构
: emp, dept
连接条件
: emp.dept_id = dept.id
select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.*, d.name from emp e left join dept d on e.dept_id = d.id;
查询dept表的所有数据, 和对应的员工信息
select d.*, e.* from emp e right outer join dept d on e.dept_id = d.id;
select d.*, e.* from dept d left outer join emp e on e.dept_id = d.id;
自连接
自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接
的查询语法:
SELECT
字段列表
FROM
表
A
别名
A
JOIN
表
A
别名
B
ON
条件
... ;