数据库操作练习

一.向heros表中新增一列信息,添加一些约束,并尝试查询一些信息

//向表中添加一列age信息
alter table heros add column age int;//id列添加主键约束,设置自增
alter table heros modify column id int auto_increment primary key;//name列添加唯一约束
alter table heros add constraint unique_name unique (name);//novel列添加非空约束
alter table heros modify column novel varchar(50) not NULL;

执行sql语句后:

尝试插入违反约束的信息:

 查询:

//查询id小于5的信息,包括id,name,novel
select id,name,novel from heros where id<5;//查询gender为女的信息,包括name,novel
select name,novel from heros where gender='女';//查询novel为三国演义的信息,包括id,name,novel
select id,name,novel from heros where novel='三国演义';...

二、课堂代码练习

插入语句 INSERT INTO

删除语句DELETE和TRUNCATE

更新语句UPDATE和replace

查询语句SELECT

条件查询

查询排序

聚合函数

分组查询

插入语句 INSERT INTO

​​​​​​​语法:insert into table_name[(field1,field2...)] values (value1,value2...);
//向表中插入一条信息
insert into t_student value(1, '小明', '男', 18, '139', '成都');//插入id,姓名,性别
insert into t_student(id,name,gender) value(1, '小强', '男');

 

 删除语句DELETE和TRUNCATE

​​​​​​​语法:delete from table_name [where 条件...];truncate table table_name;
//删除名字叫小强的信息
delete from t_student where name='小强';

更新语句UPDATE和replace

语法:update table_name set 字段1=新值[, 字段2=新值...]  [where 条件];

用于修改表中的数据,如果没有加入where条件会将整列所有的值都进行修改。

//将id为2的同学年龄改为30
update t_student set age = 30 where id = 2;//将id为1的同学电话改为110,住址改为四川
update t_student set tel='110' , address='四川' where id=1;//将所有的年龄都改为20
update t_student set age=18+2;
replace into t_student (id, name, age) values(1, '小强', 22);

查询语句SELECT

语法:
select field1, field2...
from table_name
where 条件
//查询t_student中的所有信息
select * from t_student;//查询表中某些字段的信息
select id,name,tel from t_student;//查询某些特定字段的信息
select * from t_student where id=1;
select id,name,tel from t_student where id=1;

select语句中的特殊情况
        对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)
        对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)
        运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算

SELECT 100+80; # 结果为180
SELECT '123'+80; # 只要其中一个为数值,则试图将字符型转换成数值,转换成功做预算,结果为203
SELECT 'abc'+80; # 转换不成功,则字符型数值为0,结果为80
SELECT 'This'+'is'; # 转换不成功,结果为0
SELECT 'This'+'30is'; # 'This' 无法转换为数值,因此会被视为 0,'30is' 从开头部分可以转换为数值 30(直到遇到非数字字符为止)。
SELECT NULL+80; # 只要其中一个为NULL,则结果为NULL
查询排序 order by
//将表内数据按照年龄大小排序select * from t_student order by age;//将表内数据按照id大小降序排序
select * from t_student order by id desc;
//将查询结果按照首先按照年龄继续宁排序,其次按照id大小进行排序
mysql> select * from t_student order by age,id desc;
mysql> select * from t_student order by age,id;
分组查询 group by
//查询分别有多少男生女生
select gender, count(gender) from t_student group by gender;//查询id<5的同学中分别有多少男生女生
select gender, count(gender) from t_student where id<5 group by gender;

如果直接在分组后的结果集上进行条件判断,将条件写在where中,会报错,因为结果集是分组后才能做的判断,而where实在查询前的条件判断。所以不能使用where,必须使用having。

//查询女生有多少人(分组前筛选)
select gender, count(gender) from t_student where gender='女' group by gender;//查询女生有多少人(分组后筛选)
select gender, count(gender) from t_student group by gender having gender='女';

三、题目练习

一、单表查询

1、显示所有职工的基本信息。   

2、查询所有职工所属部门的部门号,不显示重复的部门号。  

3、求出所有职工的人数。  

4、列出最高工和最低工资。   

5、列出职工的平均工资和总工资。   

6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。 

7、显示所有职工的年龄。 

8、列出所有姓刘的职工的职工号、姓名和出生日期。

9、列出1960年以前出生的职工的姓名、参加工作日期。

10、列出工资在1000-2000之间的所有职工姓名。 

11、列出所有陈姓和李姓的职工姓名。

12、列出所有部门号为2和3的职工号、姓名、党员否。  

13、将职工表worker中的职工按出生的先后顺序排序。

14、显示工资最高的前3名职工的职工号和姓名。 

