当前位置: 首页 > news >正文

数据库造神计划第六天---增删改查(CRUD)(2)

      🔥个人主页:寻星探路

🎬作者简介:Java研发方向学习者

📖个人专栏:《从青铜到王者,就差这讲数据结构!!!》、 《JAVA(SE)----如此简单!!!》、《数据库那些事!!!》

⭐️人生格言:没有人生来就会编程,但我生来倔强!!!


目录

一、Retrieve 检索

1、where条件查询

1.1语法

1.2比较运算符

1.3逻辑运算符

1.4示例

1.4.1基本查询

1.4.2AND和OR

1.4.3范围查询

1.4.4模糊查询

1.4.5NULL的查询

2、Order by排序

2.1语法

2.2示例


续接上一话:

一、Retrieve 检索

1、where条件查询

        查询的时候,指定条件,符合条件的行被查询出来,不符合条件的就跳过~~

1.1语法

SELECTselect_expr [, select_expr] ... [FROM table_references]WHERE where_condition

1.2比较运算符

#注:

(1)NULL可以参与运算,但是运算结果都是NULL

(2)(NULL==NULL=>NULL=>false)(NULL<=>NULL=>true)

(3)我们谈到区间,大多数时候都是“前闭后开”,但是between and是“前闭后闭”!!!

1.3逻辑运算符

1.4示例

1.4.1基本查询

        查询英语不及格的同学及英语成绩(<60)

select name, english from exam where english < 60;

条件查询执行过程:
        1)遍历这个表的每一行数据~~
        2)把这一行数据, 代入到条件中
        3)如果条件成立(true),此时把这个行加入到结果集合中,如果条件不成立(false),这一行直接跳过
        4)当完成所有的遍历过程之后,此时得到了结果集合,还需要根据 select 指定的列/表达式/别名/去重操作
        5)再针对结果集合做进一步处理~~

        查询语文成绩高于英语成绩的同学

select name, chinese, english from exam where chinese > english;

        总分在200分以下的同学

select name, chinese + math + english as 总分 from exam where chinese + math + english < 200;

1.4.2AND和OR

        查询语文成绩大于80分且英语成绩大于80分的同学

select * from exam where chinese > 80 and english > 80;

        查询语文成绩大于80分或英语成绩大于80分的同学

select * from exam where chinese > 80 OR english > 80;

        观察AND和OR的优先级

select * from exam where chinese > 80 or math > 70 and english > 70;

select * from exam where (chinese > 80 or math > 70) and english > 70;

        由此可见,and优先级要更高一些,但是和前面一样,尽量加括号,不要去记优先级

1.4.3范围查询

        语文成绩在[80,90]分的同学及语文成绩

# 使⽤BETWEEN AND 实现
select name, chinese from exam where chinese between 80 and 90;
# 使⽤ AND 实现
select name, chinese from exam where chinese >= 80 and chinese <= 90;

        数学成绩是78或者79或者98或者99分的同学及数学成绩

# 使⽤IN实现
select name, math from exam where math in (78, 79, 98, 99);
# 使⽤OR实现
select name, math from exam where math = 78 or math = 79 or math = 98 or math = 99;

#注:

        between and 描述的是连续的区间~~
        in 描述的是离散的集合~~

1.4.4模糊查询

%:0个或者任意个任意字符
_:1 个任意字符

        查询所有姓孙的同学

select * from exam where name like '孙%';

        查询姓孙且姓名共有两个字同学

 select * from exam where name like '孙_';

#注:SQL 使用 like 进行模糊匹配, 通常是一个"低效操作"

        SQL 的模糊匹配功能其实是非常弱的~~
        编程圈子中,对于模糊匹配, 有一套成熟的解决方案,正则表达式~~

例:

1.4.5NULL的查询

        构造数据

 # 写⼊⼀条数据,英语成绩为NULLinsert into exam values (8, '张⻜', 27, 0, NULL);

        查询英语成绩为NULL的记录     

        查询英语成绩不为NULL的记录

 # 使⽤is not null
select * from exam where english is not null;

        NULL与其他值进行运算结果为NULL

 # 观察结果中的总分
select name, chinese + math + english as 总分 from exam;

#注:

(1)WHERE条件中可以使用表达式,但不能使用别名

(2)AND的优先级高于OR,在同时使用时,建议使用小括号()包裹优先执行的部分

(3)过滤NULL时不要使用等于号(=)与不等于号(!=,<>)

(4)NULL与任何值运算结果都为NULL

2、Order by排序

        sql 执行结果,得到的顺序,mysql是不做任何承诺的,咱们在编程的时候,不能依赖返回结果的默认顺序,后续一系列的增删改查操作,就可能破坏默认的顺序!!!

2.1语法

-- ASC 为升序(从⼩到⼤)
-- DESC 为降序(从⼤到⼩)
-- 默认为 ASC 
SELECT ... FROM table_name [WHERE ...] ORDER BY {col_name | expr } [ASC | DESC], ... ;

2.2示例

        按数学成绩从低到高排序(升序)

