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

【MySQL学习笔记】数据库的CURD(一)

【MySQL学习笔记】数据库的CURD(一)

🔥个人主页大白的编程日记

🔥专栏MySQL笔记
在这里插入图片描述


文章目录

  • 【MySQL学习笔记】数据库的CURD(一)
    • 前言
  • 一.表的增删改查
    • 1.1 Create
      • 1.1.1 单行数据 + 全列插入
      • 1.1.2 多行数据+指定列插入
      • 1.1.3 插入否则更新
      • 1.1.4 替换
    • 1.2 Retrieve
      • 1.2.1 SELECT 列
        • 1.2.1.1 全列查询
        • 1.2.1.2 指定列查询
        • 1.2.1.3 查询字段为表达式
        • 1.2.1.4 为查询结果指定别名
        • 1.2.1.5 结果去重
      • 1.2.2 WHERE 条件
      • 1.2.3 结果排序
    • 1.3 筛选分页结果
    • 后言

前言

哈喽,各位小伙伴大家好!上期我们讲了数据库表达约束 今天我们讲的是数据库表的CURD(一)。话不多说,我们进入正题!向大厂冲锋!
在这里插入图片描述

一.表的增删改查

CRUD :Create(创建),Retrieve(读取),Update(更新),Delete(删除)

1.1 Create

语法:

INSERT [INTO] table_name
[(column [,column]...)]
VALUES (value_list)[,(value_list)]...value_list:value,[,value]

1.1.1 单行数据 + 全列插入

-- 创建一张学生表
CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT '学号',name VARCHAR(20)NOT NULL,qq VARCHAR(20)
);

1.1.2 多行数据+指定列插入

INSERT INTO students (id,sn,name)VALUES
(102,20001,'曹孟德'),
(103,20002,'孙仲谋');

1.1.3 插入否则更新

-- 主键冲突
INSERT INTO students (id,sn,name)VALUES (100,10010,'唐大师');
-- 唯一键冲突
INSERT INTO students (sn,name)VALUES (20001,'曹阿瞒');

可以选择性的进行同步更新操作语法:

INSERT INTO students (id,sn,name)VALUES (100,10010,'唐大师')ON DUPLICATE KEY UPDATE sn =10010,name ='唐大师';

1.1.4 替换

REPLACE INTO students (sn,name)VALUES (20001,'曹阿瞒');

1.2 Retrieve

SELECT
[DISTINCT]{*|{column [,column]...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC |DESC],...]LIMIT ...

案例:

-- 创建表结构
CREATE TABLE exam_result (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0COMMENT '语文成绩',
math float DEFAULT 0.0COMMENT '数学成绩',
english float DEFAULT 0.0COMMENT '英语成绩'
);
-- 插入测试数据INSERT INTO exam_result (name, chinese, math, english) VALUES('唐三藏', 67, 98, 56),('孙悟空', 87, 78, 77),('猪悟能', 88, 98, 90),('曹孟德', 82, 84, 67),('刘玄德', 55, 85, 45),('孙权', 70, 73, 78),('宋公明', 75, 65, 30);Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

1.2.1 SELECT 列

1.2.1.1 全列查询
  • 通常情况下不建议使用 * 进行全列查询
  • 查询的列越多,意味着需要传输的数据量越大;
  • 可能会影响到索引的使用。
SELECT * FROM exam_result;+----+-----------+-------+--------+--------+| id | name | chinese | math | english |+----+-----------+-------+--------+--------+| 1 | 唐三藏 | 67 | 98 | 56 || 2 | 孙悟空 | 87 | 78 | 77 || 3 | 猪悟能 | 88 | 98 | 90 || 4 | 曹孟德 | 82 | 84 | 67 || 5 | 刘玄德 | 55 | 85 | 45 || 6 | 孙权 | 70 | 73 | 78 || 7 | 宋公明 | 75 | 65 | 30 |+----+-----------+-------+--------+--------+7 rows in set (0.00 sec)
1.2.1.2 指定列查询
  • – 指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;+----+-----------+--------+| id | name | english |+----+-----------+--------+| 1 | 唐三藏 | 56 || 2 | 孙悟空 | 77 || 3 | 猪悟能 | 90 || 4 | 曹孟德 | 67 || 5 | 刘玄德 | 45 || 6 | 孙权 | 78 || 7 | 宋公明 | 30 |+----+-----------+--------+7 rows in set (0.00 sec)