15、求出各部门党员的人数。 

16、统计各部门的工资和平均工资

17、列出总人数大于4的部门号和总人数。

 二、多表查询

3.查询student表的所有记录

​4.查询student表的第2条到4条记录

​5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

6.从student表中查询计算机系和英语系的学生的信息

​7.从student表中查询年龄18~22岁的学生信息

​8.从student表中查询每个院系有多少人

​9.从score表中查询每个科目的最高分

​10.查询李四的考试科目(c_name)和考试成绩(grade)

​11.用连接的方式查询所有学生的信息和考试信息

​12.计算每个学生的总成绩

​13.计算每个考试科目的平均成绩

​14.查询计算机成绩低于95的学生信息

​15.查询同时参加计算机和英语考试的学生的信息

​16.将计算机考试成绩按从高到低进行排序

​17.从student表和score表中查询出学生的学号,然后合并查询结果

​18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

​19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等
CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` float(8,2) NOT NULL,`政治面貌` varchar(10) NOT NULL DEFAULT '群众',`姓名` varchar(20) NOT NULL,`出生日期` date NOT NULL,PRIMARY KEY (`职工号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1003, '2011-1-4', 8500.00, '党员', '王亮', '1983-6-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-9-5');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1005, '2014-4-1', 4800.00, '党员', '钱七', '1992-12-30');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1006, '2017-5-5', 4500.00, '党员', '孙八', '1996-9-2');

1、显示所有职工的基本信息。   

 select * from worker;

2、查询所有职工所属部门的部门号,不显示重复的部门号。  

select distinct `部门号` from worker;

3、求出所有职工的人数。  

select count(*) as `职工总人数` from worker;

4、列出最高工和最低工资。   

select max(`工资`) as `最高工资`,min(`工资`) as `最低工资` from worker;

5、列出职工的平均工资和总工资。   

select avg(`工资`) as `平均工资`, sum(`工资`) as `总工资` from worker;

6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。

create table `工作日期表` select `职工号`, `姓名`, `工作时间` from worker;
select * from `工作日期表`;

7、显示所有职工的年龄。 

select `姓名`, 2025-year(`出生日期`) as `年龄` from worker;

8、列出所有姓刘的职工的职工号、姓名和出生日期。

select `职工号`, `姓名`, `出生日期` from worker where `姓名` like '刘%';
//因为原表没有姓刘的没有查询结果

9、列出1960年以前出生的职工的姓名、参加工作日期。

 select `姓名`, `工作时间` from worker where year(`出生日期`) < 1960;

10、列出工资在1000-2000之间的所有职工姓名。 

select `姓名` from worker where `工资` >= 1000 and `工资` <= 2000;
select `姓名` from worker where not (`工资`<=1000 or `工资`>2000);
select `姓名` from worker where `工资` between 1000 and 2000;
//因为没有符合 1000-2000 的所以下面用 3000-5000 的演示

11、列出所有陈姓和李姓的职工姓名。

 select `姓名` from worker where `姓名` like '陈%' or `姓名` like ' 李%';

12、列出所有部门号为2和3的职工号、姓名、党员否。  

select `部门号`, `职工号`, `姓名`, `政治面貌` from worker where `部门号`=102 or`部门号`=103;

13、将职工表worker中的职工按出生的先后顺序排序。

select * from worker order by `出生日期`;

14、显示工资最高的前3名职工的职工号和姓名。 

select `职工号`, `姓名` from worker order by `工资` desc limit 3;

15、求出各部门党员的人数。 

select `部门号`, count(*) as `党员人数` from worker where `政治面貌` = '党员' group by `部门号`;

16、统计各部门的工资和平均工资

select `部门号`, sum(`工资`) as `总工资`, avg(`工资`) as `平均工资` from worker group by `部门号`;

17、列出总人数大于4的部门号和总人数。

select `部门号`, count(*) as `总人数` from worker group by `部门号`having count(*)>4;

二、多表查询

1.创建student和score表
CREATE TABLE student (id INT(10) NOT NULL UNIQUE PRIMARY KEY,name VARCHAR(20) NOT NULL,sex VARCHAR(4),birth YEAR,department VARCHAR(20),address VARCHAR(50)
);
创建score表。SQL代码如下:
CREATE TABLE `score` (`id` INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,`stu_id` INT(10) NOT NULL,`c_name` VARCHAR(20),`grade` INT(10)
);
2.为student表和score表增加记录
向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);

3.查询student表的所有记录

select * from student;

​4.查询student表的第2条到4条记录

select * from student limit 3 offset 1;

​5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

select `id`, `name`, `department` from student;

