你还在手撸SQL?ChatGPT笑晕在厕所

news2025/1/24 4:50:34

文章目录

  • 你还在手撸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字符串任课教师的姓名

![请添加图片描述](https://img-blog.csdnimg.cn/f2b07cf07a0f47b2b15aa86afb8186a5.jpeg

注释中的外键意味着该字段参照另一个表中的主键。
在选课表 SC 中,SNO 和 CNO 分别参照学生表 S 和课程表 C 的主键 SNO 和 CNO。
这个设计可以满足学生、课程和选课的基本信息需要,并允许进行查询和关联操作。

思考:

大叔有点懒,给我个表算什么,我要建表语句

2. 建表语句

在这里插入图片描述

提问:
对这个设计,输出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来说,简直是小菜一碟。
而且扎心的是,每步操作都有理有据有提示,这是要干掉搜索引擎的节奏?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)

点击下载源码 医院挂号系统主要用于实现医院的挂号&#xff0c;前台基本功能包括&#xff1a;用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括&#xff1a;系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如…

图文讲解MongoDB该怎么安装

一、安装前必读 我这里是Centos7 Linux 内核 注意&#xff1a;本文的命令使用的是 root 用户登录执行&#xff0c;不是 root 的话所有命令前面要加 sudo 二、环境配置 2.1 停止防火墙 systemctl status firewalld #查看firewall systemctl stop firewalld …

Vector - CAPL - 测试报告函数介绍

测试报告是我们开发脚本中必备的一个模块,今天我们介绍一下测试报告中的常用函数,让我们开发出更加清晰、美观的报告,让我们的测试工作更加轻松。 TestCaseComment

备战蓝桥python——完全平方数

完全平方数 链接: 完全平方数 暴力解法&#xff1a; n int(input()) for i in range(1, n1):if(((i*n)**0.5)%10.0):print(i)break运用数论相关知识求解 任意一个正整数都可以被分解成若干个质数乘积的形式&#xff0c;例如 :2022∗5120 \ 2^{2}*5^{1}\,20 22∗51 由此…

JVM的了解与学习

一:jvm是什么 jvm是java虚拟机java Virtual Machine的缩写 jdk包含jre和java DevelopmentTools 二:什么是java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。java虚拟机有自己完善的硬体结构,如处理器、堆栈、寄存器等,还有…

Hive映射Hbase

依赖条件 已有Hadoop、Hive、Zookeeper、HBase 环境。 为什么Hive要映射Hbase HBase 只提供了简单的基于 Key 值的快速查询能力&#xff0c;没法进行大量的条件查询&#xff0c;对于数据分析来说&#xff0c;不太友好。 hive 映射 hbase 为用户提供一种 sqlOnHbase 的方法。…

zookeeper 集群配置

文章目录zookeeper 集群配置1、集群安装zookeeper 集群配置 1、集群安装 1) 集群安装 在 hadoop102、hadoop103 和 hadoop104 三个节点上都部署 Zookeeper。 2) 解压安装 在 hadoop102 解压 Zookeeper 安装包到/opt目录下 输入命令&#xff1a;tar -zxvf apache-zookeeper-3.…

C++——IO流

目录 C语言的输入与输出 流是什么 CIO流 C标准IO流 C文件IO流 二进制读写 文本读写 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。…

自学大数据第5天~hadoop集群搭建(二)

