1.4 mysql的查询语句,分组,排序查询,左外连接,模糊查询,关联查询等

本文详细介绍了数据库中的模糊查询、正则表达式、区间查询、IN操作、分组查询与聚合函数、HAVING子句以及不同类型的关联查询,包括内连接、外连接、交叉连接和自连接。通过实例解析了各种查询方式的使用场景和语法,帮助读者深入理解数据库查询的技巧和方法。
摘要由CSDN通过智能技术生成

模糊检索

like匹配

模糊查询提取的数据不一定是确切的, 它允许用户输入的查询条件也是模糊的、大概的、不特别明确的。 例如,只查询王姓学员的信息
在这里插入图片描述

正则

“.” 匹配任意单个的字符。
“[]” 匹配在[]内的任意一个字符
“[^]” 匹配不在[]内的任意一个字符
“ * ” 匹配零个或多个在它前面的字符
“^” 匹配文本的开始字符
“$” 匹配文本的结尾字符
“+” 匹配+前面的字符1次或多次
“{n}” 匹配前面的字符至少n次

-- 模糊查询  LIKE   %匹配   _ 代表匹配的数字

select * from class where c_name LIKE '%3班'

select * from class where c_name LIKE '_3班'
select * from class where c_name LIKE '%3班%'
-- mybatis
select * from class where c_name LIKE CONCAT('%','3班','%')

Between and

-- between AND  包含35
select * from class where id between 3 and 5;

In

用来匹配某个字段的值是几个可数的选项值之一

-- in  在指定范围
select * from class where id in (3,4,5,6)
update class set c_name = '1222班' where id = 4
select * from class where id in (4,5)

分组查询

**分组:**查询的是右侧的分组信息与左侧的原有信息无关,最终展示的是分组信息。无法展示原本的原有的信息。因为每一个组都对应了多个原有信息。对于分组之后:展示列的位置上只能有分组列和聚合列,但是不能出现普通列。——MySql可以展示,展示的原有数据的第一条。

聚合函数

获取某些列的最大值、最小值、平均值等统计分析信息,有时候还需要计算出究竟查询到多少行数据项。分别有:sum、count(注意非空值)——计数,结果集有几行、max、min、avg

-- 聚合函数 max()  min() avg()平均 count()总数  sum()求和
select max(id) from class;

分组Group by

注意: 分组查询一般和聚合函数连用

-- group by 分组
select avg(id) from class group by(c_name); 
select * from class;
alter table class add age int;
select avg(id) from class group by(c_name); 
select avg(id) 平均id,age 年龄分类 from class group by(age); 

Having子句

Having目的:对分组后的数据做过滤

   -- having 分组查询的时候  条件语句需要having
select avg(id) 平均id,age 年龄分类 from class group by(age) having 平均id > 5; 

关联查询

为什么需要关联查询

– 表一般是拆分:避免冗余存储,修改 删除风险很大,而且占地
– 拆分之后:增删改方便了而且扩展,但是查询效率低了。需要数据找多张表

关联查询:就是将多张表数据根据一定的条件组合到一起,类似一张表的效果展示。
内连接:等值连接。
外连接
交叉连接

内连接(等值连接)

内连接和外连接一样都是最常用的连接查询,它根据表中共同的的列进行匹配,特别是两个表存在主外键关系时,通常会使用到内连接查询
内连接也称为等值连接,返回的结果集是两个表中所有相匹配的数据,舍弃不匹配的数据两张表都符合关联条件——根据关联条件查询左表有数据右表也数据那么改数据展示,如果一张表有一张表没有就不显示。
eg:班级和学生关联查询——班级id=班级id学生中的班级id在班级中找不到——这个学生不显示101班,没有学生——不会学生班级id直接null–肯定找不到数据所以不显示。

select 列名
from 表1
inner join 表2 on 表1和表2 的关联条件
inner join 表3 on 表1和表3的 表2 和表3条件–关联条件

select exam,b.studentname,c.subjectname 
from exam a
join studentinfo b on a.studentid=b.studentid
join `subject` c on a.subjectid=c.subjectid
-- 查询教师名称以及教师的部门名称

外连接

--  左外连接  写在前面的表展示完全  没有的数据用null     LEFT OUTER JOIN
select * from class c left join class_t t on c.id = t.c_id;

    -- having 分组查询的时候  条件语句需要having
select avg(id) 平均id,age 年龄分类 from class group by(age) having 平均id > 5; 

交叉连接(笛卡尔乘积)

-- 交叉连接:笛卡尔乘积
select *
from emp a
join dbdate b on 1=1

select a.empname,b.dateinfo,c.*
from emp a
cross join dbdate b
 left join ribao c on a.empid=c.empid and b.dateid=c.dateid

自连接

select 学生.*,组长.stuname as 组长名
from tab_stu 学生
left join tab_stu 组长 on 学生.zuzhangid=组长.stuid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值