本节通关要求

1、掌握 SQL 语句对数据库进行的创建 Create读取 Retireve 操作的指令;

2、多练习🎮

说明:操作对象是数据表中的数据行,也就是表中的记录。请明确操作对象,不要误伤友军。

背景:

create table if not exists game(id bigint comment '玩家编号',`name` varchar(20) comment '游戏身份',lifebar int comment '生命值',power int comment '力量',constitution int comment '体质',intelligence int comment '智力'
);

---------------------------------------------------------游戏开始------------------------------------------------------------

关卡1、Create 新增

🎦开场动画:insert [into] 表名 [(字段1 [,字段2] ..)] values (值1, 值2...);

  --->   [ ] 表示可写可不写,() 则必须输入。

本关包含3个BOSS:🫅单行数据全列插入  🫅单行数据指定列插入 🫅多行数据指定列插入

锦囊💊:字符串类型的值用 '' 英文单引号括起来。

1.1 单行数据全列插入

⚠️值列表中的数量和顺序必须和定义表中所有列的顺序一致。

示例:运行环境 —— Navicat

        insert into game values (1, '孙悟空',100,100,100,80);

1.2 单行数据指定列插入

        insert into game (id,name,lifebar) values (2,'猪悟能',100);

锦囊💊:没有指定的列将会被默认值填充,默认值是 null。

1.3 多行数据指定列插入

        insert into game values (3,'沙悟净',100,70,80,77), (4,'玄奘法师',100,40,36,75), (5,'白龙马',100,50,100,30), (6,'红孩儿',100,50,100,50),(7,'牛魔王',100,76,89,50);

1.4 开销

锦囊💊开箱:

① 执行所有的 SQL 时都会有网络开销,是一个不可控的因素;

② 写入数据时还会有磁盘 IO (input 输入 output 输出) 的开销

③ 每执行一条 SQL 语句都会开启一个事务,事务的开启和关闭都需要消耗系统资源

(一次提交多条数据【前提是数量在一个可控范围内】,比一次只提交一条数据的效率高一点点)

④ 在写入的时候如果出现以下类似的警告:Incorrect string value: '\xE5\xBC...' for column 'name' at row 1 
首先考虑是否是数据库的编码集未设置正确,导致读写中文出错。使用 show variables like '%character%'; 查看当前数据库的编码集;若确定是编码集的问题,则可以使用 alter database 数据库名 character set 目标编码集; 指令来修改,又或者修改 MySQL 的配置文件 my.ini。

-------------------------------------------------恭喜你,第一关轻松拿下-----------------------------------------------

关卡2、Retrieve 检索

🎦开场动画:

select [distinct] 字段 [,字段,...] [ from 表名] [ where 条件] [ group by {字段 / 表达式},...] [having 条件] [ order by {字段 / 表达式} [ asc / desc ], ... ] [ limit { [offset], 行数 / 行数 offset 偏移量 } ];

一大批 BOSS 正在向你靠近:

2.1 全列查询

        select * from 表名   ( * 类似通配符)

锦囊💊:

        在日常练习中该语句可以使用;倘若在正式的生产环境中查询表内所有数据是一个非常危险的行为!

        因为在生产环境中,一个表的实际存储数据量会非常大,有可能达到 TB。而在上一关的锦囊提醒您当一个查询开始时就会产生磁盘开销与网络开销,磁盘和网络都是非常稀缺的资源,消耗成本会非常高;

        如果一条全列查询语句开始执行,就有可能将服务器的资源吃光,其他的操作就要等待该语句执行完才能继续执行。

        因此在生产环境下,不要使用不加任何限制语句的查询语句。该限制对象是结果集的条数。

2.2 指定列查询

        select 字段 [ , 字段 ,...] from 表名

示例:查询所有角色的力量和体质

2.3 查询字段为表达式

2.3.1 常量表达式

        表达式本身是一个常数,以10这个常数为例

        常数的运算

2.3.2 多列运算

        把所有角色的力量加10,但实际上被没有修改原先定义的值

        计算所有角色的属性值总分(力量+体质+智力)

2.4 为查询结果指定别名

        selelct 列名 [as] 别名 from 表名;

锦囊💊:①as 可以省略,别名如果包含了空格必须使用英文单引号括起来。

        ②因为我们原始设定的表中并没有叫“总属性值”这一列,所有通过表达式查询出来的结果集是通过一个临时表返回到显示界面的,执行完成之后临时表就被删除了。=> 在 MySQL 中所有的查询结果都会通过临时表返回给用户。

