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

SQL语言增删改查之C与R

本节通关要求

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.dtcms.com/a/358374.html

相关文章:

  • 05MySQL多表查询全解析
  • Flutter 跨平台开发环境搭建指南
  • Spring Boot 后端接收多个文件的方法
  • Android 权限申请现代化指南
  • 机器学习中的欠拟合与过拟合
  • SC税务 登录滑块 分析
  • 桌面GIS软件FlatGeobuf转Shapefile代码分享
  • Coze源码分析-API授权-添加新令牌-后端源码
  • 项目管理常用的方法有哪些
  • 国标调查:引领汽车消费市场健康发展的理性指南
  • 第2节:项目前期准备
  • Raycast 使用指南:解锁 macOS 生产力新高度
  • opencv实现轮廓绘制和选择
  • Intellij IDEA社区版(下载安装)
  • 学习python第15天
  • 网络编程(4)
  • 项目管理方法全流程解析
  • 【前端教程】HTML 基础界面开发
  • destoon8.0根据模块生成html地图
  • 星链调查(SOS)线上问卷调查服务:全流程专业闭环
  • Python自定义函数形式参中的*args、**kwargs、*和/
  • 学习:uniapp全栈微信小程序vue3后台(7)
  • AI生成思维导图和AI生成Excel公式
  • Dify1.8.0最新版本安装教程:Ubuntu25.04系统本地化安装部署Dify详细教程
  • Langflow核心技术学习笔记
  • kube-proxy
  • 【系列09】端侧AI:构建与部署高效的本地化AI模型 第8章:移动端部署实战 - Android
  • 宽带有丢包,重传高的情况怎么优化
  • w嵌入式分享合集125
  • day43-Ansible-PlayBook