MySQL 多表查询练习

news2024/11/27 12:52:49

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表增加记录
(1)向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,'计算机系', '湖南省衡阳市');

插入数据,查询student表,效果如图:
在这里插入图片描述

(2)向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);

插入数据后查询score表得:
在这里插入图片描述

1.查询student表的所有记录

mysql> select  * from student; 

效果如图:
在这里插入图片描述
2.查询student表的第2条到4条记录

#法一:用in范围查找
mysql> select * from student where id in(902,903,904);

#法二:limit a,b;
#a表示的数字+1,b表示以数字a+1开始的b个数,
#本题中a表示行数+1,b表示记录数
mysql> select * from student limit 1,3;

效果如图:
法一:
在这里插入图片描述
法二:
在这里插入图片描述

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

mysql> select id 学号, name 姓名, department 院系 from student;

效果如图:
在这里插入图片描述
4.从student表中查询计算机系和英语系的学生的信息

 select id 学号, name 姓名, sex 性别, birth 出生日期, department 院系, address 地址 from student where department = '计算机系' or department = '英语系';

效果如图:
在这里插入图片描述
5.从student表中查询年龄18~22岁的学生信息

#使用右连接对stu1和stu2的数据进行连接查询。
#其中(select id ,2010-`birth` age from student)表示出学生的年龄和id,便于进行连接查询
mysql> select stu1.id 学号,stu1.name 姓名,stu1.sex 性别,stu1.birth,stu2.age 年龄
    -> from student stu1 right join
    -> (select id ,2010-`birth` age from student) as stu2 on
    -> stu1.id = stu2.id
    -> where stu2.age between 18 and 22;

效果如图:
在这里插入图片描述

mysql> select id 学号, 2010-`birth`  age from student;

stu2表的效果图:
在这里插入图片描述
6.从student表中查询每个院系有多少人

mysql> select department 院系,count(id) 人数 from student group by department;

效果如图:
在这里插入图片描述
7.从score表中查询每个科目的最高分

mysql> select c_name 科目, max(grade) 最高分 from score group by c_name;

效果如图:
在这里插入图片描述
8.查询李四的考试科目(c_name)和考试成绩(grade)

mysql> select sc.c_name 考试科目, sc.grade 考试成绩 from score sc
    -> right join student stu on
    -> sc.stu_id = stu.id
    -> where stu.name = '李四';

效果如图:
在这里插入图片描述
9.用连接的方式查询所有学生的信息和考试信息


#此处为了观感,将student表的address 的类型改为varchar(30) 
#修改的SQL语句:mysql> alter table student modify address varchar(30) ;

mysql> select stu.id 学号,stu.name 姓名,stu.sex 性别, stu.birth 出生日期,stu.address 地址,sc.c_name 科目,sc.grade 分数 from student stu                                           -> inner join score sc on                                                                                                                                                     -> stu.id = sc.stu_id ; 

效果如图:
在这里插入图片描述
10.计算每个学生的总成绩

mysql> select stu.name 姓名, sum(sc.grade) 总分 from student stu inner join
    -> score sc on
    -> stu.id = sc.stu_id
    -> group by sc.stu_id;

效果如图:
在这里插入图片描述
11.计算每个考试科目的平均成绩

mysql> select c_name 科目, avg(grade) from score group by c_name;

效果如图:
在这里插入图片描述
12.查询计算机成绩低于95的学生信息

mysql> select stu.id 学号,stu.name 姓名, stu.sex 性别, stu.department 院系,sc.c_name 科目,sc.grade
    -> from student stu left join score sc on                                       -> stu.id = sc.stu_id
    -> where sc.c_name = '计算机' having grade < 95;

效果如图:
在这里插入图片描述
13.查询同时参加计算机和英语考试的学生的信息

mysql> select stu.id, stu.name, stu.department from student stu left join  (select * from score where c_name in ('计算机','英语')) as stu1 on stu.id = stu1.stu_id group  by  id having count(name) = 2;

效果如图:
在这里插入图片描述

#该命令查询score表中包含计算机或者英语课程的记录
mysql> select * from score where c_name in ('计算机','英语');

