你还在手撸SQL?ChatGPT笑晕在厕所
文章目录
- 你还在手撸SQL?ChatGPT笑晕在厕所
- 一、背景
- 二、面向Chat编程
- 1. 数据库设计
- 2. 建表语句
- 3. 加中文注释
- 4. 数据模拟
- 5. 查询成绩
- 6. 修改课程任课老师
- 7. 删除课程
- 8. 删除一个有关联数据的课程
- 总结
你还在手撸SQL?ChatGPT笑晕在厕所
一、背景
经典3表设计:
学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别;
选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩;
课程表 C(CNO,CNAME,TEACHER),其属性表示课程号、课程名称和任课教师姓名。
目标:
写一套增删查改证明ChatGPT绝非浪得虚名。
二、面向Chat编程
1. 数据库设计

提问:
现在你是一名资深数据库工程师,请根据以下描述设计数据库表,使用中文注释:
学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别;选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩;课程表 C(CNO,CNAME,TEACHER),其属性表示课程号、课程名称和任课教师姓名。
回答:
根据描述,可以设计三个表:学生表 S、选课表 SC 和课程表 C。
学生表 S:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| SNO | 字符串 | 学生的学号 |
| SNAME | 字符串 | 学生的姓名 |
| AGE | 整数 | 学生的年龄 |
| SEX | 字符串 | 学生的性别 |
选课表 SC:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| SNO | 字符串 | 学生的学号,外键 |
| CNO | 字符串 | 所学课程的课程号,外键 |
| GRADE | 浮点数 | 学生的成绩 |
课程表 C:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| CNO | 字符串 | 课程的课程号 |
| CNAME | 字符串 | 课程的名称 |
| TEACHER | 字符串 | 任课教师的姓名 |

提问:
对这个设计,输出mysql数据库的建表语句
回答:
以下是基于描述的MySQL数据库建表语句:
-- 创建学生表 S
CREATE TABLE S (SNO CHAR(10) PRIMARY KEY, SNAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, SEX CHAR(2) NOT NULL
);-- 创建课程表 C
CREATE TABLE C (CNO CHAR(10) PRIMARY KEY, CNAME VARCHAR(20) NOT NULL, TEACHER VARCHAR(20) NOT NULL
);-- 创建选课表 SC
CREATE TABLE SC (SNO CHAR(10), CNO CHAR(10), GRADE FLOAT(3, 1), PRIMARY KEY (SNO, CNO), FOREIGN KEY (SNO) REFERENCES S(SNO) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (CNO) REFERENCES C(CNO) ON DELETE CASCADE ON UPDATE CASCADE
);
这些语句使用了 CHAR 和 VARCHAR 数据类型来存储字符串,使用 INT 和 FLOAT 数据类型来存储数字。在 SC 表中,PRIMARY KEY 用来定义联合主键,FOREIGN KEY 用来定义外键,并且使用了 ON DELETE CASCADE 和 ON UPDATE CASCADE 规则来实现级联删除和更新。
思考:
建表语句还像那么回事,就是没注释啊,差评
3. 加中文注释