配置集群/分布式环境 1,修改文件workers 需要把所有节点数据节点的主机名写入该文件,每行一个,默认localhost(即把本机(namenode也作为数据节点),所以我们在伪分布式是没有配置该文件; 在进行分布式时需要删掉localhost(又可能文件中没有该配置,没有那就不用删了,配置一下数据…

147597-66-8,p-SCN-Bn-NOTA,NOTA-P-苯-NCS新型双功能螯合剂

p-SCN-Bn-NOTA | NOTA-P-苯-NCS | CAS&#xff1a;147597-66-8 | 纯度&#xff1a;95%1.p-SCN-Bn-NOTA试剂信息&#xff1a;CAS号&#xff1a;147597-66-8外观&#xff1a;白色固体分子量&#xff1a;C20H26N4O6S分子式&#xff1a;448.4928溶解性&#xff1a;溶于有机溶剂&…

Java语法中的方法引用::是个什么鬼?

1.函数式接口 函数式接口&#xff08;Functional Interface&#xff09;就是一个有且仅有一个抽象方法&#xff08;通俗来说就是只有一个方法要去被实现&#xff0c;因此我们也能通过这个去动态推断参数类型&#xff09;&#xff0c;但是可以拥有多个非抽象方法的接口。函数式接…

大数据架构设计与数据计算流程

大数据架构设计Hadoop有3个核心组件&#xff1a;分布式文件系统HDFS&#xff1b;分布式运算编程框架MapReduce&#xff1b;分布式资源调度平台YARN。HBase&#xff0c;Hadoop dataBase&#xff0c;基于HDFS的NoSQL数据库&#xff0c;面向列式的内存存储&#xff0c;定期将内存数…

基于MyBatis依次、批量、分页增删改查

我们知道处理数据有三种思路&#xff1a;依次、批量、分页&#xff0c;对应方法如下 依次处理&#xff1a;在 Java 里面写 for 循环&#xff0c;依次使用 SQL 语句&#xff0c;频繁连接断开数据库批量处理&#xff1a;在 MyBatis 里面用 <foreach> 拼接成一条长 SQL 语句…

详细讲解零拷贝机制的进化过程

一、传统拷贝方式&#xff08;一&#xff09;操作系统经过4次拷贝CPU 负责将数据从磁盘搬运到内核空间的 Page Cache 中&#xff1b;CPU 负责将数据从内核空间的 Page Cache 搬运到用户空间的缓冲区&#xff1b;CPU 负责将数据从用户空间的缓冲区搬运到内核空间的 Socket 缓冲区…

Caddy2学习笔记——Caddy2反向代理docker版本的headscale

一、个人环境概述 本人拥有一个国内云服务商的云主机和一个备案好的域名&#xff0c;通过caddy2来作为web服务器。我的云主机系统是Ubuntu。 我的云主机是公网ip&#xff0c;地址为&#xff1a;43.126.100.78&#xff1b;我备案好的域名是&#xff1a;hotgirl.com。后面的文章…

CNStack 助推龙源电力扛起“双碳”大旗

作者&#xff1a;CNStack 容器平台、龙源电力&#xff1a;张悦超 、党旗 龙源电力容器云项目背景 龙源电力集团是世界第一大风电运营商&#xff0c; 随着国家西部大开发战略推进&#xff0c;龙源电力已经把风力发电场铺设到全国各地&#xff0c;甚至是交通极不便利的偏远地区&…

[2.1.6]进程管理——线程的实现方式和多线程模型

文章目录第二章 进程管理线程的实现方式和多线程模型一、线程的实现方式&#xff08;一&#xff09;用户级线程&#xff08;二&#xff09;内核级线程二、多线程模型&#xff08;一&#xff09;一对一模型&#xff08;二&#xff09;多对一模型&#xff08;三&#xff09;多对多…

STM32MP157-Linux输入设备应用编程-多点触摸屏编程

文章目录前言多点触摸屏tslib库简介tslib库移植tslib库函数使用打开触摸屏设备配置触摸屏设备打开并配置触摸屏设备读取触摸屏设备多点触摸屏程序编写触点数据结构体定义事件定义计算触点数量判断单击、双击判断长按、移动判断放大、缩小外部调用代码流程图&#xff08;草图&am…

Jetson(Ubuntu18.04)设备无法ping通百度能ping通局域网错误集合,(神奇的是这样的情况下Todesk等远程确没有问题)

一、.打开DNS,意思是取消注释添加114.114.114.114 &#xff0c;文件如下 vim /etc/systemd/resolved.conf [Resolve] #DNS #FallbackDNS #Domains #LLMNRno #MulticastDNSno #DNSSECno #Cacheyes #DNSStubListeneryes然后重启服务sudo systemctl restart systemd-resolved.se…

Monkey测试之ADB命令的安装与使用(安卓)

一、ADB & Monkey 介绍 1.ADB ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具&#xff0c;可以直接操作管理…