数据库的筛选条件

news2025/6/19 2:52:43

【一】筛选过滤条件

【1】完整的查询语句

-- 查询当前表中的全部数据

select * from 表名 where 筛选条件;

​

-- 查询当前表中的指定字段的数据

select 字段名,字段名 from 表名 where 筛选条件;

# 执行顺序

from
where
select
​


select 你选择的列1, 你选择的列2, ...
from 查询的表名
where 筛选条件;

例如:

  • 等于:=(例如:age = 25

  • 不等于:<>!=(例如:age <> 25

  • 大于:>(例如:salary > 5000

  • 小于:<(例如:rating < 4.5

  • 大于等于:>=(例如:quantity >= 10

  • 小于等于:<=(例如:price <= 100

  • 模糊匹配:LIKE(例如:name LIKE 'J%'

  • 范围:BETWEEN(例如:age BETWEEN 18 AND 30

  • 列表:IN(例如:department IN ('IT', 'Finance')

具体示例:

select * from employee

where employee_id = '2';

image-20240125193149346

【2】数据准备

( 1 )创建数据库

create database Student;

( 2 )切换到Student数据库

use Student;

image-20240125194108716

( 3 ) 创建school表

create table school (

  id int primary key auto_increment comment'id 信息',

  course varchar(255),

  lecturer varchar(255),

  address varchar(255)
);

( 4 )再插入我们需要的数据

insert into school (id, course, lecturer, address) values

(1, 'go', 'xiao', '301'),

(2, 'java', 'mao', '302'),

(3, 'paython', 'jing', '303'),

(4, 'seo', 'yi', '304'),

(5, 'API接口', 'bao', '305'),

(6, 'Vue', 'peng', '306'),

(7, 'CSS', 'ban', '307'),

(8, 'Web', 'tian', '308'),

(9, 'MySQL', 'yun', '309');

( 5 ) 查询信息

select * from school;

image-20240125194836222

select * from school\G;

# MySQL 将以垂直格式显示查询结果

image-20240125194948244

【3】查询联系

  • 查询 id 在 1 ~ 5 之间的数据

-- 原始模版

select * from * where *;
​
-- 最麻烦的写法

select * from school where id>=1 and id <=5;
​
-- 在SQL语句中没有 

select * from school where 1<= id <=5;
​
-- 优化后的写法

select * from school where id between 1 and 5;

image-20240125201114725

or

select * from * where *;
​
-- 最原始的写法 三个 or

select * from school where course='go' or course='java' or course='API接口';
​
-- 简单写法,成员运算

select * from school where course in ('go','paython','seo');

image-20240125201441810

  • 查询 课程名称中包含字母a的课程

select * from * where *;
​

# % 匹配多个字符
# _ 匹配一个字符

select * from school where course like "%a%";

select * from school where course like "_a%";

image-20240125201632215

image-20240125201712554

  • 查询课程,跟老师姓名是由六个字符组成

select lecturer,course from school where char_length(lecturer) = 4;

image-20240125201943539

【二】分组条件

【1】分组条件group by

  • 每个,平均、最高、最低

【2】语法

select * from 表名 group by 分组条件;

select 列名1, count(*), sum(列名2), avg(列名3)

from table_name

group by 列名1;


# 查询所有列

select group_concat(course) from 表名 group by 列名;
​


# 拼接

select group_concat(course : teachar_name) from 表名 group by 列名;


group_concat 必须分组之后才能使用
concat 不分组也能使用

【3】准备工作

create table scores (
  student_id int,
  course varchar(255),
  score int
);
​

insert into scores (student_id, course, score) values
(1, '数学', 80),
(1, '英语', 90),
(1, '物理', 70),
(2, '数学', 85),
(2, '英语', 92),
(2, '物理', 75),
(3, '数学', 90),
(3, '英语', 85),
(3, '物理', 80),
(4, '数学', 87),
(4, '英语', 88),
(4, '物理', 79);

case 这个就是如果的意思

SET就是更新表中数据的关键字。它用于指定要修改的列和新的值。

通常,SET 关键字与 UPDATE 语句一起使用,用于更新表中的记录。以下是使用 SET 的一般语法:

update 表名
set 列名1 = 新值1, 列名2 = 新值2, ...
where 条件;

示例:

假设我们有一个名为 scores 的表,其中包含学生的成绩信息。要更新学生ID为1的学生的成绩,将数学成绩修改为90分

update scores

set math_score = 90

where student_id = 1;
select 
  student_name,
  case
    when score >= 90 then '优秀'
    when score >= 80 then '良好'
    when score >= 70 then '中等'
    else '不及格'
  end as grade
from scores;

我这里可以插入一列老师名字信息

alter table scores
add column teacher_name varchar(255);

image-20240125220845793

update scores
set teacher_name = 
case student_id
    when 1  then '痴梦老师'
    when 2  then '赵老师'
    when 3  then '刘老师'
    when 4  then '张老师'
end;

image-20240125202624849

image-20240125202644197

  • 使用分组条件group by来计算每门课程的平均、最高和最低分数。

select course, 
  avg(score) as avg_score, 
  max(score) as max_score, 
  min(score) as min_score 
from scores group by course;

image-20240125203423192

【4】分组注意事项

(1)where和group by可以同时使用,但是要注意顺序

select * from * where *;
select * from * group by *;
​
-- 同时出现要有先后顺序 
-- where 先对整体过滤 group by 再对局部过滤
select * from * where * group by *;

(2)where不能使用聚合函数

  • 先筛选出课程是英语的信息

-- 方法一

select student_id,course,score from scores where course = '英语' or course = '物理';
  • 先筛选出课程是英语跟语文的信息

-- 方法二
select * from scores
where course in ('英语', '物理');

  • 再对大于85分以上跟小于85分进行分组

select case
    when score > 85 then '大于85分'
    when score <= 85 then '小于等于85分'
  end as score_group,
  count(*) as count
from scores
group by score_group;
  • 成绩大于75分的学生

select student_id, avg(score)
from scores
where score > 75
group by student_id;
  • select student_id, avg(score):选择学生ID和成绩平均值,这里使用avg()聚合函数来计算每个学生的成绩平均值。

  • from scores:指定要查询的表为scores

  • where score > 75:指定筛选条件为分数大于75分。

  • group by student_id:按照学生ID进行分组。

image-20240125205532771

image-20240125211128852

【三】having(分组之后筛选)

【1】注意事项

  • having的语法和where是一致的

  • 只不过having是在分组之后进行的过滤操作

  • 即having是可以直接使用聚合函数的

select * from * where * group by * having *;

【2】练习

  • scores的表中选取所有分数大于85分的学生,然后按照学生ID进行分组,并计算每个学生的分数大于85分的成绩的平均值。

select student_id,avg(score) from scores

where score > 85

group by student_id

having avg(score)>=90;
​
  • SELECT student_id, AVG(score):选择学生ID和成绩平均值,这里使用AVG()聚合函数来计算每个学生的成绩平均值。

  • FROM scores:指定要查询的表为scores

  • WHERE score > 85:指定筛选条件为分数大于85分。

  • GROUP BY student_id:按照学生ID进行分组。

  • HAVING AVG(score):指定筛选条件为成绩平均值大于等于90,

image-20240125221426911

【四】筛选条件之distinct(去重)

【1】注意事项

  • 必须是完全一样的数据才可以去重

  • 一定要注意主键的问题

  • 在主键存在的情况下是一定不可能去重的

【2】练习

select distinct student_id,course from scores;

image-20240125221704868

select distinct course from scores;

image-20240125221829863

【五】筛选条件之(order by)排序

  • asc 默认省略不写 ----> 修改降序

  • order by 列名 desc; : 降序

  • order by 列名: 默认是升序

【1】将scores表中的数据按照分数排序(升序)

select * from scores order by score;

image-20240126153942758

【2】将scores表中的数据按照分数排序(降序)

select * from scores order by score desc;

image-20240126154133521

【3】将scores表中的数据按照分数排序(降序),年龄升序排序。

  • 先在表中插入新的老师年龄数据

alter table 表名 add 列名 数据类型;
alter table scores
add column age varchar(255);



更新原始数据表scores中的数据

update scores
set age = 
case teacher_name
    when '痴梦老师'  then 36
    when '赵老师'  then 39
    when '刘老师'  then 45
    when '张老师'  then 26
end;

image-20240126155602750

  • 将scores表中的数据按照分数排序(降序),年龄升序排序

select * from scores order by score desc,age asc;

image-20240126155909454

scores 表中选取两个列:student_idscore。对于每一个不同的 student_id,计算该学生的所有成绩(score)的平均值,并将其命名为 average_score

select student_id, avg(score) as average_score

from scores

where age > 38

group by student_id

order by average_score desc;

image-20240126160730317

【六】筛选条件之(limit)限制条数

  • 针对数据太多的情况,我们大都是做分页处理

  • limit x,y : 第一个参数是起始位置, 第二个是条数

select * from * [where*] limit *;

【2】查看scores表中5条数据

select * from scores limit 5;

image-20240126160925727

【3】按照区间取数据

select * from * [where *] limit x,y

select * from 表名 limit 0,6;

start_page = 0 # 起始位置

step = 6 # 步长


while True:
    sql = f"select * from emp limit {start_page},{step}"
    start_page += step
select * from scores limit 0,6;

image-20240126161122591

【七】正则

【一】正则语法

  • 简单版

 属性名 regexp '匹配方式'
  • 终极版

select * from * where 字段名 regexp 正则表达式;
  • “匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。

  • 下表列出了 regexp 操作符中常用的匹配方式。

image-20240126161656280

【1】创建表

create table `person`  (

  `name` varchar(255) character set utf8 collate utf8_general_ci null default null,

  `age` int(40) null default null,

  `heigh` int(40) null default null,

  `sex` varchar(255) character set utf8 collate utf8_general_ci null default null

) engine = innodb character set = utf8 collate = utf8_general_ci row_format = dynamic;

【2】插入数据

insert into `person` values ('thomas ', 25, 168, '男');

insert into `person` values ('tom ', 20, 172, '男');

insert into `person` values ('dany', 29, 175, '男');

insert into `person` values ('jane', 27, 171, '男');

insert into `person` values ('susan', 24, 173, '女');

insert into `person` values ('green', 25, 168, '女');

insert into `person` values ('henry', 21, 160, '女');

insert into `person` values ('lily', 18, 190, '男');

insert into `person` values ('liming', 19, 187, '男');

image-20240126162116753

【3】案例

# 查询 name 字段以j开头的记录

select * from person where name regexp '^j';
​
select * from person where name regexp 'y$';
​
select * from person where name regexp 'th*';
​
# sql语句中的正则表达式并不完善,所以功能不全

select * from person where name regexp '....';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UVA191 Intersection 题解

UVA191 Intersection 题解 水紫&#xff0c;建议降蓝。 解法 求线段相交裸题&#xff0c;考虑使用向量解决。 我们把矩形的 4 4 4 个点两两相连&#xff0c;得到 6 6 6 条线段&#xff0c;如果先输入的线段和这 6 6 6 条线段都没有交点&#xff0c;则认为线段和矩形不相…

高度塌陷问题及解决

什么情况下产生 (when 父盒子没有定义高度&#xff0c;但是子元素有高度&#xff0c;希望用子盒子撑起父盒子的高度&#xff0c;但是子盒子添加了浮动属性之后&#xff0c;父盒子高度为0 <template><div class"father"><div class"son"&…

基于命名实体链接的事件抽取与知识图谱在电商领域的应用

开源项目推荐 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口&#xff0c;功能强大&#xff0c;欢迎体验。 多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口…

代码还原之 函数

指令堆里逆向出来的代码有歧义&#xff0c;有三处返回&#xff0c;有嵌套IF语句&#xff0c;故推断出是个函数&#xff1b; #if 0/*27ec: 48 8d 3d 58 39 00 00 lea 0x3958(%rip),%rdi # 614b <_IO_stdin_usedBase0x14b> // rdi"COLUMNS"27f3: e8 e…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

安卓SDK dx工具生成dex文件命令

目录 前言一、添加到环境变量二、命令示例 前言 在Android SDK 工具中&#xff0c;dx命令用于将Java字节码文件转换为Dalvik Executable&#xff08;dex&#xff09;文件&#xff0c;以便在Android设备上运行。 一、添加到环境变量 找到想要使用的SDK版本&#xff0c;将dx.b…

C++11 新特性 增加数据类型

一.C11 新增加数据类型介绍 在C11中&#xff0c;新增了long long、unsigned long long、char16_t和char32_t等数据类型&#xff0c;它们可以支持更宽的整型和字符表示。 long long&#xff1a;long long是一种整数类型&#xff0c;它至少可以存储64位&#xff08;8字节&#x…

Offer必备算法12_链表_五道力扣题详解(由易到难)

目录 ①力扣2. 两数相加 解析代码 ②力扣24. 两两交换链表中的节点 解析代码 ③力扣143. 重排链表 解析代码 ④力扣23. 合并 K 个升序链表 解析代码1&#xff08;小根堆优化&#xff09; 解析代码2&#xff08;递归_归并&#xff09; ⑤力扣25. K 个一组翻转链表 解…

【从部署服务器到安装autodock vina】

注意&#xff1a;服务器 linux系统选用ubuntu 登录系统&#xff0c;如果没有图形化见面可以先安装图形化界面 可以参考该视频 --> linux安装图形化界面 非阿里云ubuntu 依次执行以下命令 sudo apt-get update sudo apt-get install gnome sudo reboot阿里云ubuntu 需多执…

Glip模型

Yolos 完全使用Transformer做目标检测 Detr 先使用CNN提取特征然后再使用transformerDetr和Yolos共同的缺点:需要事先知道所有的类别 Glip Zero-shot, 目标检测的类别可以不在训练类别中目标框进行视觉编码,然后和文本进行匹配文本和视觉特征是通过Clip模型提取的,所以视觉向…

从功能测试进阶自动化测试全套进阶指南,亲身经验分享

因为我最近在分享自动化测试技术&#xff0c;经常被问到&#xff1a; 功能测试想转自动化&#xff0c;请问应该怎么入手&#xff1f;有没有好的资源推荐&#xff1f; 那么&#xff0c;接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。&#xff08;学习路线放…

蓝桥杯python常用内置函数

一、 abs() #返回数字的绝对值 例&#xff1a; 二、 all() #判断给定的可迭代参数中的所有元素是否都为True&#xff0c;若是则返回True&#xff0c;反之返回False 例&#xff1a; 三、 any() #判断给定的可迭代参数是否都为False&#xff0c;全为False则返回False&am…

光明网发布稿件多少钱?新闻投稿低价渠道推荐,附光明网价格明细表

想要在光明网发稿&#xff1f;不知道费用是多少&#xff1f;媒介多多告诉你答案&#xff01; 在当今数字化时代&#xff0c;媒体平台的重要性日益突出&#xff0c;而光明网作为国内知名的新闻门户网站&#xff0c;吸引了大量的目标受众。许多企业和个人都希望能够在光明网上投…

Dubbo-记录

1.概念 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理…

【SQL】550. 游戏玩法分析 IV (关键点:确定连续两次登录)

前述 常见函数用法示例&#xff1a; DATEDIFF(col1, col2) 1DATE_ADD(MIN(col), INTERVAL 1 DAY)ROUND(3.1415926,3) > 四舍五入得到 3.142 题目描述 leetcode原题&#xff1a;550. 游戏玩法分析 IV 思路 确定连续两次登录统计&#xff0c;保留两位小数 写法一 关键…

FME快速批量提取图斑四至点,提取四至坐标,并输出shapefile数据的实现方法

目录 一、实现效果 二、实现过程 1.读取图斑 2.提取图斑坐标极值 3.提取图斑坐标 4.提取四至方位的坐标 5.创建四至点 6.输出成果 7.模板的使用 三、总结 在遇到需要提取图斑四至点的工作时&#xff0c;要如何进行方便快速的批量提取&#xff0c;方法有很多。今天…

webhook详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 webhook简介 在当今高度连接的网络世界中,没有什么可以孤立地发挥最佳作用。完成一项任务(几乎)总是需要多个实体的参与。电子商务应用程序需要与支付系统通信,支付…

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

&#x1f4d6; 前言&#xff1a;随着软件产业的发展&#xff0c;计算机应用逐步渗透到社会生活的各个角落&#xff0c;使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而&#xff0c;软件的规模越大、越复杂&#xf…

【react框架】跟我一起速读Next.js官方入门教学课程文档

文章目录 前言目录结构样式方案正常引入样式文件Tailwind方案CSS Modules方案clsx方案 文字和图片优化文字图片 Pages和Layout的机制PagesLayout 通过Link组件改变路由并且拆分打包提供Hooks未完待续... 前言 对于那些对Next.js一无所知的前端伙伴来说&#xff0c;最佳的快速入…

IPsec VPN配置方式

一、手工方式建立 手工方式建立IPsec的场景&#xff0c;全部参数需要手工配置&#xff0c;工作量大&#xff0c;适用于小型静态网络。 当企业总部与分支通过FW1和FW2之间建立的IPsec隧道进行安全通信。 手工配置步骤主要有四个&#xff1a; ①定义需要保护的数据流&#xff1…