提问:
针对刚才的数据库设计,在建表语句中加上中文注释
回答:
以下是基于描述的MySQL数据库建表语句,同时增加了中文注释:
-- 创建学生表 S
CREATE TABLE S (SNO CHAR(10) PRIMARY KEY COMMENT '学生的学号', SNAME VARCHAR(20) NOT NULL COMMENT '学生的姓名', AGE INT NOT NULL COMMENT '学生的年龄', SEX CHAR(2) NOT NULL COMMENT '学生的性别'
) COMMENT='学生表';-- 创建课程表 C
CREATE TABLE C (CNO CHAR(10) PRIMARY KEY COMMENT '课程的课程号', CNAME VARCHAR(20) NOT NULL COMMENT '课程的名称', TEACHER VARCHAR(20) NOT NULL COMMENT '任课教师的姓名'
) COMMENT='课程表';-- 创建选课表 SC
CREATE TABLE SC (SNO CHAR(10) COMMENT '学生的学号,外键', CNO CHAR(10) COMMENT '所学课程的课程号,外键', GRADE FLOAT(3, 1) COMMENT '学生的成绩', PRIMARY KEY (SNO, CNO), FOREIGN KEY (SNO) REFERENCES S(SNO) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (CNO) REFERENCES C(CNO) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT='选课表';
这些语句在每个表的注释中描述了该表的用途,同时也在每个字段的注释中说明了字段的含义。在 SC 表中,注释也说明了 SNO 和 CNO 字段是外键,并指定了参考的主键。注释可以提高代码的可读性和可维护性,让开发者更容易理解表的设计和用途。

思考:
perfect!
然而没数据~,神啊,来点数据吧!
4. 数据模拟

提问:
根据刚才设计的表结构,写出insert脚本生成测试数据
回答:
以下是插入脚本,可以用来生成测试数据:
-- 插入学生数据
INSERT INTO S (SNO, SNAME, AGE, SEX) VALUES
('S001', '张三', 20, '男'),
('S002', '李四', 21, '男'),
('S003', '王五', 19, '女'),
('S004', '赵六', 20, '女'),
('S005', '钱七', 22, '男'),
('S006', '孙八', 20, '女'),
('S007', '周九', 19, '男'),
('S008', '吴十', 21, '男');-- 插入课程数据
INSERT INTO C (CNO, CNAME, TEACHER) VALUES
('C001', '数据库系统', '张老师'),
('C002', '计算机网络', '李老师'),
('C003', '算法设计', '王老师'),
('C004', '操作系统', '赵老师'),
('C005', '编译原理', '钱老师');-- 插入选课数据
INSERT INTO SC (SNO, CNO, GRADE) VALUES
('S001', 'C001', 80),
('S001', 'C002', 85),
('S001', 'C003', 90),
('S002', 'C001', 75),
('S002', 'C002', 85),
('S002', 'C003', 80),
('S003', 'C002', 90),
('S003', 'C003', 95),
('S004', 'C002', 80),
('S004', 'C003', 85),
('S005', 'C001', 90),
('S005', 'C002', 80),
('S005', 'C003', 85),
('S006', 'C001', 85),
('S006', 'C003', 90),
('S007', 'C003', 75),
('S008', 'C001', 80),
('S008', 'C002', 75),
('S008', 'C003', 85);
这个脚本向学生表 S,课程表 C 和选课表 SC 中分别插入了 8,5 和 18 条记录,用于模拟测试数据。这些数据包括学生的学号、姓名、年龄和性别,课程的课程号、课程名称和任课教师,以及学生选修的课程号和成绩。可以根据需要进行修改。



思考:
太强了~
现在真正的考验来了,增删查改会不会?
5. 查询成绩

提问:
查询课程 算法设计 成绩在60分以上的学生姓名、性别、年龄
回答:
以下是查询课程 “算法设计” 成绩在60分以上的学生姓名、性别、年龄的SQL语句:
SELECT S.SNAME, S.SEX, S.AGE
FROM S
INNER JOIN SC ON S.SNO = SC.SNO
INNER JOIN C ON SC.CNO = C.CNO
WHERE C.CNAME = '算法设计' AND SC.GRADE >= 60;
这个查询使用了内连接,将学生表 S,选课表 SC 和课程表 C 进行联结。通过在 WHERE 子句中设置限制条件,我们只保留选修 “算法设计” 并且成绩 >= 60 分的学生。最后,我们从结果中选择所需的学生信息,包括姓名、性别和年龄,并返回这些信息。

思考:
太强了~
提问:
写个SQL语句,查询每门课程前五名的学生
回答:
以下是查询每门课程前五名的学生的SQL语句:
SELECT C.CNO, C.CNAME, SC.SNO, S.SNAME, SC.GRADE
FROM C
INNER JOIN SC ON C.CNO = SC.CNO
INNER JOIN S ON SC.SNO = S.SNO
WHERE (SELECT COUNT(*) FROM SC AS SC2 WHERE SC2.CNO = SC.CNO AND SC2.GRADE > SC.GRADE
) < 5
ORDER BY C.CNO, SC.GRADE DESC;
该查询使用了一个子查询来计算每个学生在每门课程中的排名。子查询检查每个学生的成绩是否比其他学生高,并计算出他们的排名。在外层的查询中,我们可以使用子查询计算每门课程前五名的学生,并返回这些学生的成绩和其他信息。最后,使用 ORDER BY 子句按照课程号和成绩降序排序。
6. 修改课程任课老师

提问:
更改编译原理课程的老师为郑老师
回答:
以下是更改编译原理课程的老师为郑老师的 SQL 语句:
UPDATE C
SET TEACHER = '郑老师'
WHERE CNAME = '编译原理';
这个语句使用了 UPDATE 命令来更新课程表 C 中的记录。通过 WHERE 子句限定课程名称为 “编译原理”,然后使用 SET 子句将课程对应的老师名称修改为 “郑老师”。这样,所有 “编译原理” 课程都将对应着这位新的老师。

思考:
能分解出我的问题,不错
7. 删除课程

提问:
删除操作系统课程
回答:
以下是删除操作系统课程的 SQL 语句:
DELETE FROM C
WHERE CNAME = '操作系统';
这个语句使用了 DELETE 命令从课程表 C 中删除记录。通过 WHERE 子句限定课程名称为 “操作系统”,这样只有 “操作系统” 课程对应的记录将被删除。注意,该操作将不仅删除课程表中的记录,还将删除选课表中所有选修该课程的学生的成绩记录。
思考:
这个课程没人选?换一个
8. 删除一个有关联数据的课程

提问:
删除计算机网络课程
回答:
以下是删除计算机网络课程的 SQL 语句:
DELETE FROM C
WHERE CNAME = '计算机网络';
这个语句使用了 DELETE 命令从课程表 C 中删除记录。通过 WHERE 子句限定课程名称为 “计算机网络”,这样只有 “计算机网络” 课程对应的记录将被删除。注意,该操作将不仅删除课程表中的记录,还将删除选课表中所有选修该课程的学生的成绩记录。


思考:
验证成功
总结
这个经典的数据库设计和基本增删查改,对于ChatGPT来说,简直是小菜一碟。
而且扎心的是,每步操作都有理有据有提示,这是要干掉搜索引擎的节奏?
相关文章:
你还在手撸SQL?ChatGPT笑晕在厕所
文章目录你还在手撸SQL?ChatGPT笑晕在厕所一、背景二、面向Chat编程1. 数据库设计2. 建表语句3. 加中文注释4. 数据模拟5. 查询成绩6. 修改课程任课老师7. 删除课程8. 删除一个有关联数据的课程总结你还在手撸SQL?ChatGPT笑晕在厕所 一、背景 经典3表设…...
【Redis】Redis慢查询
文章目录慢查询记录慢查询两个配置参数修改配置参数慢查询日志慢查询记录 我们都知道像mysql等持久化数据库会有慢查询日志,其实Redis中也有慢查询日志的功能。慢查询就是系统在执行命令的前后计算每条命令的执行时间,如果超过我们预设的时间,…...
【Kubernetes】第二十一篇 - k8s 项目部署流程和操作梳理
一,前言 上一篇,介绍了 k8s 污点和容忍度; 在了解前面 k8s 介绍之后,设计并完成一个前后端项目的部署和持续集成; 本篇,介绍基于 k8s 项目部署流程设计; 二,项目部署流程设计 本…...
推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术
搜索Query理解和语义召回技术 随着用户规模和产品的发展, 搜索面临着越来越大的 query 长尾化挑战,query 理解是提升搜索召回质量的关键。本次将介绍搜索在 query term weighting,同义词扩展,query 改写,以及语义召回等方向上的实践方法和落地情况。 1.面临问题:长尾 qu…...
【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)
点击下载源码 医院挂号系统主要用于实现医院的挂号,前台基本功能包括:用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括:系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如…...
Pandas库:从入门到应用(一)
一、Pandas简介 pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。 pandas的主要数据结构是 **Series(**⼀维数据)与 DataFrame (⼆维数据…...
MySQL中concat()、concat_ws()、group_concat()函数使用
在平时工作中,经常记不清或者记混他们的用法,正好有时间就记录一下~concat()函数语法:concat(str1, str2, int1...)例如执行sql:SELECT CONCAT(id,USERNAME,USER_PHONE) FROM tb_user输出查询结果为: 1test15216756754…...
【JavaEE初阶】第四节.文件操作 和 IO (上篇)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件 1.1 文件的概念 1.2 文件的路径二、 Java中文件系统操作 2.1 File类的属性 2.2 File类的构造方法 2.3 File类的方法 …...
开源免费堡垒机Teleport堡垒机的安装
准备:纯净centos7系统一个作为堡垒机,若干个linux系统或windows系统服务器作为受保护的服务器 堡垒机IP:192.168.1.15 服务器IP:192.168.1.10 1、teleport安装 下载地址: https://www.tp4a.com/static/download/teleport-server-linux-x64-3.6.4-b3.tar.gz xshell上传压缩…...
图形报表ECharts
图形报表ECharts1 图形报表ECharts1.1 ECharts简介-富客户端图表库ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏…...
便捷式储能电源核心技术--单相逆变器设计
便捷式储能电源核心技术–单相逆变器设计 1.逆变器的规格参数 输入电压直流400V输出电压交流rms220V开关频率10kHz滤波电容6.23uF控制方式单极性倍频2.视频学习链接 视频学习链接 3.主电路仿真设计...
Gamma矫正
Gamma 曲线Gamma校正被使用在8位RGB图中。用来解决在有限的存储空间中保存尽可能多的人类感受敏感的色彩内容。Gamma 矫正Gamma校正的方式就是采样时,和输出到显示器给人类看时,对亮度进行的调整.如采样时 Gamma1/2.2 调亮Gamma,如显示时 Gamma2.2 调暗Gamma实际亮度…...
速懂cookie,session,token
文章目录cookiesessiontoken区别cookie 是浏览器提供的一种能力,可以在每次发起请求前,带上cookie里面的内容(一些key,value值) 分类: 会话级cookie:默认情况,就是会话级cookie&…...
javaEE初阶 — HTML 中的常见标签
文章目录注释标签标题标签:h1 h6段落标签:p换行标签:br格式化标签图片标签:img1. img 的 alt 属性2. img 的 title 属性3. width 与 heigth 属性用来描述图的尺寸超链接标签:a表格标签列表标签表单标签1. from 标签2. …...
MySQL慢查询
2 慢查询 2.1 慢查询介绍 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL&…...
tensorflow【import transformers 报错】
目录 一、安装 安装好了tensorflow,但是import时候报错: import transformers 报错 一、安装 (1)创建环境: conda create -n [name] python3.3-3.7 (2)激活环境: conda activate [name] …...
JMU软件20 计算机网络复习
文章目录题型单位换算第一章协议与划分层次、网络协议的三个组成要素,分层的思想等协议网络协议的三个组成要素分层的思想⭐计算机网络体系结构OSI 的七层协议TCP/IP 的四层协议五层协议发送时延、传播时延、总时延、往返时间RTT计算第二章 物理层传输媒体导向性传输…...
Java基础之《dubbo(1)—dubbo基础入门》
一、为什么要使用dubbo 1、dubbo是什么 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 2、dubbo有何特点 (1)远程通讯:提供透明化的远程方法调用,提供…...
HTML注入的一种攻击思路(超链接替换为点击验证,现在常见)
目录 背景 利用方法 举一反三 场景1:截获 TOKEN 场景2:截获后台信息 总结...
Redis-6集群
文章目录前言Redis集群原理搭建Redis集群集群拓展后记前言 前两期介绍和搭建了Redis的主从复制架构和哨兵模式,虽然哨兵模式能够实现自动故障转移主备切换,一定程度上提高了系统的容错性 但这两种架构模式都不能解决单节点的并发压力和物理上线的问题&…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
