2.2 SQL

简介: SQL是操作关系型数据库的标准语言,包含DDL(定义数据库结构)、DML(增删改数据)、DQL(查询数据)和DCL(权限控制)。通过实际案例讲解表设计、增删改查、条件查询、分组排序、分页及Node.js连接数据库实现完整CRUD操作。

2.2 SQL
SQL是一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
分类
全称
说明
DDL
Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)
DML
Data Manipulation Language
数据操作语言,用来对数据库表中的数据进行增删改
DQL
Data Query Language
数据查询语言,用来查询数据库中表的记录
DCL
Data Control Language
数据控制语言,用来创建数据库用户、控制数据库的访问权限
1.DDL-数据库
上述语法的database也可换成schema。如:create schema db01; MySQL8版本中,默认字符集为utf8mb4
utf8mb4是一种能支持emoji表情包(😌)的存储方式
2.DDL-表结构
这里,我们结合一个实际页面做一个需求分析,尝试解读他的表结构是什么样(给大家5min时间)
现在我来带领大家一起分析一下
字段
字段类型
字段长度
字段描述
id
int
20
数据唯一ID
name
varchar
255
武器名称(AK-47、M4A1等)
baseWeapon
varchar
255
武器型号(消音型)
price
decimal
10,2
武器价格
appearance
varchar
50
外观:崭新出厂、久经沙场、略有磨损
category
varchar
20
类别(武器皮肤、印花)
quality
varchar
20
品质(全息、闪耀、冠军等)
isCollectible
tinyint
1
收藏品:是(1)、否(0)
imgUrl
varchar
500
商品图片(存储图片 URL)
stock
int
10
在售数量
有了这个之后,我们就需要结合上面的语法,在DataGrip里完成表结构的创建
在自己的数据库连接下,右键-创建表
声明表名,这里我用:weapon,你可以随意
声明表字段,如上分析的,依次填写,这里我不再一一截图
声明一个表的唯一主键,用于标识数据
所有字段填写完毕后,点击ok,此时我们的表就创建好了(这里我只填写了2个)
案例练习
请你完成我们本次实训需要开发的游戏饰品前后端开发项目的表结构分析设计,页面原型图如下
案例讲解
课堂实施,最终分析下来的SQL语句如下:
3.DML-新增数据
语法如下,我们依次按照下面语法完成上述表结构数据的新增
⏰注意:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的 。
字符串和日期型数据应该包含在引号中(单引号、双引号都可以)。
插入的数据大小/长度,应该在字段的规定范围内 。
4.DML-删除数据
语法如下,我们按照下面语法完成上述表结构数据的删除
⏰注意:
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。
🤓思考一个问题:项目正式上线之后,你是否会删除这条数据?
会:数据就真的没了
这种,我们称之为:物理删除
不会:那怎么实现删除的效果呢
这种,我们称之为:逻辑删除
5.DML-修改数据
语法如下,我们按照下面语法完成上述表结构数据的更新
⏰注意:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
6.DQL-查找数据
一个完整的DQL查询包含以下几个部分
基本查询(select...from...)
条件查询(where)
分组查询(group by)
排序查询(order by)
分页查询(limit)
基本查询

  • 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。
    案例练习:
    请你查找出当前武器表里面的:图片、价格、数量
    条件查询
    比较运算符
    功能
    >
    大于

    =
    大于等于
    <
    小于
    <=
    小于等于
    =
    等于
    <> 或 !=
    不等于
    between ... and ...
    在某个范围之内(含最小、最大值)
    in(...)
    在in之后的列表中的值,多选一
    like 占位符
    模糊匹配(_匹配单个字符, %匹配任意个字符)
    is null
    是null
    逻辑运算符
    功能
    and 或 &&
    并且 (多个条件同时成立)
    or 或 ||
    或者 (多个条件任意一个成立)
    not 或 !
    非 , 不是
    案例练习:
    基础比较与逻辑组合查出当前武器表中:
    价格大于 200 元,且外观为 “崭新出厂”,且品质是 “全息” 或 “冠军” 的武器
    范围与否定逻辑查出当前武器表中:
    库存数量在 10 到 50 之间(含 10 和 50),且类别不是 “印花”,且标签不包含 “略有磨损” 的武器
    模糊匹配与空值判断查出当前武器表中:
    名称以 “AK-” 开头(如 AK-47、AK-74),且评价数量不为空的武器
    多条件组合与枚举匹配查出当前武器表中:
    武器型号在“M4A1”“AWP”“P2000”列表中,且价格小于 100 元,且库存数量不等于 0 的武器
    复杂逻辑嵌套查出当前武器表中:
    价格在 500 元以上且品质为闪耀 或者价格在 100-300 元之间且外观为久经沙场,且标签不为空的武器
    分组查询
    函数
    功能
    count
    统计数量
    max
    最大值
    min
    最小值
    avg
    平均值
    sum
    求和
    案例练习:
    查找出价格最大的武器
    查找所有武器的平均价格
    null值不参与所有聚合函数的运算 。
    统计数量可以使用:count() count(字段) count(常量),推荐使用count() 。
    除了上述的分组函数,还有两个关键字也是经常使用的
    where与having的区别:
    执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;
    而having是分组之后对结果进行过滤。判断条件不同:where不能对聚合函数进行判断,而having可以。
    比如我要统计每个基础武器型号(baseWeapon)的平均价格,但只关注:
    外观为 “崭新出厂” 的商品(分组前过滤)
    平均价格超过 200 元的武器型号(分组后过滤)
    假设表结构核心字段如下
    字段名
    说明
    baseWeapon
    基础武器型号(如 AK-47、M4A1)
    appearance
    外观状态(如 “崭新出厂”“久经沙场”)
    price
    单价(元)
    则对应的sql如下,表示:外观为崭新出厂的 AWP 和 M4A1,平均价格均超过 200 元
    排序查询
    排序方式:升序(asc),降序(desc);默认为升序asc,是可以不写的
    如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
    案例练习:
    查询 类别为 “武器皮肤” 且品质为 “闪耀” 的商品,要求:
    只显示商品名称(name)、基础武器型号(baseWeapon)、价格(price)、库存(stock)这 4 个字段
    按价格(price)从高到低排序(价格相同的情况下,按库存从低到高排序)
    分页查询
    😏说明:
    起始索引从0开始,起始索引 = (查询页码 - 1) 每页显示记录数。
    分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
    如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
    案例练习:
    查询 类别为 “印花” 且外观为 “略有磨损” 的商品,要求:
    只显示商品名称(name)、价格(price)、库存(stock)这 3 个字段;
    按价格从低到高排序;
    分页参数:每页显示 15 条记录,查询第 3 页的数据。
    SQL
    运行代码
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select
    name,
    price,
    stock
    from
    weapon_skins
    where
    category = '印花'
    and appearance = '略有磨损'
    order by
    price asc
    limit
    30, 15; -- 起始索引=(3-1)
    15=30,查询15条记录
    3.NodeJS连接数据库实现增删改查
    3.1 工程搭建
    新建一个文件夹,即工程名称:weapon
    vscode打开当前文件夹,此时如下
    执行命令创建本地package.json文件,后续用于描述项目信息、管理依赖、指定工程入口等
    Bash
    运行代码
    复制代码
    1
    npm init -y
    执行命令,用于后续连接mysql
    Bash
    运行代码
    复制代码
    1
    npm install mysql2 dotenv