1.2.1.3 查询字段为表达式

– 表达式不包含字段

SELECT id, name, 10 FROM exam_result;
+----+-----------+----+| id | name | 10 |+----+-----------+----+| 1 | 唐三藏 | 10 || 2 | 孙悟空 | 10 || 3 | 猪悟能 | 10 || 4 | 曹孟德 | 10 || 5 | 刘玄德 | 10 || 6 | 孙权 | 10 |
| 7 | 宋公明 | 10 |+----+-----------+----+7 rows in set (0.00 sec)-- 表达式包含一个字段SELECT id, name, english + 10 FROM exam_result;+----+-----------+-------------+| id | name | english + 10 |+----+-----------+-------------+| 1 | 唐三藏 | 66 || 2 | 孙悟空 | 87 || 3 | 猪悟能 | 100 || 4 | 曹孟德 | 77 || 5 | 刘玄德 | 55 || 6 | 孙权 | 88 || 7 | 宋公明 | 40 |+----+-----------+-------------+7 rows in set (0.00 sec)-- 表达式包含多个字段SELECT id, name, chinese + math + english FROM exam_result;+----+-----------+-------------------------+| id | name | chinese + math + english |+----+-----------+-------------------------+| 1 | 唐三藏 | 221 || 2 | 孙悟空 | 242 || 3 | 猪悟能 | 276 || 4 | 曹孟德 | 233 || 5 | 刘玄德 | 185 || 6 | 孙权 | 221 || 7 | 宋公明 | 170 |+----+-----------+-------------------------+7 rows in set (0.00 sec)
1.2.1.4 为查询结果指定别名

语法:

SELECT column [AS] alias_name [...] FROM table_name;

SELECT id, name, chinese + math + english 总分 FROM exam_result;+----+-----------+--------+| id | name | 总分 |+----+-----------+--------+| 1 | 唐三藏 | 221 || 2 | 孙悟空 | 242 || 3 | 猪悟能 | 276 || 4 | 曹孟德 | 233 |比特就业课 | 5 | 刘玄德 | 185 || 6 | 孙权 | 221 || 7 | 宋公明 | 170 |+----+-----------+--------+7 rows in set (0.00 sec)
1.2.1.5 结果去重

– 98 分重复了

SELECT math FROM exam_result;
math
98
78
98
84
85
73
65

– 去重结果

SELECT DISTINCT math FROM exam_result;
math
98
78
84
85
73
65

在这里插入图片描述

1.2.2 WHERE 条件

比较运算符:

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符说明
AND多个条件必须都为 TRUE(1) ,结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1) ,结果为 FALSE(0)

在这里插入图片描述

1.2.3 结果排序

语法:

  • ASC 为升序(从小到大)
  • DESC 为降序(从大到小)
  • 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
案例:
1.2.3.1 同学及数学成绩,按数学成绩升序显示


SELECT name, math FROM exam_result ORDER BY math;
+-----------+------+
| name      | math |
+-----------+------+
| 宋公明   | 65   |
| 孙权     | 73   |
| 孙悟空   | 78   |
| 曹孟德     | 84   |
| 唐三藏   | 85   |
| 猪悟能     | 98   |
+-----------+------+
7 rows in set (0.00 sec)

同学及 qq 号,按 qq 号排序显示
– NULL 视为比任何值都小,升序出现在最上面

SELECT name, qq FROM students ORDER BY qq;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 唐大师   | NULL |
| 孙仲谋   | NULL |
| 曹阿瞒   | NULL |
| 孙悟空   | 11111111|
+-----------+-------+
4 rows in set (0.00 sec)

