MySQL数据库SQL语句(一)
- 一、MySQL高级SQL语句
- 1. 显示表格中的内容
- 2. 条件查询语句
- 2.1 where
- 2.2 and、or
- 2.3 in
- 2.4 between
- 2.5 通配符、like
- 2.6 order by
- 二、函数
- 1. 数学函数
- 2. 聚合函数
- 3. 字符串函数
- 4. group by
- 5. having
- 6. 别名
- 7. 子查询:连接表
- 8. exists:判断语句
一、MySQL高级SQL语句
1. 显示表格中的内容
select 字段1,字段2,.../* from 表名;
select distinct 字段1,字段2,.../* from 表名; 不显示重复部分
2. 条件查询语句
2.1 where
select 字段1,字段2,.../* from 表名 where 字段=...
select name,price from list where id=5;
2.2 and、or
用来连接两个条件表达式
select 字段1,字段2,... from 表名 where 条件表达式1 and (条件表达式2);
select id,name from list where price>=2000 and (price<=4000);
2.3 in
select 字段1,字段2,... from 表名 where 字段 in (数值1,数值2,...);
select id,name from list where price in (2000,5000);
2.4 between
select 字段1,字段2,... from 表名 where 字段 between 数值1 and 数值2;
select id,name from list where price between 3000 and 5000;
2.5 通配符、like
- %:百分号表示零个、一个或多个字符
- _:下划线表示单个字符
- like:用于匹配模式来查找资料
select 字段1,字段2,... from 表名 where 字段 like '模式';
select id,name from list where price like '40%';
2.6 order by
按关键字排序
select 字段1,字段2,... from 表名 [where 条件表达式] order by 字段 [asc/desc]
二、函数
1. 数学函数
函数 | 作用 |
abs(x) | 返回 x 的绝对值 |
rand() | 返回 0 到 1 的随机数 |
mod(x,y) | 返回 x 除以 y 以后的余数 |
power(x,y) | 返回 x 的 y 次方 |
round(x) | 返回离 x 最近的整数 |
round(x,y) | 保留 x 的 y 位小数四舍五入后的值 |
sqrt(x) | 返回 x 的平方根 |
truncate(x,y) | 返回数字 x 截断为 y 位小数的值 |
ceil(x) | 返回大于或等于 x 的最小整数 |
floor(x) | 返回小于或等于 x 的最大整数 |
greatest(x1,x2…) | 返回集合中最大的值 |
least(x1,x2…) | 返回集合中最小的值 |
select abs(-2),rand(),mod(5,2),power(3,2),round(1.78);
2. 聚合函数
函数 | 作用 |
avg() | 返回指定列的平均值 |
count() | 返回指定列中非 NULL 值的个数 |
min() | 返回指定列的最小值 |
max() | 返回指定列的最大值 |
sum(x) | 返回指定列的所有值之和 |
select avg(字段) from 表名;
select avg(price) from list;
select count(字段) from 表名;
select count(price) from list;
select count(distinct 字段) from 表名; 去重后统计指定列非NULL值的个数
select min(字段) from 表名;
select min(price) from list;
select max(字段) from 表名;
select max(price) from list;
select sum(字段) from 表名;
select sum(price) from list;
3. 字符串函数
函数 | 作用 |
trim() | 返回去除指定格式的值 |
concat(x,y) | 将提供的参数 x 和 y 拼接成一个字符串 |
substr(x,y) | 获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同 |
substr(x,y,z) | 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串 |
length(x) | 返回字符串 x 的长度 |
replace(x,y,z) | 将字符串 z 替代字符串 x 中的字符串 y |
upper(x) | 将字符串 x 的所有字母变成大写字母 |
lower(x) | 将字符串 x 的所有字母变成小写字母 |
left(x,y) | 返回字符串 x 的前 y 个字符 |
right(x,y) | 返回字符串 x 的后 y 个字符 |
repeat(x,y) | 将字符串 x 重复 y 次 |
space(x) | 返回 x 个空格 |
strcmp(x,y) | 比较 x 和 y,返回的值可以为-1,0,1 |
reverse(x) | 将字符串 x 反转 |
- trim() 返回去除指定格式的值
select trim(位置 '字符' from '字段');
位置可以是开头(leading),结尾(trailing),both(开头或结尾)
- concat(x,y) 将提供的参数 x 和 y 拼接成一个字符串
select concat(字段1,字段2) from 表名;
select concat(id,name) from list;
select 字段1 || ' ' || 字段2 from 表名 [where 条件表达式];
select id || ' ' || name from list where price=3000;
- substr(x,y) 获取从字符串 x 中的第 y 个位置开始的字符串
- substr(x,y,z) 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
select substr(字段,数字) from 表名 [where 条件表达式];
select substr(字段,数字1,数字2) from 表名 [where 条件表达式];
select substr(price,3) from list where id=4;
select substr(price,1,2) from list;
- length(x) 返回字符串 x 的长度
select length(字段) from 表名;
select length(price) from list;
- replace(x,y,z) 将字符串 z 替代字符串 x 中的字符串 y
select replace(price,'0','1') from list;
- upper(x) 将字符串 x 的所有字母变成大写字母
- lower(x) 将字符串 x 的所有字母变成小写字母
select upper(字段) from 表名;
select lower(字段) from 表名;
select upper(name) from list;
- left(x,y) 返回字符串 x 的前 y 个字符
- right(x,y) 返回字符串 x 的后 y 个字符
select left(字段,数字) from 表名;
select right(字段,数字) from 表名;
select left(price,3) from list;
select right(price,3) from list;
- repeat(x,y) 将字符串 x 重复 y 次
select repeat(字段,数字) from 表名;
select repeat(name,2) from list;
select repeat(数字,n): 显示数字n次
- space(x) 返回 x 个空格
- strcmp(x,y) 比较 x 和 y,返回的值可以为-1,0,1
select strcmp(数字1,数字2);
- reverse(x) 将字符串 x 反转
select reverse(数字);
4. group by
select 字段1,sum(字段2) from 表名 group by 字段1;
select id,sum(price) from list group by id;
select id,sum(price) from list group by id order by sum(price);
5. having
常与group by结合使用,进一步筛选内容
select 字段1,sum(字段2) from 表名 group by 字段1 having sum(字段2);
select id,sum(price) from list group by id having sum(price) > 3000;
6. 别名
select 表别名.字段1 "字段1别名",sum(表别名.字段2) "字段2别名" from 表名 表别名 group by 字段1别名;
select A.id "ID",sum(A.price) "P" from list A group by ID;
7. 子查询:连接表
连接表格,在where子句或having子句中插入另一个SQL 语句
注:在一个表中根据条件得出一个参数值,同时这个参数值在另一个表中也有,此时将第一个表中得到的参数值所在的字段进行相应操作
- 可以是符号的运算符:=、>、<、>=、<=
- 也可以是文字的运算符:like、in、between
select sum(求和字段) from 表名1 where 字段1 in (select 字段1 from where 字段2条件);
select sum(price) from list where id in (select id from list1 where status='ok');
分解:
select id from list1 where status='ok';
select sum(price) from list where id in ('a','c');
显示表1中与表2相同字段相同值的行
select * from 表1名 表1别名 where 表1名.字段 in (select 字段 表2别名 where 表2别名.字段 = 表1别名.字段);
select * from list a where a.id in (select id from list1 b where b.id = a.id);
8. exists:判断语句
select '操作' from 表名 where exists ('判断语句');
若判断语句成立,则执行操作,否则输出NULL值
select sum(price) from list where exists (select id from list1 where id='a');