相关文章
|
1天前
|
前端开发
1.前端知识回顾
创建HTML文件需将后缀命名为.html,如“01-新浪新闻-标题-排版.html”。输入英文感叹号!后回车,自动生成基础结构,修改标题并保存。在浏览器中打开预览效果,确保页面正常显示,完成初步测试。(239字)
|
1天前
|
JavaScript 前端开发 测试技术
3.5 测试数据库删除
本节实现数据库的删除与修改功能测试。在`weaponSkinModel.js`中新增按ID修改价格和扣减库存的功能,通过`index.js`编写测试代码验证逻辑正确性,结合控制台输出与数据库数据双向校验,确保增删改查操作符合预期,提升数据交互稳定性。(238字)
|
1天前
|
数据可视化 关系型数据库 MySQL
2.MySQL核心知识回顾
本节介绍MySQL的安装方法,若本地未安装,可使用提供的安装包。安装完成后,推荐使用Navicat、SQLyog或DataGrip等可视化工具进行操作,方便高效管理数据库。
|
1天前
|
JavaScript
1.2 NodeJS安装
本节介绍Node.js的安装方法,可通过官网或本地安装包进行。安装时需选择无空格的英文路径,并参考手册完成。安装后通过“win+R→cmd→node -v”命令验证环境,能输出版本号即成功,版本无需与示例一致。
|
1天前
|
前端开发 JavaScript
修改index.html
本项目为“无畏契约皮肤商城”前端页面,包含左右广告栏、导航筛选、商品展示与分页功能,支持价格、外观、类别等多维度筛选,结构清晰,适配移动端,通过HTML、CSS与JS实现交互动态加载。
|
1天前
|
JSON 前端开发 JavaScript
修改server.js
在 `server.js` 中新增分页查询API,支持按价格、外观、类别等条件筛选武器皮肤,实现前端分页与多参数过滤功能,提升数据加载效率与用户体验。
|
1天前
|
JavaScript 前端开发
修改weaponSkinModel.js
在 `weaponSkinModel.js` 中新增分页查询功能,支持按类别、品质、收藏状态、基础武器等条件筛选,返回数据列表及分页信息,提升查询效率与灵活性。
|
1天前
|
SQL 存储
查找全部武器
本文介绍如何通过SQL分页查询“武器皮肤”表数据,包含建表语句、测试数据插入及字段说明,涵盖武器名称、价格、品质、图片等信息,适用于游戏商城或道具管理系统开发。
|
1天前
|
存储 前端开发 JavaScript
首页优化
对首页进行优化,重点改进侧边栏广告轮播与筛选功能交互。通过HTML结构重构、JS动态加载筛选项并实现标签页切换及价格过滤,提升页面响应式体验与用户操作流畅度,更贴近官网视觉效果。
|
1天前
|
存储 前端开发 JavaScript
首页搭建
本项目为无畏契约皮肤商城首页搭建,包含HTML结构、CSS样式与JS交互逻辑。实现商品展示、多条件筛选及响应式布局,通过Node.js启动服务,构建完整前端页面。