2.5 distinct 去重

        select distinct 字段 from 表名;

      

锦囊💊:使⽤ distinct 去重时,只有查询列表中所有列的值都相同才会判定为重复

2.6 order by 排序

        select 字段 [, 字段...] from 表名 order by 列名 [asc / desc];

锦囊💊:

        ① 若无明确指明是 asc 升序还是 desc 降序,将默认是升序。

        ② 其中的降序 desc 这个关键词很眼熟,因为 desc table_name; 查看表结构这个指令也是用了这个关键字。一个 desc 表示 descend 下降;一个 desc 表示 describe 描述。两种意思一个关键字,是不好的反面案例。在日常生产环境下作为专业的程序员,应当正确规范命名,使其明确、有意义。

2.6.1 null 值大小

        null 数据排序被视为比任何值(包括负数)都要小,升序时在最前面,降序时在最下面。

示例:

2.6.2 使用表达式及别名排序

select name 姓名,power+constitution+intelligence 总属性值 from game ORDER BY 总属性值 DESC;     (推荐写法)或者     select name 姓名,power+constitution+intelligence 总属性值 from game ORDER BY power+constitution+intelligence DESC; 

锦囊💊:MySQL 中特殊的null

        ① 不论和什么值参与什么样的运算,返回的值都是 null;

        ② null 始终被判定为 false;

        ③ null 的值在 MySQL 中就是 null,与其他语言用 null 表示 0 不一样。

2.6.3 多字段排序

        select 字段 [, 字段...] from 表名 order by 列名 [asc / desc], 列名 [asc / desc], ...;

锦囊💊:多字段进行排序时,排序的优先级与前后顺序有关,也可以为每一个字段定义不同的排序规则。

示例:先按智力降序排序,再按体质升序排序,最后按力量降序排序:

2.7 where 条件查询

        select 字段 [ , 字段 ...] from 表名 where 条件;

2.7.1 比较运算符

运算符说明 
>,   >=,   <,   <=

(只有一个符号,Java是两个)

等于,对于NULL的比较是不安全的,比如 null = null 返回结果是 null
<=>等于,对于NULL的比较是安全的,比如 null <=> null 返回结果是 true(1)
!=,   <>不等于,两种写法都可以
value between a₀ and a₁范围匹配,[a₀, a₁],如果 a₀ <= value <= a₁,返回 true 或 1,not between 则取反
value in (option, ...)如果 value 在 option 列表或者集合中,则返回 true(1) ,not in 则取反
is null是 null
is not null不是 null
like模糊匹配,% 表示任意多个(包括0个)字符;_表示任意一个字符;not like 则取反

2.7.2 逻辑运算符

运算符说明
and多个条件必须都为 true(1),结果才是 true(1)
or任意一个条件是 true(1),结果就是 true(1)
not条件为 true(1),结果为 false(0)

锦囊💊:逻辑运算符的优先级:() > not > and > or

        若记不住优先级,那就使用小括号手动指定优先级。


示例:① 比较运算时自动过滤了值为  null 的数据行

② 查询总属性值大于200的角色

小葫芦🍐:能否在 where 条件句中使用别名?

葫芦卖药揭秘:

        出现上面的现象和 MySQL 内部的实现有关,即与 MySQL 执行 SQL 语句的顺序有关;

Ⅰ.如果要做数据中查寻某些数据,首先要确定是哪个表  => 先执行 from 表名

Ⅱ.在查询过程中要依据指定的查询条件把符合条件的数据过滤出来 => 执行  where 条件

Ⅲ.执行 select 后面指定的字段,这些列是需要加入到最终的结果集中 => 执行 select 字段 [, 字段]...

Ⅳ.排序操作,根据 order by 子句中指定的列名和排序规则进行最后的排序 => 执行 order by 列名 [ asc / desc ];

        由上面的步骤可得,当 where 条件中是一条表达式的时候,因为是先执行 where 条件 再执行 select 字段,所以 where 条件中不能使用别名

③ 两个表示等于的运算符:

④ 多条件

        查询智力是 75 或 78 或 80 的角色名字和智力值。两种方法:

        查询智力不为 null,按智力值从高到低排序:

⑤ 模糊查询:

        % 表示任意多个(包括0个)字符;_表示任意一个字符;not like 则取反

💊注意通配符的位置,若查询条件是 '%孙',在当前表中的数据是会显示 Empty set 的;

2.8 分页查询