– NULL 视为比任何值都小,降序出现在最下面

SELECT name, qq FROM students ORDER BY qq DESC;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 孙悟空   | 11111 |
| 唐大师   | NULL |
| 孙仲谋   | NULL |
| 曹阿瞒   | NULL |
+-----------+-------+
4 rows in set (0.00 sec)

按简同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
– 多字段排序,排序优先级随书写顺序

SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;
+-----------+------------+------+------+
| name      | math | english | chinese |
+-----------+------+------+------+
| 唐三藏   | 98   | 56     | 67     |
| 猪悟能     | 98   | 90     | 88     |
| 刘玄德     | 84   | 67     | 82     |
| 孙悟空   | 78   | 77     | 87     |
| 孙权     | 73   | 78     | 70     |
| 宋公明     | 65   | 30     | 75     |
+-----------+------+------+------+
7 rows in set (0.00 sec)

6.2.3.4 查询同学及总分,由高到低
– ORDER BY 中可以使用表达式

SELECT name, chinese + math + english FROM exam_result
ORDER BY chinese + math + english DESC;
+-----------+---------+
| name      | 总分   |
+-----------+---------+
| 猪悟能     | 276   |
| 孙悟空   | 242   |
| 曹孟德     | 233   |
| 唐三藏     | 221   |
| 孙权     | 221   |
| 刘玄德     | 185   |
| 宋公明     | 170   |
+-----------+---------+
7 rows in set (0.00 sec)

6.2.3.5 查询姓孙的同学数学成绩,结果按数学成绩由高到低显示
– 结合 WHERE 子句和 ORDER BY 子句

SELECT name, math FROM exam_result
WHERE name LIKE '孙%'
ORDER BY math DESC;
+-----------+------+
| name      | math |
+-----------+------+
| 孙悟空   | 78   |
| 孙权     | 73   |
+-----------+------+
2 rows in set (0.00 sec)

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

SELECT name, chinese + math + english 总分 FROM exam_result
ORDER BY 总分 DESC;
+-----------+-------+
| name      | 总分  |
+-----------+-------+
| 猪悟能     | 276   |
| 孙悟空   | 242   |
| 曹孟德     | 233   |
| 唐三藏     | 221   |
| 孙权     | 221   |
| 刘玄德     | 185   |
| 宋公明     | 170   |
+-----------+-------+
7 rows in set (0.00 sec)

6.2.3.7 查询同学及qq号,按qq号排序显示

SELECT name, qq FROM students ORDER BY qq;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 唐大师   | NULL |
| 孙仲谋   | NULL |
| 曹阿瞒   | NULL |
| 孙悟空   | 11111111|
+-----------+-------+
4 rows in set (0.00 sec)

– NULL 视为比任何值都小,降序出现在最下面

SELECT name, qq FROM students ORDER BY qq DESC;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 孙悟空   | 11111 |
| 唐大师   | NULL |
| 孙仲谋   | NULL |
| 曹阿瞒   | NULL |
+-----------+-------+
4 rows in set (0.00 sec)

6.2.3.8 查询简同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
– 多字段排序,排序优先级随书写顺序

SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;
+-----------+------+------+------+
| name      | math | english | chinese |
+-----------+------+------+------+
| 唐三藏   | 98   | 56     | 67     |
| 猪悟能     | 98   | 90     | 88     |
| 刘玄德     | 84   | 67     | 82     |
| 孙悟空   | 78   | 77     | 87     |
| 孙权     | 73   | 78     | 70     |
| 宋公明     | 65   | 30     | 75     |
+-----------+------+------+------+
7 rows in set (0.00 sec)

6.2.3.9 查询姓孙的同学数学成绩,结果按数学成绩由高到低显示
– 结合 WHERE 子句和 ORDER BY 子句

SELECT name, math FROM exam_result
WHERE name LIKE '孙%'
ORDER BY math DESC;
+-----------+------+
| name      | math |
+-----------+------+
| 孙悟空   | 78   |
| 孙权     | 73   |
+-----------+------+
2 rows in set (0.00 sec)