效果如图:
在这里插入图片描述

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

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

效果如图:
在这里插入图片描述
15.从student表和score表中查询出学生的学号,然后合并查询结果

mysql> select * from (
    -> select id from student
    -> union
    -> select stu_id from score
    -> ) id_tb;

效果如图:
在这里插入图片描述
16.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

mysql> select stu.name 姓名,stu.department 院系, sc.c_name 考试科目,sc.grade 成 绩 from student stu inner join score sc on
    -> stu.id = sc.stu_id
    -> where stu.name like '张%' or stu.name like '王%';

效果如图:
在这里插入图片描述
17.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

mysql> select stu.name 姓名, stu2.age 年龄 ,stu.department 院系, stu2.c_name 考 试科目, stu2.grade 成绩 from student stu inner join
    -> (select stu1.id,stu1.age , sc.c_name , sc.grade  from score sc left join 
    -> (select id,2010-`birth` as age from student) as stu1 on sc.stu_id = stu1.id )
    ->  as stu2 on  stu.id = stu2.id
    -> where stu.address like '湖南%';

效果如图:
在这里插入图片描述

#用两个连接方式连接,先用左连接将score表和新查询的表相连接并改别名,赋予一个新表名;将student表用内连接和新表名进行连接。
#mysql> select id,2010-`birth` as age from student;

在这里插入图片描述

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

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

相关文章

万字长文 | Hadoop 上云: 存算分离架构设计与迁移实践

一面数据原有的技术架构是在线下机房中使用 CDH 构建的大数据集群。自公司成立以来&#xff0c;每年都保持着高速增长&#xff0c;业务的增长带来了数据量的剧增。 在过去几年中&#xff0c;我们按照每 1 到 2 年的规划扩容硬件&#xff0c;但往往在半年之后就不得不再次扩容。…

KMP算法和朴素算法对比

1.KMP速求next数组 先记录做题过程 等有时间再填内容吧

6、i2c设备驱动

I2C设备驱动要使用i2c_driver和i2c_client数据结构并填充i2c_driver中的成员函数。 i2c_client一般被包 含在设备的私有信息结构体yyy_data中&#xff0c; 而i2c_driver则适合被定义为全局变量并初始化 static struct i2c_driver pca954x_driver { .driver {…

组件的插槽以及组件通信

组件的插槽以及组件通信 1. 插槽1.1. 单个插槽1.2. 多个插槽 2. 组件通信2.1. 属性绑定2.2. 事件绑定&#xff08;重点&#xff09;2.3. 获取组件实例 1. 插槽 在自定义组件的 wxml 结构中&#xff0c;可以提供一个 节点&#xff08;插槽&#xff09;&#xff0c;用于承载组件…

2023WAIC大会后记:我们距离AGI还有多远?

只有解决了算力问题&#xff0c;才能离大模型的商业化之路更进一步&#xff0c;等等问题&#xff0c;都在成为当下限制我们想象力的关键因素。继2023世界人工智能大会后&#xff0c;大模型还有多少想象力&#xff1f; 作者|思杭 编辑|皮爷 出品|产业家 1亿用户&#xff0…

当用AopContext.currentProxy()方式调用@Asyn注解的方法,发现不起作用了

1、前言 遇到到平常一些spring相关调用错误浅浅记录下 2、我们常常会用到在一个类的方法内部会去调用本类的别一个方法 我们常常会用到在一个类的方法内部会去调用本类的别一个方法&#xff0c;示例如下&#xff1a; public interface ITestAsy {String funttion1();String…

pycharm新建分支并提送至GitHub

文章目录 前言pycharm创建本地分支Push至远程分支 前言 当我们写的项目代码越来越多时&#xff0c;一个master分支无法满足需求了&#xff0c;这个时候就需要创建分支来管理代码。 创建分支可以快速的回滚到某个节点的版本&#xff0c;也可以多个开发者同时开发一个项目&#…

css:横向滚动布局

效果&#xff1a; 实现代码&#xff1a; <template><div class"index_div"><div class"container"><div class"flexBox"><div class"flex_item" v-for"item in topMenu" :key"item.id&quo…

