mysql 学习记录--增删改查

前置基础

  1. 在MySQL中,可以使用CREATE DATABASE语句创建一个新的数据库。以下是一个简单的示例: 这将创建一个名为mydb的新数据库。你可以根据需要更改数据库名称
sql 复制代码
CREATE DATABASE mydb;

在创建数据库时,可以使用CHARACTER SET子句指定字符集,如下所示:

sql 复制代码
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  1. 使用图形界面工具创建数据库

3. 创建表

sql 复制代码
CREATE TABLE users ( 
id INT AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(255) NOT NULL,
age INT, 
email VARCHAR(255) );

1. 插入(增)

INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);

sql 复制代码
INSERT INTO `spring+vue3`.`employee` ( `id`, `name`, `sex`, `no`, `age`, `description`, `department_id` )
VALUES
	( 13, '李33434白白4', '男', '334', 55, '小魔尊', 4 );

一次性插入多条

sql 复制代码
-- 一次性添加多条新记录:
INSERT INTO students (class_id, name, gender, score) VALUES
  (1, '大宝', 'M', 87),
  (2, '二宝', 'M', 81),
  (3, '三宝', 'M', 83);
-- 查询并观察结果:
SELECT * FROM students;

2. 删除(删)

DELETE语句的基本语法是:

sql 复制代码
DELETE FROM <表名> WHERE ...;
sql 复制代码
DELETE from employee WHERE id=5

删除多条

sql 复制代码
-- 删除id=5,6,7的记录:
DELETE FROM students WHERE id>=5 AND id<=7;
-- 查询并观察结果:
SELECT * FROM students;

3. 更新(改)

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;

sql 复制代码
UPDATE `spring+vue3`.`employee` 
SET `name` = '322',
`sex` = '女',
`no` = '107',
`age` = 43,
`description` = '辅导反而热热费',
`department_id` = 2 
WHERE
	`id` = 8;

更新多条数据

sql 复制代码
-- 更新id=5,6,7的记录:
UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;
-- 查询并观察结果:
SELECT * FROM students;

4. 查询(查)

1. 查询某个表的所有数据,返回的是一个列表。

sql 复制代码
SELECT * FROM employee;

2. 单个查询

sql 复制代码
SELECT * FROM employee WHERE NAME="李白";

3. 多条件查询

sql 复制代码
SELECT * FROM employee WHERE NAME="李白"AND age=55;

4. 模糊查询

  • "%" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)。
  • " _ " 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然,也可以like "陈____",数量不限。
  • like操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;但如果like后面没出现通配符,则在SQL执行优化时将 like 默认为 "="执行

后缀模糊

sql 复制代码
SELECT * FROM employee WHERE NAME LIKE '李%';

查询以李开头的 其他类似的:

sql 复制代码
-- 匹配所有包含"网"的记录,全部模糊
SELECT * FROM app_info WHERE appName LIKE '%网%';
 
-- 匹配所有以"网"开头的记录,后缀模糊
SELECT * FROM app_info WHERE appName LIKE '网%';

-- 匹配所有以"网"结尾的记录 前缀模糊
SELECT * FROM app_info WHERE appName LIKE '%网';

5. 分页查询

sql 复制代码
SELECT * FROM employee LIMIT 0, 5;

一、分页需求:

客户端通过传递start(页码)pageSize(每页显示的条数) 两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:

比如:

查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第11条到第20条的数据的sql是:select * from table limit 10,10; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

查询第21条到第30条的数据的sql是:select * from table limit 20,10; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

二、总结:

通过上面的分析,可以得出符合我们需求的分页sql格式是:select * from table limit (start-1)*pageSize,pageSize;其中start 是页码,pageSize是每页显示的条数。

6. 排序

select 查询列表 from 表(where 筛选条件)order by 排序列表 asc:升序,desc降序

sql 复制代码
SELECT * FROM employee ORDER BY id DESC;//id数字越大就越新

7. 统计

一般用于统计个数

sql 复制代码
SELECT count(*) FROM employee GROUP BY sex HAVING sex='男'

常用的SQL统计函数

  • COUNT() : 用于统计行数或非空列值的数量。例如,SELECT COUNT(*) FROM table_name可以统计表中的总行数,而SELECT COUNT(column_name) FROM table_name则统计指定列的非空值数量。
  • SUM() : 用于计算数值列的总和。例如,SELECT SUM(column_name) FROM table_name会返回指定列的值的总和。
  • AVG() : 用于计算数值列的平均值。例如,SELECT AVG(column_name) FROM table_name会返回指定列的平均值。
  • MIN()MAX() : 分别用于找到数值列中的最小值和最大值。例如,SELECT MIN(column_name) FROM table_name和*SELECT MAX(column_name) FROM table_name会返回指定列的最小值和最大值。

8.分组和筛选

  • GROUP BY : 用于根据一个或多个列对结果集进行分组。例如,SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name可以统计每个不同的column_name值的数量。
  • HAVING : 与GROUP BY结合使用,用于对分组后的结果进行筛选。例如,SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 5可以筛选出那些column_name值的数量大于5的组。

9.关联查询

sql 复制代码
SELECT
	employee.*,
	dept.`name` AS departmentName 
FROM
	employee
	LEFT JOIN dept ON employee.department_id = dept.id

关联查询分页

sql 复制代码
SELECT
	employee.*,
	dept.`name` AS departmentName 
FROM
	employee
	LEFT JOIN dept ON employee.department_id = dept.id 
	LIMIT 0,5
相关推荐
曾几何时`1 小时前
MySQL(七)索引
数据库·mysql
悠悠121381 小时前
一条 SQL 从敲下回车,到在 MySQL 里“跑完一生”,中间到底经历了啥?
数据库·sql·mysql
秋91 小时前
MySQL 9.7.0 使用详解:新特性、实战与避坑指南
android·数据库·mysql
努力努力再努力wz2 小时前
【MySQL进阶系列】拒绝冗余SQL:带你透彻理解视图的底层逻辑
android·c语言·数据结构·数据库·c++·sql·mysql
历程里程碑2 小时前
MySQL数据类型全解析 + 代码实操讲解
大数据·开发语言·数据库·sql·mysql·elasticsearch·搜索引擎
杨云龙UP2 小时前
Windows Server 2012 环境下 Oracle 11.2 使用 expdp 实现自动备份、异地复制与定期清理_20260504
服务器·数据库·windows·mysql·docker·oracle·容器
nbwenren2 小时前
MySQL数据库误删恢复_mysql 数据 误删
数据库·mysql·adb
星光开发者3 小时前
基于springboot电动汽车租赁管理系统-计算机毕设 附源码 11217
javascript·spring boot·mysql·django·php·html5·express
带鱼吃猫3 小时前
从原子性到串行化:数据库事务全解
数据库·mysql
IT学长3 小时前
JavaWeb图书管理系统设计与实现(附源码)
mysql·servlet·毕业设计·课程设计·图书管理系统