数据库的查询操作(DQL的知识点总结)

DQL(Data Query Language)

数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据**

基本查询语法: select 查询列表 from 表名
特点:
查询列表可以是:表中的字段、常量、表达式、函数 查询的结果是一个虚拟的表格

查询结果处理: 查询常量值 SELECT 100;

查询表达式:select 100*98;

查询函数:select 函数;

例如version()

特定列查询:select column1,column2 from table

全部列查询: select * from table

排除重复行: select distinct column1,column2 from table

查询结果处理:

函数

类似于java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用

好处: 隐藏了实现细节 提高代码的重用性 调用:select 函数名(实参列表) [from 表];

● 分类:

单行函数:如concat、length、ifnull等

分组函数:做统计使用,又称为统计函数、聚合函数、组函数

单行函数中的字符串函数

length():获取参数值的字节个数

SELECT id,LENGTH(NAME)FROM t_student

char_length()获取参数值的字符个数concat(str1,str2,…),concat(str1,str2,…)负责将前后字符串进行拼接:

SELECT id,CHAR_LENGTH(NAME) FROM t_student

SELECT CONCAT(NAME,sex)NAME FROM t_student

拼接字符串upper()/lower():将字符串变成大写/小写substring(str,pos,length):pos代表从第几位开始截取,length代表截取几个长度的字节(这次字符串是开始从1开始计数的哦)

SELECT UPPER(NAME)FROM t_student
SELECT LOWER(NAME)FROM t_student

截取字符串 位置从1开始instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0 trim(str):

SELECT INSTR (NAME,'i')FROM t_student

去掉字符串前后的空格或子串,trim(指定子串 from 字符串)lpad(str,length,填充字符):

SELECT id,CHAR_LENGTH(TRIM(NAME))FROM t_student
SELECT id,TRIM('b'FROM NAME)FROM t_student

– 用指定字符进行左/右填充

SELECT LPAD(NAME,5,'c')FROM t_student
SELECT RPAD(NAME,5,'a')FROM t_student

用指定的字符实现右填充将str填充为指定长度replace(str,old,new):替换,替换所有的子串

SELECT REPLACE(NAME,'jim','tom')FROM t_student

逻辑处理:

case when 条件 then 结果1 else 结果2 end;

SELECT
  id,
  NAME ,(
    CASE
      WHEN height >= 160
      THEN '正常身高'
      WHEN height < 160
      AND height > 120
      THEN '偏低'
      ELSE '太低'
    END
  )
FROM
  t_student

可以有多个when if null(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值

if函数:if else的效果 if(条件,结果1,结果2)

SELECT IF(height>175,'高个','低个')FROM t_student

数学函数

round(数值):四舍五入ceil(数值):向上取整,返回>=该参数的最小整数

SELECT ROUND(10.2222) -- 返回11

floor(数值):向下取整,返回<=该参数的最大整数

SELECT FLOOR(2.1)  -- 返回2

truncate(数值,保留小数的位数):截断,小数点后截断到几位

SELECT TRUNCATE(1.111,2)   --返回1.11

mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

rand():获取随机数,返回0-1之间的小数

日期函数now():

SELECT id,NAME,NOW()FROM t_student

返回当前系统日期+时间curdate():

SELECT id,NAME,CURDATE()FROM t_student

返回当前系统日期,不包含时间curtime():

SELECT id,NAME,CURTIME()FROM t_student

返回当前时间,不包含日期 可以获取指定的部分,年、月、日、小时、分钟、秒 YEAR(日期),MONTH(日期),DAY(日期) ,HOUR(日期) ,MINUTE(日期) SECOND(日期

SELECT id,NAME,YEAR(reg_time)FROM t_student
SELECT id,NAME,MONTH(reg_time)FROM t_student
SELECT id,NAME,DAY(reg_time)FROM t_student

str_to_date:将日期格式的字符转换成指定格式的日期

SELECT STR_TO_DATE('2021-7-6','%Y-%m-%d')

date_format:将日期转换成字符串

SELECT COUNT(*),DATE_FORMAT(birthday,'%Y-%m-%d')birth FROM t_student GROUP BY birth

datediff(big,small):返回两个日期相差的天数

SELECT DATEDIFF(DATE_FORMAT(NOW(),'2021-7-10'),birthday)FROM t_student

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数(非空)

SELECT SUM(height)FROM t_student
SELECT SUM(height),sex FROM t_student GROUP BY sex
SELECT AVG(height)FROM t_student
SELECT MAX(height),sex FROM t_student GROUP BY sex
SELECT COUNT(height)FROM t_student

1.sum,avg一般用于处理数值型max,min,count可以处理任何类型

2.以上分组函数都忽略null值

3.count函数的一般使用count(*)用作统计行数

4.和分组函数一同查询的字段要求是group by后的字段

条件查询

使用Where子句进行条件过滤

select <结果> from <表名> where <条件>

逻辑运算符: and(与), or(或), not(非)

SELECT *FROM t_student WHERE sex='男'  -- 查询只为男性的学生
SELECT*FROM t_student WHERE sex<>'男'  -- 查询不为男性的学生
SELECT*FROM t_student WHERE sex='男'AND height>=160 -- 查询为男性的身高大于160的学生
SELECT *FROM t_student WHERE sex='男'OR height>160 -- 查询为男性的或身高大于160的学生

模糊查询:

LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值或数值型

通配符: % 任意多个字符,包含0个字符 _ 任意单个字符

SELECT*FROM t_student WHERE NAME LIKE 'j%' -- 查询以j开头的人名
SELECT*FROM t_student WHERE NAME LIKE'%i%' -- 查询名字中有i的人名

between and 两者之间,包含临界值;

SELECT*FROM t_student WHERE height BETWEEN 160 AND 170

in 判断某字段的值是否属于in列表中的某一项

SELECT*FROM t_student WHERE height IN(165,160) -- 查询身高在160和165的学生

IS NULL(为空的)或 IS NOT NULL(不为空的)

SELECT *FROM t_student WHERE NAME IS NOT NULL

UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]

SELECT  id,NAME FROM t_student WHERE sex='男'
UNION
SELECT id,NAME FROM t_student WHERE height>170

NION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]

当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union

排序:

查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC

asc代表的是升序,desc代表的是降序,如果不写,默认是升序

SELECT *FROM t_student ORDER BY id ASC -- 在学生表中查询以学生id进行升序排序

order by子句中可以支持单个字段、多个字段、表达式、函数、别名

数量限制:

limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)

SELECT *FROM t_student WHERE height>160 LIMIT 0,2  -- 查询身高160以上的前两个(检索从0开始累加2条信息)

分组查询的语法:

select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[having 分组后的筛选]
[order by 子句]

注意:查询列表比较特殊,要求是分组函数和group by后出现的字段

-- 查询男生和女生中人数最多的是哪一个
SELECT
  sex,
  COUNT(*)c -- 进行计数
FROM
  t_student
WHERE height > 160 -- 设置条件过滤
GROUP BY sex -- 进行分组
HAVING COUNT(*)> 2 -- 再上一步的前提上进行在过滤
ORDER BY COUNT(*)DESC -- 进行降序排列
LIMIT 0,1 -- 筛选

分组查询中的筛选条件分为两类:

在这里插入图片描述

分组查询

语法:select 分组函数,列(要求出现在group by的后面)from 表[where 筛选条件]group by 分组的列表[having 分组后的筛选][order by 子句]

注意:查询列表比较特殊,要求是分组函数和group by后出现的字段

SELECT COUNT(*),DATE_FORMAT(birthday,'%Y-%m-%d')birth FROM t_student GROUP BY birth
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值