首页 > 技术文章 > mysql 复习

mcc61 2020-04-22 21:33 原文

mysql特点
/*
1.查询列表可以是: 表中的字段, 常量值, 表达式, 函数
2.查询得结果是一个虚拟的表格
*/

# 查询单个字段
select last_name from employees;

# 查询多个字段
select last_name, first_name, email from employees;

# select * from employees;

`` 用于区分当前查询的是字段还是关键字

# 查询常量值
select 100;
select 'john';

# 表达式
select 100%98;

# 查询函数
select version();

# 起别名
select verison() as version; # 方式一
select version() version; # 方式二

# 特殊情况
select salary `out put` from employees;
select salary "out put" from employees; # 推荐

# 去重
distinct
selelct distinct name from employees;

# +号的作用 运算符
/*
mysql中的+号只有一个作用
运算符
如果两个操作数都是数值型, 则做加法运算
其中一方为字符型, 试图将字符型数值装换成数值型, 如果转换成功, 继续做加法运算
如果失败, 将字符转换成0, 接着做加法运算
只要一方为null, 结果就是null

*/
select
last_name + first_name
as 姓名
from employees; 不对

select 100+90;


# concat;

1.条件运算符
> < >= <= != <>

2.逻辑运算符
连接条件表达式
&& || !
and 和 && : 两个都是true, true,false
|| or

3.模糊查询
like
between and
in
is null

4.安全等于 <=>
select name froom employees where id <=> null;

5、SUBSTR
# 两个参数是解取自当前位置之后的所有字符 select substr("i am a best man", 5);
# 三个参数是解取自当前位置开始的字符, 长度是第三位置 select substr("i am a best man", 5, 6);

6、instr
# 拿到当前字符串返回的位置 select instr("i am a perfect woman", "p");

7、upper, lower

8、trim # 去除空余的字符
select length(trim(" i am woman ")); ltrim, rtrim, trim
select trim('*' from '*************i am woman***********'); rtrim,ltrim 不可以

9、lpad(字符, 指定长度, 填充字符) 中间的数字指的是填充成多长的字符
select lpad("i am", 2, "**");
rpad

10.replace select replace("周杰伦爱昆凌", "爱", "无可救药的爱");


二、数学函数
1、round() 四舍五入 select round(-4.2); -4
select round(2.345, 10); 小数点后面取几位
2、ceil 向上取整,大于等于该参数的最小整数
select ceil(2.1);
3、floor 向下取整
select floor(-2.9); -3
select floor(3.09); 3

4、truncate 截断
select truncate(1.65,4);
和round的区别是round会四舍五入,他只是截断

5、mod 取余
mod(a,b) a-a/b*b
select mod(10,3); 被除数如果是正数, 就是正数, 被除数是负数, 就是负数

三、日期函数

1、now() 返回当前系统日期+时间;
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2020-04-21 20:56:26 |
+---------------------+
2、只返回日期, 不包含时间
curdate
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2020-04-21 |
3、返回当前时间, 不包含日期
curtime()
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 20:58:45 |
+-----------+
4、可以获取指定的部分,年,月,日,小时,分钟,秒
mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
| 2020 |
+-------------+
1 row in set (0.00 sec)

mysql> select year("1994-01-27");
+--------------------+
| year("1994-01-27") |
+--------------------+
| 1994 |

select monthname(now()); apari
select dayname(now()); thuesday

5、日期函数
str_to_date:将日期格式的字符转换程指定格式的日期

mysql> select str_to_date("01-23-2020", "%m-%d-%Y");
+---------------------------------------+
| str_to_date("01-23-2020", "%m-%d-%Y") |
+---------------------------------------+
| 2020-01-23 |
+---------------------------------------+

date_format(); 将日期转换成字符

mysql> select date_format(now(), "%Y_%m-%d");
+--------------------------------+
| date_format(now(), "%Y_%m-%d") |
+--------------------------------+
| 2020_04-21 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2020-04-21 21:08:19 |
+---------------------+
1 row in set (0.00 sec)


四、其他函数
select version();
select database();
select user();

五、流程控制函数
if 函数 ; if else
mysql> select if(10>5, "true", "false");
+---------------------------+
| if(10>5, "true", "false") |
+---------------------------+
| true |
+---------------------------+
1 row in set (0.00 sec)

mysql> select if(10<5, "true", "false");
+---------------------------+
| if(10<5, "true", "false") |
+---------------------------+
| false |
+---------------------------+

case ...when 适用于等于的情况
使用一:switch case效果
switch (变量或者表达式) {
case 常量1:语句1;break
...
default;语句n;break
}
mysql中
case 要判断的字段或表达式
when 常量1 then 要显示的值1/语句1
when 常量2 then 要显示的值2/语句2
...
else 要显示的值n或者语句n;
end

使用二 适用于不等于的情况
case
when 条件1 then 要显示的值或者语句1
when 条件2 then 要显示的值2或者语句2
...
else 要显示的值n或者语句n
end


常见函数总结
字符函数
1.length
2.concat
3.substr
3.instr
4.trim
5.upper
6.lower
7.lpad
8.rpad
9.replace
数学函数
1.round
2.truncate
3.floor
4.ceil
5.mod
日期函数
1.now
2.curdate
3.curtime
4.year
5.month
6.monthname
7.day
8.hour
9.minute
10.second
11.str_to_date
12.date_format

其他函数
1.version
2.user
3.database

控制函数
1.if
2.case ...when

count() 详细介绍
select count(salary) from employees;
select count(1) from employees;
select count(*) from employees;

效率:
MYISAM ocunt(*)
INNODB 存储引擎下, count(*) 和count(1) 差不多, 比count(字段) 高

# 和分组函数一同查询的字段有限制
select avg(salary), last_name from employees; # 不可以
**一同使用的字段要求是group by 后的字段

datediff() 函数, 接受两个参数, 都是日期, 返回的是这两个日期相差的天数


# 分组查询 group by
按照表达式或者函数分组
select count(*)
from employees
group by length(last_name);
按照多个字段分组

连表查询
内连接 sql92全部支持
等值连接
非等值连接
select
salary,
grade_level
from
employees e,
job_grade j
where
e.salary
between j.lowest_sal and j.highest_sal
自连接
同一张表含有多个可以连接在一起的字段
select
e.last_name,
e.employid,
m.last_name,
m.employid
from
employees e,
employees m
where
e.employid = m.id



外连接
交叉连接

推荐阅读