五种不同自动化测试模型的基本介绍

随着移动互联网的发展&#xff0c;软件研发模型逐步完善&#xff0c;软件交付质量越来越受到软件公司的重视&#xff0c;软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比&#xff0c;自动化测试具备了良好的可操…

模拟实现浏览器自带的 ctrl+f 搜索功能

主要利用的就是元素的innerHtml&#xff0c;通过replace方法&#xff0c;把文本替换为带标签的文本&#xff0c;然后就有样式了 下图贴出 主要代码及效果 <template><div class"search-page"><el-input style"width: 200px" v-model"…

2023年信号处理与机器学习国际研讨会(WSPML 2023)| SPIE独立出版 快速稳定

会议简介 Brief Introduction 2023年信号处理与机器学习国际研讨会(WSPML 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.wspml.org 2023年信号处理与机器学习国际研讨会(WSPML 2023) 由西安交通大学、重庆大学光电技术及…

【学术小白如何写好论文】研究结论:结论vs结论

文章目录 一、引言二、研究结论的重要性三、研究结论的切入口&#xff08;1&#xff09;这个结论与前人研究的对话&#xff08;2&#xff09;这个研究结果本身的意义所在 四、注意事项&#xff08;1&#xff09;清楚区别&#xff08;2&#xff09;对结论的深入解析&#xff08;…

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高&#xff0c;所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压&#xff0c;具体使用方式和nginx没有什么区别&#xff0c;主要依赖文件是一下几个 nginx.exe …

qt开发技巧之嵌入式linux点击触发两次

1.问题 移植qt5.12.9到嵌入式linux系统&#xff0c;tslib作为触摸输入&#xff0c;开发平台是imx6ull&#xff0c;点击pushbutton按钮会出现触发两次点击的情况。 2.解决 vi /etc/profile&#xff0c;在 /etc/profile里添加环境变量&#xff0c;禁止QT自带输入检测&#xff0…

数据结构---手撕图解堆的实现和TopK的应用

文章目录 重要的概念树的存储方式顺序存储链式存储 堆的概念堆的实现向上调整算法一些实现过程中的技巧实现搭建堆实现出堆的操作向下调整算法 堆排序TopK 重要的概念 要讲到堆&#xff0c;先要说两个关于二叉树的概念 满二叉树&#xff1a;一个二叉树如果每一层的节点数都是最…

ylb_学习笔记02

1.随机4位数&#xff1a; String random RandomStringUtils.randomNumeric(4);System.out.println("注册验证码的随机数 random"random);2.使用http时判断响应的状态为ture&#xff08;200&#xff09;&#xff1a; response.getStatusLine().getStatusCode() Htt…

在阿里云linux上安装MySql数据库

我们先远程连接服务器 然后输入 sudo yum update重新运行一下 然后 sudo yum install mysql-server安装 mysql 服务 其中有两次 y n 选择 都选y就好了 然后 运行 sudo service mysqld start启动MySql 然后 我们查看一下MySql sudo service mysqld status

谷歌浏览器,网站多账号登陆的方法

在测试系统某些功能的时候&#xff0c;不同的模块&#xff0c;需要不同的权限&#xff0c;所以需要登陆不同的账号&#xff0c;以下有两种办法&#xff0c;可以快速切换账号方便进行测试。 1&#xff0c;使用SessionBox插件 SessionBox是一款可以方便地切换网站的session&…

Android开发笔记

一、知识点 1、Notification 通知的创建流程 1&#xff09;创建一个NotificationManager&#xff0c;获取系统服务&#xff0c;getSystemService()方法&#xff1b; 2&#xff09;使用Builder构造器来创建Notification对象&#xff0c;设置通知的各种属性&#xff1b; 3&#…

postgresql还原bak

1、第一步肯定是要新建自己还原的目标数据库&#xff0c;例如&#xff1a; 2、进入postgresql的安装目录下的bin目录下 然后地址栏输入cmd进入命令 输入以下 psql -h localhost -U postgres -p 5432 -d SamsinoYardStandard_karamay -f "D:\desktop\zk\20230628.bak&quo…