你还在手撸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 | 字符串 | 任课教师的姓名 |
 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的主从复制架构和哨兵模式,虽然哨兵模式能够实现自动故障转移主备切换,一定程度上提高了系统的容错性 但这两种架构模式都不能解决单节点的并发压力和物理上线的问题&…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...