mysql(DQL-基础查询)
DQL(Data QueryLanguage)数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据。
1.语法:
select 查询列表 from 表名;
2.特点:
(1)查询列表可以是:表中的字段、常量、表达式、函数
(2)查询的结果是一个虚拟的表格
3.查询结果处理:
(1) 查询常量值 SELECT 100;
(2) 查询表达式:select 100*98;
(3)查询函数:select 函数; / 例如version()
(4) 特定列查询:select column1,column2 from table
(5)全部列查询: select * from table
(6)排除重复行: select distinct column1,column2 from table
(7)算数运算符:+ - * /
(8)函数:
类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用
(1)好处:
i.1 隐藏了实现细节 now()
i.2提高代码的重用性
i.3 调用:select 函数名(实参列表) [from 表];
(2)分类:
i.1单行函数:如concat、length、ifnull等
i.2分组函数:做统计使用,又称为统计函数、聚合函数、组函数
单行函数
(1)字符函数
length():获取参数值的字节个数
char_length()获取参数值的字符个数
concat(str1,str2,…):拼接字符串
upper()/lower():将字符串变成大写/小写
substring(str,pos,length):截取字符串 位置从1开始
instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
replace(str,old,new):替换,替换所有的子串
-- 单行函数:会对每一行的记录进行操作
SELECT LENGTH(stu_name)FROM t_student
-- CHAR LENGTH(stu_name) 字符为单位
SELECT CHAR_LENGTH(stu_name) FROM t_student -- 获取参数值的字符个数
SELECT LENGTH(stu_name) FROM t_student -- 获取参数值的字节个数
SELECT CONCAT(stu_name,':',stu_phone) FROM t_student -- 拼接字符串
SELECT UPPER( stu_name) FROM t_student -- 将字符串变成大写/小写
SELECT LOWER( stu_name) FROM t_student -- 将字符串变成大写/小写
SELECT SUBSTRING(stu_name,1,2) FROM t_student -- 截取字符串 位置从1开始
SELECT INSTR(stu_name,'涛') FROM t_student -- 返回子串第一次出现的索引,如果找不到返回0
SELECT TRIM(stu_name) FROM t_student -- 去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT LPAD(stu_name,1,'abd') FROM t_student -- 用指定的字符实现左填充将str填充为指定长度
SELECT RPAD(stu_name,1,'123') FROM t_student -- 用指定的字符实现右填充将str填充为指定长度
SELECT REPLACE(stu_name,'涛','华') FROM t_student -- 替换,替换所有的子串
(2)数学函数
round(数值):四舍五入
ceil(数值):向上取整,返回>=该参数的最小整数
floor(数值):向下取整,返回<=该参数的最大整数
truncate(数值,保留小数的位数):截断,小数点后截断到几位
mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
rand():获取随机数,返回0-1之间的小数
(3)日期函数
now():返回当前系统日期+时间
curdate():返回当前系统日期,不包含时间
curtime():返回当前时间,不包含日期
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR(日期),MONTH(日期),DAY(日期) ,HOUR(日期) ,MINUTE(日期) SECOND(日期)
str_to_date:将日期格式的字符转换成指定格式的日期
date_format:将日期转换成字符串
datediff(big,small):返回两个日期相差的天数
日期格式
%Y | 年,4 位 |
%m | 月,数值(00-12) |
%d | 月的天,数值(00-31) |
%H | 小时 (00-23) |
%i | 分钟,数值(00-59) |
%s | 秒(00-59) |
%f | 微秒 |
%T | 时间, 24-小时 (hh:mm:ss) |
%j | 年的天 (001-366) |
%w | 周的天 (0=星期日, 6=星期六) |
(4)分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数(非空)
(1).sum,avg一般用于处理数值型max,min,count可以处理任何类型
(2).以上分组函数都忽略null值
(3).可以和distinct搭配实现去重的运算
(4).count函数的一般使用count(*)用作统计行数 * 所有列,遇到一个为空的列,重新找不为空的进行统计
(5.)和分组函数一同查询的字段要求是group by后的字段
-- 统计函数,组函数,聚合函数
-- sum 求和、avg 平均值、max 最大值、min 最小值、count 计数(非空)
SELECT SUM(stu_score) FROM t_student
SELECT MIN(stu_score) FROM t_student
SELECT MAX(stu_score) FROM t_student
SELECT AVG(stu_score) FROM t_student
-- 列的值如果为null不会被统计, 一般使用主键或者* *所有列,遇到一个为空的列,重新找不为空的进行统计
SELECT COUNT(stu_sex) FROM t_student
-- 分组查询 分组 会将相同内容分到同一个组 例如使用性别分组
-- 男 2
-- 女 2
-- select 结果 from 表 gronp by 分组列
-- 统计男生女生各有多少人
SELECT stu_sex,COUNT(*) FROM t_student GROUP BY stu_sex
SELECT stu_sex,MAX(stu_score) FROM t_student GROUP BY stu_sex
-- 添加查询条件
SELECT stu_sex,COUNT(*) c
FROM t_student
WHERE stu_score>0 -- 在分组前对数据进行筛选过滤
GROUP BY stu_sex
ORDER BY c DESC -- 对分组后的结果进行排序
LIMIT 1
-- 查询性别人数大于2的 是哪个性别 对分组后的结果进行筛选过滤
SELECT stu_sex,COUNT(*) c
FROM t_student
WHERE stu_score>0
GROUP BY stu_sex
HAVING c>=2 -- 对分组后的结果进行条件过滤
ORDER BY c DESC