MySQL - CRUD增查改删基础与进阶(附超详细例子)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)

1.Create插入数据

格式

-- 单行插入 
insert into 表名 (字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入 
insert into 表名 (字段1, ..., 字段N) values (value1, ...), (value2, ...), (value3, ...);    

例:

-- 创建一张学生表 
drop table if exits student;
create table student (  
	 id INT,   
	sn INT comment '学号',  
	name VARCHAR(20) comment '姓名',  
	qq_mail VARCHAR(20) comment 'QQ邮箱'
 );

单行数据全插:

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致 
INSERT INTO student VALUES (100, 10000, '唐三藏', NULL); 
INSERT INTO student VALUES (101, 10001, '孙悟空', '11111'); 

多行数据指定插:

-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致 
INSERT INTO student (id, sn, name) VALUES 
(102, 20001, '曹孟德'), 
(103, 20002, '孙仲谋');

2.Retrieve查询

全列查询

Select * from 表名

指定列查询

Select 字段名,字段名… from 表名

查询字段为表达式

-- 表达式不包含字段10 (结果:第三列全为 10)
SELECT id, name, 10 FROM exam_result; 
-- 表达式包含字段english (第三列数据+10)
SELECT id, name, english + 10 FROM exam_result; 
-- 表达式包含多个字段 (第三列为chinese + math + english)
SELECT id, name, chinese + math + english FROM exam_result; 

别名

-- 第三列结果为:chinese + math + english,表头名字为:总分
SELECT id, name, chinese + math + english 总分 FROM exam_result

某列去重查询:distinct

SELECT distinct 字段  from 表名;

排序:ORDER BY

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

没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
NULL数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

可以对多个字段进行排序,排序优先级随书写顺序

SELECT name, math, english, chinese FROM exam_result 
ORDER BY math DESC, english;
(对数学进行降序排序,如数学相等则按英语升序排)

order可以对表达式及别名排序


条件查询:WHERE
在这里插入图片描述
逻辑运算符:
在这里插入图片描述

注:

  1. WHERE条件可以使用表达式,但不能使用别名。

模糊查询:LIKE

-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_'; -- 匹配到孙权

AND与OR:

-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;

-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;

-- 观察AND 和 OR 的优先级:
SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;

注:
AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分


日期查询
例:
建借阅图书表:

drop table if exists record;
create table record(
	name varchar(20),
	-- 开始时间
	start_time timestamp default now(),
	-- 结束时间
	end_time timestamp default now()
);

插入数据:

insert into record values("白骨精", "2020-04-01 14:00:00", "2020-04-19 00:00:00");
insert into record values("狐狸精", "2020-04-10 14:00:00", "2020-04-23 00:00:00");
insert into record values("蜘蛛精", "2020-04-20 14:00:00", "2020-04-22 00:00:00");
insert into record values("鸡精", "2020-04-18 14:00:00", "2020-04-19 00:00:00");

在这里插入图片描述
要求:

查询一个[a, b],a代表查询起始日期,b代表结束日期。要求是每行数据,如果和[a, b]产生交集才显示。
[a,b] = [2020-04-05 00:00:00 ,2020-04-17 00:00:00]

分析:
匹配开始条件:查询结束时间大于等于每列数据的开始时间。
匹配结束条件:查询开始的时间小于等于每列数据的结束时间。

语句:

 select * from record where start_time <= '2020-04-17 00:00:00' and end_time >= '2020-04-05 00:00:00';

分页查询
(下标从0开始)

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;

例:

-- 查询exam_result表中,chinese降序排列,从下标1开始,展示1个数据。 即成绩第二
select * from exam_result order by chinese desc limit 1,1;

3.修改(Update)

格式:

updateset 字段1=value1, 字段2=value2... where 条件

例:

-- 将孙悟空同学的数学成绩变更为 80 分 
UPDATE exam_result SET math = 80 WHERE name = '孙悟空'; 

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';

 -- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3; 

-- 将所有同学的语文成绩更新为原来的 2 倍 
UPDATE exam_result SET chinese = chinese * 2; 

4.DELETE 删除

格式:

delete fromwhere 条件

例:

-- 删除孙悟空同学的考试成绩 
DELETE FROM exam_result WHERE name = '孙悟空'; 

删除整表数据

-- 准备测试表 
DROP TABLE IF EXISTS for_delete; 
CREATE TABLE for_delete ( 
	id INT, 
	name VARCHAR(20)
 ); 

-- 插入测试数据 
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C'); 
-- 删除整表数据 
DELETE FROM for_delete;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要详细解释。首先,GUI界面一般指的是图形用户界面,也就是用户可以通过这个界面来操作数据库。而CRUD是指数据库的四种基本操作:增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)。因此,利用GUI界面实现数据库数据的CRUD增查改删功能,需要分别实现这四种操作,并将它们与GUI界面进行集成。 具体实现步骤如下: 1. 创建数据库:首先需要创建一个数据库,可以使用MySQL或者SQLite等数据库管理系统。 2. 设计数据表:在数据库中创建数据表,每个数据表对应着一个实体,包含若干个字段。例如,可以创建一个名为“学生”的数据表,包含学生的ID、姓名、性别、年龄等字段。 3. 编写SQL语句:通过SQL语句对数据表进行CRUD操作。例如,查询学生表中所有的学生信息,可以使用如下SQL语句:SELECT * FROM 学生。 4. 编写GUI界面:设计一个用户友好的GUI界面,包含增加、查询、更新和删除等功能按钮。 5. 实现增删改查功能:将SQL语句与GUI界面进行集成,实现CRUD操作。例如,当用户点击“增加”按钮时,可以弹出一个输入框,要求用户输入学生的信息,并将这些信息插入到学生表中。 6. 进行测试:测试所有功能是否正常。 总体来说,实现数据库数据的CRUD增查改删功能需要熟练掌握数据库管理系统和SQL语言,同时需要有一定的GUI界面设计经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值