目录
概念介绍
基本语法
查询结果处理
函数
字符函数
逻辑函数
数学函数
日期函数
分组函数
条件查询
使用where子句
运算符
模糊查询
联合查询
排序
数量限制
分组查询
DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据。
select 列名 from 表名;
特点:
1.查询列表可以是:表中的字段,常量,表达式,函数
2.查询的结果是一个虚拟的表(只读),不可以对查询出来的表进行数据操作
- 查询特定列:select column1,column2 from table
- 查询全部列:select * from table
- 查询时可用算数运算符:+-*/,但只可以用于算术不可以对字符串进行操作
- 排除重复列:select distinct column1,column2 from table 一般多用于多表查询中
- 查询函数:类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用
函数分类:
1.单行函数:如concat,length,ifnull等
2.分组函数:做统计使用,又称问统计函数,聚合函数,组函数。
length() |
获取参数值的个数,以字节为单位,中文占三个字符,英文占一个字符 |
char_length() | 获取参数的字符个数,以字符为单位 |
concat(s1,s2) | 字符串的拼接 |
upper()/lower() | 将字符转化为大写、小写 |
substring(s,pos,length) | 截取字符串,从s的pos位置开始截取length长度,在mysql中位置从1开始 |
instr(s,指定字符) | 返回字串第一次出现位置的索引,如果没有就返回0 |
trim(str) | 去点字符串前后的空格或者子串,trim(子串 from 字符串) |
lpad(str,length,指定字符) | 用指定字符实现左填充到指定长度 |
rpad(str,length,指定字符) | 用指定字符实现右填充到指定长度 |
replace(str,old,new) | 字符替换,将old替换成new |
strcmp(str1,str2) | 逐字符比较两个字符串的大小 |
1.
case when(条件2 then 结果1 else 条件2 then 结果2 end;可以有多个when
2.
ifnull(被检测值,默认值)函数检测是否值为null,如果是null,就返回默认值,否则返回原来的值
3.
if函数 if(条件,结果1,结果2) 如果满足if条件就返回结果1,否则返回结果2
abs(num) | 绝对值 |
round(数值) | 四舍五入 |
ceil(num) | 向上取整,返回比num大的最小整数 |
floor(num) | 向下取整,返回比num小的最大整数 |
truncate(数值,保留小数的位数) | 截断,小数点后截断到几位 |
format(数据,保留小数位数) | 会四舍五入 |
mod(被除数,除数) | 取余,被除数为正,则为正,被除数为负,则为负 |
rand(num[seed]) | 获取随机数,返回0-1之间的小数,如果加入随机数总数,返回的随机数将不变 |
truncate和format的对比:
TRUNCATE(X,D) 直接截取,不进行四舍五入
FORMAT(X,D) 会四舍五入,返回类型是字符串,因为满3位会加一个逗号
举例说明:
SELECT FORMAT(2687.6487,2), ROUND(2687.6487,2),TRUNCATE(2687.6487,2)
now() | 返回当前系统日期加时间 |
current_timestamp | 返回当前时间戳,与now()没有区别 |
curdate() | 返回当前日期,不包括时间 |
curtime() | 返回当前时间,不包括日期 |
YEAR(日期列),MONTH(日期列),DAY(日期列) | SELECT NAME,YEAR(birthday) FROM student WHERE YEAR(birthday)='2001' |
str_to_date | 将日期格式的字符转换成指定格式的日期 例:SELECT NAME,STR_TO_DATE(birthday,'%Y-%m-%d') FROM student |
date_format | 将日期转化为字符串 例:SELECT DATE_FORMAT(birthday,'%Y') FROM student |
datediff | 返回两个日期相差的天数 |
日期格式:
NOW、CURRENT_TIMESTAMP、SYSDATE的区别:
1.NOW和 CURRENT_TIMESTAMP他们都表示的是SQL开始执行时的系统时间
2.SYSDATE则表示执行此函数时的系统时间。
功能:用作统计使用,又称问聚合函数或统计函数或组函数
分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数 (非空)
1.sum,avg一般用于处理数值型max,min,count可以处理任何类型
2.以上分组函数都忽略null值
3.count函数的一般使用count(*)用作统计行数,count不会统计null值,count(*)全部统计
4.和分组函数一同查询的字段要求是group by后的字段
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法:select column from table where 条件
=, != 或<>, >, =, <= 或逻辑运算符 and or not
例:SELECT * FROM student WHERE NAME LIKE '张%' -- 查询张姓
SELECT * FROM student WHERE height IN(1.75,1.80) -- 查询身高是1.75或1.80
union all 将两个查询的结果进行合并,不会去重
union 和union all 语法一致但会去重
[SQL 语句 1]
UNION
[SQL 语句 2]
查询结果排序,使用 ORDER BY 子句排序
order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序 order by子句中可以支持单个字段、多个字段。
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置),常用于分页查询。
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5 从第0个位置开始,查询5个数据
语法:
select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[having 分组后的筛选]
[order by 子句]
注意:查询列表比较特殊,要求是分组函数和group by后出现的字段 分组查询中的筛选条件分为两类
数据源 | 源位置 | 关键字 | |
分组前筛选 | 原始表 | group by子句的前面 | where |
分组后筛选 | 分组后的结果集 | group by子句的后面 | having |