select name, math from exam order by math asc;

        按语⽂成绩从高到低排序(降序)

select name, chinese from exam order by chinese desc;

        按英语成绩从高到低排序

 select name, english from exam order by english desc;

        查询同学各门成绩,依次按数学降序,英语升序,语⽂升序的方式显示

select name, math, english, chinese from exam order by math desc, english asc, chinese asc;

#注:

        查询同学及总分,由高到低排序

select name, chinese + math + english from exam order by chinese + math + english desc;

        可以使用列的别名进行排序

select name, chinese + math + english as 总分 from exam order by 总分 desc;

#注:sql 带有 order by, order by 执行是在列的表达式求值之后的~~
(1)遍历表,取出每一行~~
(2)把当前行代入到条件中,判定这一行是否要保留~~
(3)根据 select 的列名,把这里的列筛选出来/计算表达式的值/定义别名~~
(4)order by 排序~~

        所有英语成绩不为NULL的同学,按语文成绩从高到低排序

select * from exam where english is not null order by chinese desc;

#注:

(1)查询中没有order by子句,返回的顺序是未定义的,永远不要依赖这个顺序

(2)ORDERBY子句中可以使用列的别名进行排序

(3)NULL进行排序时,视为比任何值都小,升序出现在最上面,降序出现在最下面

(4)order by 的排序是针对临时表来展开的,和数据库服务器保存的原始数据,无关~~

        由于内容较多,会分为多篇讲解,预知后续内容,请看后续博客!!!


文章转载自:

http://dgs5c8en.nxhjg.cn
http://9NgnfZ5Y.nxhjg.cn
http://qvP6IUX1.nxhjg.cn
http://2dIuYklE.nxhjg.cn
http://JIGuk6ko.nxhjg.cn
http://dvMAkavG.nxhjg.cn
http://vvdJzPs6.nxhjg.cn
http://MIhHOIWs.nxhjg.cn
http://qWx5z7lN.nxhjg.cn
http://yDmn00qn.nxhjg.cn
http://ldE6NccP.nxhjg.cn
http://ObjhJPl0.nxhjg.cn
http://4BfB704W.nxhjg.cn
http://hbkNuy6W.nxhjg.cn
http://uVE8uLXX.nxhjg.cn
http://hVgsNU8G.nxhjg.cn
http://SXwZnoZV.nxhjg.cn
http://IQfl1WgZ.nxhjg.cn
http://yudvSpW3.nxhjg.cn
http://5YkUVxU5.nxhjg.cn
http://aBsHqced.nxhjg.cn
http://u9pmEbTA.nxhjg.cn
http://zPjmtGNc.nxhjg.cn
http://lG4wIsV9.nxhjg.cn
http://ej1c6JLn.nxhjg.cn
http://UkTgwV7H.nxhjg.cn
http://QNPivvYc.nxhjg.cn
http://y3y7QTaI.nxhjg.cn
http://SZqwUUBj.nxhjg.cn
http://mwNgP6D7.nxhjg.cn
http://www.dtcms.com/a/383029.html

相关文章:

  • AI 赋能内容创作:从文案生成到视频剪辑,创作者的工具革命已至
  • 如何使用“线程级微内核架构”打造应用
  • [硬件电路-219]:自由电子与空穴导电的比较(异同)
  • 系统编程完结整理
  • 阿里云视觉多模态理解大模型开发训练部署
  • leetcode_21 合并两个有序链表
  • Node.js实时截屏实现方案
  • 01数据结构-01背包问题
  • 20250914-01: Langchain概念:流式传输(Streaming)
  • 初步认识 Spring Boot 自动装配
  • 《突破Unity+腾讯云联机瓶颈:多人游戏同步延迟与数据安全的双维度优化》
  • 计算机算术9-浮点乘法
  • 第24课:项目实战与总结
  • 【深度学习|学习笔记】从背景→公式→性质→梯度→何时用哪一个→数值稳定性与常见坑方面描述sigmoid和softmax函数!(一)
  • C++宽度优先搜索算法:队列与优先级队列
  • 同步降压转换器原理
  • 人工智能训练师三级备考笔记
  • <基于深度学习的条纹图分析及其不确定性估计>-论文总结
  • 【愚公系列】《人工智能70年》020-语音识别的历史性突破(深度学习带来历史性突破)
  • 网络操作系统与分布式操作系统的区别
  • Spring Cloud Alibaba 实战:从 0 到 1 构建可监控的微服务体系
  • 分布式推理与量化部署
  • Kafka 实现从网络层到日志与位点的“全景拆解”
  • Python入门教程之赋值运算符
  • 机器学习系统设计:从需求分析到模型部署的完整项目流程
  • SpringMVC架构解析:从入门到精通(1)
  • Why Language Models Hallucinate 论文翻译
  • 从 WPF 到 Avalonia 的迁移系列实战篇5:Trigger、MultiTrigger、DataTrigger 的迁移
  • easyExcel动态应用案例
  • 目标计数论文阅读(2)Learning To Count Everything