时间胶囊💊:回顾前面提及到查询全列 select * from 表名; 的时候,提及到这是非常危险的行为。因此建议使用 分页查询 运行项目,查询的是一些记录的集合,而不是大量记录,能有效减少数据库服务器的压力,同时也是对用户友好的表现。

1、select ... from 表名 ... limit num;  从下标0开始,筛选 num 条结果;

2、select ... from 表名 ... limit start, num;  从下标 start 开始,筛选 num 条结果;

3、select ... from 表名 ... limit num offset start; 从 start 开始,筛选 num 条结果,offset 是偏移量,也就是开始位置的意思。

                                                                           ⇵     

    ↑ 如果起始位置超过整张表的数据量,也是可执行的,只不过返回的是一个空结果集。

小葫芦🍐:如果设置翻页,一页数据量为 5 条,那么每次起始位置怎么取得?

葫芦卖药揭秘:每页起始位置 = (当前页码 - 1)* 每页数据量。=> 收入锦囊💊

---------------------------------------------------恭喜你,第二关也拿下------------------------------------------------

>> 下一关 :SQL语言增删改查之U与D(预发布,即将揭秘隐藏 BOSS 攻略)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈溢出问题

brpc 的 bthread 默认协程栈大小是 128KB&#xff08;非 pthread 模式&#xff09;。如果在一个bthread中&#xff0c;它执行的函数内定义了一个局部变量map&#xff0c;有很多个元素&#xff0c;map的大小超过了128KB&#xff0c;协程会自动申请新的栈空间吗&#xff1f;这里要…

Android之穿山甲广告接入

文章目录前言一、效果图二、实现步骤1.引入库2.build.gradle依赖3.Application初始化3.开屏广告4.插屏广告5.懒人做法总结前言 项目接入广告已经是常见的现象了&#xff0c;但是还有很多朋友或者初学者没有接触过&#xff0c;或者没有接触过穿山甲&#xff0c;今天就来看一下&…

Web开发工具一套式部署Maven/Nvm/Mysql/Redis

前言&#xff1a; 对于一个纯小白且电脑没有任何环境的计算机学生&#xff0c;如何快速跑通Java前后端项目呢&#xff1f; 先附上百度网盘 地址&#xff1a; Web开发工具 。 以下链接来自不同作者&#xff0c;如有侵犯&#xff0c;请联系我删除。 1.Jdk 部署地址&#xff1a…

Deepseek法务提示指令收集

参考网络资料&#xff0c;收集一些法务提示指令&#xff0c;可用于Agent LLM、以及LLM法律相关开发。 https://zhuanlan.zhihu.com/p/22588251815 1 基础指令 1) 身份认证模块 【身份与版本声明】 您是由DeepSeek研发的法律智能辅助系统V4.2版&#xff0c;内核经司法部《生成…

Tiptrans转运 | 免费5国转运地址

Tiptrans 是一家总部位于捷克的国际包裹转运与虚拟地址服务平台&#xff0c;主要提供全球虚拟收货地址&#xff08;英国、德国、香港、美国等&#xff09;&#xff0c;让用户在当地网店购物&#xff0c;再由 Tiptrans 转运到海外。除了物流服务&#xff0c;Tiptrans 也提供虚拟…

STM32手动移植FreeRTOS

&#x1f4e6; 准备工作 获取FreeRTOS源码: 访问 FreeRTOS官网 或其 GitHub仓库 下载最新版内核源码。 你也可以使用Git克隆&#xff08;注意要包含子模块&#xff09;&#xff1a;git clone https://github.com/FreeRTOS/FreeRTOS.git --recurse-submodules。 准备STM32基础…

C5仅支持20MHZ带宽,如果路由器5Gwifi处于40MHZ带宽信道时,会出现配网失败

是的&#xff0c;这会导致“怎么都连不上”。结论先说&#xff1a;如果路由器把 5 GHz 固定在 40 MHz&#xff08;或以上&#xff09;带宽&#xff0c;而你的 C5 只支持 5 GHz 的 20 MHz 带宽&#xff0c;那么 STA 连接一定会失败。固件里不可能“把 40 MHz AP 连成 20 MHz”&a…

坚鹏请教DEEPSEEK:请问中国领先的AI智能体服务商有哪些?知行学

坚鹏请教DEEPSEEK&#xff1a;请问中国领先的AI智能体服务商有哪些&#xff1f;深圳知行学教育科技公司名列榜首根据2025年8月底多家权威机构发布的榜单和报告&#xff0c;比如德本咨询&#xff08;DBC&#xff09;的“2025企业级AI Agent应用TOP50”榜单、IDC的《中国AI AGENT…