6.从student表中查询计算机系和英语系的学生的信息

select * from student where `department` like '计算机系' or `department` like '英语系';

​7.从student表中查询年龄18~22岁的学生信息

select * from student where 2025 - `birth` between 18 and 22;
//因为没有18-22,下面演示的是18-50

​8.从student表中查询每个院系有多少人

select `department`, count(*) as `人数` from `student` group by `department`;

​9.从score表中查询每个科目的最高分

select `c_name`, max(`grade`) as `最高分` from score group by `c_name`;

​10.查询李四的考试科目(c_name)和考试成绩(grade)

select c_name, grade from score where score.stu_id=(select id from
student where name='李四');

​11.用连接的方式查询所有学生的信息和考试信息

select * from student, score where student.id = score.stu_id;

​12.计算每个学生的总成绩

select stu_id, sum(grade) as `总成绩` from score group by stu_id;

​13.计算每个考试科目的平均成绩

select c_name, avg(grade) as `平均成绩` from score group by c_name;

​14.查询计算机成绩低于95的学生信息

select * from student join score on student.id=score.stu_id where c_name='计算机' and grade<95;

​15.查询同时参加计算机和英语考试的学生的信息

select * from student where id in (select stu_id from score where c_name='计算机') and id in (select stu_id from score where c_name='英语');

​16.将计算机考试成绩按从高到低进行排序

select * from score where c_name = '计算机' order by grade desc;

​17.从student表和score表中查询出学生的学号,然后合并查询结果

select id from student union select stu_id from score;

​18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

select name, department, c_name, grade from student, score where student.id=score.stu_id and (name like '张%' or name like '王%' );

​19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

select name, 2025-birth as `age`, department, c_name, grade from student, score where student.id=score.stu_id and address like '湖南%' ;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF【WEB】学习笔记1号刊

Kali的小工具箱 curl www.xxx.com&#xff1a;查看服务器响应返回的信息 curl -I www.xxx.com:查看响应的文件头 一、cmd执行命令 ipconfig&#xff1a;ip地址配置等&#xff1b; 二、 Kali操作 1.sudo su&#xff1b; 2.msfconsole 3.search ms17_010 永恒之蓝&#xff…

在 SaaS 应用上构建 BI 能力的实战之路

SaaS 产品在持续运营过程中积累了大量数据&#xff0c;这些数据不仅是数字的记录&#xff0c;更是洞察市场趋势、优化产品功能、提升用户体验的宝贵资源。 因此&#xff0c;大部分的 SaaS 产品在发展到一定阶段后&#xff0c;都会开始构建自己的报表模块或分析模块&#xff0c;…

gonet开源游戏服务器环境配置

1.mysql搭建 搜索mysql-server apt安装包名 sudo apt search mysql-server 安装mysql-server sudo apt-get install mysql-server 安装完成后会&#xff0c;启动mysql服务及创建系统服务 查看服务状态 systemctl status mysql.service 使用超级权限登陆mysql sudo mysql 授…

STM32基础篇(五)------TIM定时器比较输出

简介 定时器的类型 在《STM32F10xxx参考手册&#xff08;中文&#xff09;.pdf》中可以看到下面三个章节 因此可以得到 高级定时器含有通用定时器的所有功能&#xff0c;通用定时器含有基本定时器的所有功能&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;…

基于STM32的两路电压测量仿真设计Proteus仿真+程序设计+设计报告+讲解视频

