mysql(DQL-基础查询)

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  

猜你喜欢

转载自blog.csdn.net/ZJ_1011487813/article/details/112992477
今日推荐