【开题答辩全过程】以 投票系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

C++异常处理指南:构建健壮程序的错误处理机制

在程序开发的世界里&#xff0c;“错误” 是绕不开的话题。你可能写过一个简单的计算器&#xff0c;却因为用户输入 “50” 而崩溃&#xff1b;也可能在操作数据库时&#xff0c;因为权限不足导致数据读取失败&#xff1b;甚至在申请内存时&#xff0c;因为系统资源耗尽而无法继…

comfUI背后的技术——VAE

第一次知道VAE可能还是许嵩。当然&#xff0c;这里的VAE指的是变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09; Seq2Seq 在 Seq2Seq 框架提出之前&#xff0c;深度神经网络在图像分类等问题上取得了非常好的效果。在其擅长解决的问题中&#xff0c;输入和…

【序列晋升】21 Spring Cloud Gateway 云原生网关演进之路

Spring Cloud Gateway作为Spring生态系统中的核心组件&#xff0c;已成为微服务架构中的首选API网关解决方案。它基于响应式编程模型&#xff0c;提供高性能、可扩展的路由管理和跨领域功能&#xff0c;解决了传统微服务架构中的接口聚合、安全管控和流量控制等核心问题。与此同…

“HEU-AUTO”无线上网使用指南

本文针对笔记本电脑 笔者电脑型号为&#xff1a;2025联想拯救者Y9000p 5060步骤1&#xff1a;点击开始菜单&#xff0c;点击设置&#xff0c;如图步骤2&#xff1a;在Windows设置菜单中&#xff0c;点击“网络和Internet”选项&#xff0c;如下图&#xff1a;步骤3&#xff1a;…

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库

在微信小程序开发中,集成蓝牙打印机实现中文打印是常见需求,但中文文本常因编码不匹配(如UTF-8与GBK冲突)导致乱码问题。本文详细解释如何利用iconv-lite库高效处理中文编码转换,确保打印内容正确显示。文章结构清晰,逐步引导您解决问题,代码示例基于实际项目验证。 1. …

GraphRAG——v0.3.6版本使用详细教程、GraphRAG数据写入Neo4j图数据库、GraphRAG与Dify集成

GraphRAG——v0.3.6版本使用详细教程、GraphRAG数据写入Neo4j图数据库、GraphRAG与Dify集成理论部分安装知识图谱生成测试将数据导入到Neo4j图数据库可视化将GraphRAG与Dify集成理论部分 https://guoqingru.blog.csdn.net/article/details/150771388?spm1011.2415.3001.5331安…

MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析

MongoDB 聚合管道&#xff08;Aggregation&#xff09;高级用法&#xff1a;数据统计与分析第一章&#xff1a;聚合管道核心概念与架构设计1.1 聚合管道的本质与价值1.2 管道阶段深度解析1.3 执行引擎与优化机制第二章&#xff1a;高级分组与多维统计分析2.1 复合分组与层次化分…

Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200%

——基于动态设备指纹与智能行为仿真的裂变增长体系​​一、Twitter舆情运营的三大核心挑战​账号关联风险​同一设备/IP操作多账号触发平台风控&#xff0c;封号率高达65%&#xff0c;舆情响应链路断裂固定设备参数&#xff08;如GPU型号/屏幕分辨率&#xff09;导致账号权重暴…

【密集目标检测】停车场车辆(车位)识别数据集:12k+图像,yolo标注

停车场车辆(车位)识别数据集概述 数据集包含12415张从监控摄像头画面中截取的停车场图像,涵盖晴天、阴天和雨天场景,标注类别包含车位占用、空车位2类。 标注格式:yolo txt 标注工具:labelme/labelimg 分辨率:416*416 一、学术研究的奠基与迭代 停车场车辆(车位)…

苍穹外卖项目笔记day02

接下来的笔记都会以难点与一些不常见的方法为主,一些重复的crud并不会出现哦 ThreadLocal类 ThreadLocal 并不是一个Thread&#xff0c;而是Thread的局部变量&#xff0c;它用于创建线程局部变量。 核心思想&#xff1a;每个线程都有自己独立的变量副本。这意味着&#xff0c;即…

设计模式12-适配器模式

定义 Adapter Partern: 将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 场景 系统需要使用现有的类&#xff0c;而这些类的接口不符合系统的需要。 典型场景&#xff1a;集成第三方库、遗留系统代…