在这里插入图片描述

1.3 筛选分页结果

语法:

  • 起始下标为 0
    • 从 0 开始,筛选 n 条结果
      SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
      
    • 从 s 开始,筛选 n 条结果
      SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
      
    • 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
      SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
      

建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

按 id 进行分页,每页 3 条记录,分别显示第 1、2、3 页

第 1 页

SELECT id, name, math, english, chinese FROM exam_result
ORDER BY id LIMIT 3 OFFSET 0;
+----+-----------+------+------+------+
| id | name      | math | english | chinese |
+----+-----------+------+------+------+
|  1 | 唐三藏     |  98  |   56  |   67  |
|  2 | 孙悟空     |  78  |   77  |   87  |
|  3 | 猪悟能     |  98  |   90  |   88  |
+----+-----------+------+------+------+
3 rows in set (0.02 sec)

第 2 页

SELECT id, name, math, english, chinese FROM exam_result
ORDER BY id LIMIT 3 OFFSET 3;
+----+-----------+------+------+------+
| id | name      | math | english | chinese |
+----+-----------+------+------+------+
|  4 | 曹孟德     |  84  |   67  |   82  |
|  5 | 刘玄德     |  85  |   45  |   55  |
|  6 | 孙权       |  73  |   78  |   70  |
+----+-----------+------+------+------+
3 rows in set (0.00 sec)

第 3 页,如果结果不足 3 个,不会有影响

SELECT id, name, math, english, chinese FROM exam_result
ORDER BY id LIMIT 3 OFFSET 6;
+----+-----------+------+------+------+
| id | name      | math | english | chinese |
+----+-----------+------+------+------+
|  7 | 宋公明     |  65  |   30  |   75  |
+----+-----------+------+------+------+
1 row in set (0.00 sec)

在这里插入图片描述

后言

这就是数据库表的CURD(一)。大家自己好好消化!今天就分享到这! 感谢各位的耐心垂阅!咱们下期见!拜拜~

http://www.dtcms.com/a/406297.html

相关文章:

  • 使用Excel在标签打印软件快速新建标签,表格导入并实现批量打印
  • WEB日常刷题练习(1)
  • 信阳网站建设的费用潍坊网站建设维护
  • Kafka-消息不丢失
  • 如何查看一个网站用什么程序做的wordpress文章发布保存都不行
  • ReactFlow:构建交互式节点流程图的完全指南
  • 实战:基于 BRPC+Etcd 打造轻量级 RPC 服务——从注册到调用的核心架构与基础实现
  • 多语言网站建设幻境网站开发人员的岗位有
  • 19.9咖啡项目:工程项目级别的IIC主从机模块
  • 【遥感技术】​从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
  • PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化技术
  • html5如何实现网站开发俄文网站推广
  • Vue3》》 ref 获取子组件实例 原理
  • 【C++实战㊶】C++建造者模式:复杂对象构建的秘密武器
  • stm32h743iit6 USB FS 启用 VBUS 或 BCD 前后的区别
  • 资源网站模板网页qq登陆手机版网址
  • vue中.env文件是什么,在vue2和vue3中的区别
  • ADMM 算法的基本概念
  • Vue中如何封装双向绑定的组件
  • 个人网站建设与维护上传wordpress到空间
  • 深入剖析Spring Boot依赖注入顺序:从原理到实战
  • 对象关系映射(ORM)
  • 在VS Code 中为Roo Code 添加 Bright Data 的本地MCP服务器
  • 专业的制作网站开发公司wordpress界面404
  • Python Pillow库详解:图像处理的瑞士军刀
  • AI 时代的安全防线:国产大模型的数据风险与治理路径
  • Deepoc具身智能模型:为传统机器人注入“灵魂”,重塑建筑施工现场安全新范式
  • 鸿蒙NEXT安全控件解析:实现精准权限管控的新范式
  • 创建自己的网站广告图片
  • GraphRAG:引领自然语言处理进入深层语义分析新纪元