基于STM32两路电压测量仿真设计(Proteus仿真程序设计设计报告讲解视频&#xff09; 仿真图Proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;C0106 1.主要功能 基于STM32单片机设计一个双路电压检测器 1.系统可以测量两路输入电…

210、【图论】课程表(Python)

题目 思路 这道题本质上是一个拓扑排序。每次先统计每个点的入度个数、然后再统计点与点之间的邻接关系&#xff0c;找到入度为0的点作为起始遍历点。之后每遍历到这个点之后&#xff0c;就把这个点后续的邻接关系边的点入度减去一。当某个点入度为0时&#xff0c;继续被加入其…

react 杂记2 优化hook

useEffect 每个Fiber节点都会为该组件的所有effec对象​维护一个链表, 场景​类组件方法函数组件等效写法差异说明挂载时执行componentDidMount()useEffect(fn, [])useEffect 副作用在浏览器绘制后异步执行&#xff1b;componentDidMount 是同步的。更新时执行componentDidUp…

Java内存泄漏、CPU飙升排查

在Java应用开发中&#xff0c;内存泄漏和CPU飙升是两类高频出现的生产问题&#xff0c;也是常见的面试问题。这里通过一些demo进行实践。 内存泄漏 private static List<byte[]> leakList new ArrayList<>();GetMapping("/memory/leak") public void …

【搜索】dfs(回溯、剪枝、记忆化)

个人主页&#xff1a;Guiat 归属专栏&#xff1a;我讲你听 文章目录 1. dfs 回溯1.1 回溯介绍1.2 回溯模板1.3 回溯经典题目 2. dfs 剪枝2.1 剪枝介绍2. 2 剪枝模板2.3 经典题目 3. dfs 记忆化3.1 记忆化介绍3.2 记忆化示例 正文 1. dfs 回溯 1.1 回溯介绍 核心思想&#xff…

emWin自定义键盘布局

emWin V6.46提供了自带的键盘控件&#xff0c;用起来功能还是比较齐全的。但是有些时候自带的布局不能满足要求&#xff0c;此时可用键盘的结构体来自定义布局。 KEYDEF_KEYBOARD MyNumPad;static KEYDEF_AREA NumPadKeyArea[4] {{10, 0, 720, 250}, //每行按钮的坐标和占用…

人工智能之数学基础:瑞利商与特征值的关系

本文重点 瑞利商是线性代数中的一个重要概念,具有丰富的性质和广泛的应用。通过求解瑞利商的最大值或最小值,可以找到矩阵的特征值和特征向量,进而解决降维、聚类、优化和计算机视觉等领域的问题。广义瑞利商作为瑞利商的推广形式,在机器学习和数据分析中也发挥着重要作用…

Mysql配套测试之更新篇

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 测试准备&#xff1a; 更新测试 &#xff1a; 1.将孙悟空同学的数学成…

2025年如何避免使用验证码求解器时被IP封禁

引言 2025年&#xff0c;验证码求解器已成为自动化网络抓取和其他在线流程的关键工具。然而&#xff0c;自动化用户面临的一个常见挑战是IP封禁。当网站检测到自动化活动时&#xff0c;通常会阻止发出请求的IP地址&#xff0c;导致验证码挑战无法解决。本文将探讨使用验证码求…

ElasticSearch 可观测性最佳实践

ElasticSearch 概述 ElasticSearch 是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理 PB 级别&#xff08;大数据时代&#xff09;的数据。ES 也使用 Java 开…

操作系统的特征

并发 指两个或多个事件在同一时间间隔内发生。这些时间宏观上是同时发生的&#xff0c;但微观上是交替发生的。 并行 指两个或多个事件在同一时刻同时发生 操作系统的并发性 指计算机系统重“同时”运行着多个程序&#xff0c;这些程序宏观上看是同时运行的&#xff0c;而…

数据结构——B树、B+树、哈夫曼树

目录 一、B树概念1.B树的构造2 .B树的特点 二、B树概念1.B树构造2.B树的特点 三、B树和B树的区别四、哈夫曼树1.哈夫曼树的基本概念2.哈夫曼树的构建 一、B树概念 B树的出现是为了弥合不同的存储级别之间的访问速度上的巨大差异&#xff0c;实现高效的 I/O。平衡二叉树的查找效…

电子签的法律效力、业务合规与监管难点

撰稿 | 区长 来源 | 贝多财经 据2025年央视“3.15”晚会报道&#xff0c;借贷宝、人人信等平台上存在高利贷的情形。放贷人与借款人在平台签署借款合同&#xff0c;但是实际借款金额低于合同金额&#xff0c;从而绕开平台对利率的限制。这引发了人们对电子签法律效力、业务合…

资金管理策略思路

详细描述了完整交易策略的实现细节&#xff0c;主要包括输入参数、变量定义、趋势判断、入场与出场条件、止损与止盈设置等多个方面。 输入参数&#xff08;Input&#xff09;&#xff1a; EntryFrL (.6)&#xff1a;多头入场的前一日波动范围的倍数。 EntryFrS (.3)&#xff1…

体育直播视频源格式解析:M3U8 vs FLV

在体育直播领域&#xff0c;视频源的格式选择直接影响着直播的流畅度、画质以及兼容性。目前&#xff0c;M3U8 和 FLV 是两种最为常见的视频流格式&#xff0c;它们各有优劣&#xff0c;适用于不同的场景。本文将从技术原理、优缺点以及应用场景等方面对 M3U8 和 FLV 进行详细解…

【动态规划】下降路径最小和

跟之前不同由于可能取到最右上角值&#xff0c;则左右各加一列&#xff0c;并且由于求最小值&#xff0c;则加的列须设置为正无穷大&#xff1b; class Solution { public:int minFallingPathSum(vector<vector<int>>& matrix) {int nmatrix.size();vector<…