当前位置:首页 > sql > 正文内容

mysql基础查询的使用

hxing64111个月前 (01-18)sql7710

创建数据库

student表格

create table student(
id int PRIMARY KEY COMMENT 'id主键',
`name` varchar(20) COMMENT '名称',
gender TINYINT(2) COMMENT '性别 1男 2女 3保密',
age TINYINT UNSIGNED COMMENT '年龄',
birthday date COMMENT '出生日期',
createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间' on update CURRENT_TIMESTAMP,
isdel bit(1) DEFAULT 0 COMMENT '是否删除 0未删除 1已删除 默认未删除'
);

成绩表格score:

create table score (
id int PRIMARY KEY COMMENT 'id主键',
sid int COMMENT '学生id',
course VARCHAR(20) COMMENT '课程名称',
score DECIMAL(4,1) COMMENT '成绩'
);

因为下面插入数据没默认写id的值,所以id为自增的列。


添加自增:

alter table student
MODIFY column id int  auto_increment COMMENT 'id 主键';
alter table score
MODIFY column id int  auto_increment COMMENT 'id 主键';


初始化数据

数据下载地址:https://qyboke.lanzoue.com/iuhpB0n0rfij


score表:

微信截图_20240118122626.png

student表格:

微信截图_20240118122738.png


查询学生张三的所有成绩:

SELECT s.name,sc.course,sc.score from student s ,score sc where s.id = sc.sid and s.name = '李云';


查询平均成绩大于60的学生信息:

SELECT DISTINCT s.* from student s ,score sc where s.id = sc.sid and sc.score > 60;


查询有成绩的学生信息:

SELECT DISTINCT s.* FROM student s right JOIN score sc on s.id = sc.sid;


查询不及格的学生信息:

SELECT DISTINCT s.* ,sc.course, sc.score
FROM student s right JOIN score sc 
on s.id = sc.sid
where sc.score < 60;


查询各科成绩最高分、最低分和平均分:

SELECT DISTINCT score.course, max(score) over(PARTITION by score.course) '最高分',
min(score) over(PARTITION by score.course) '最低分',
avg(score) over(PARTITION by score.course) '平均分'
FROM score


查询各科成绩第一名的记录:

SELECT DISTINCT sc.course, max(score) over(PARTITION by sc.course) '最高分'
FROM score sc left JOIN student s
on sc.sid = s.id


查询男生、女生人数:

SELECT DISTINCT student.gender, count(student.gender) over(PARTITION by student.gender)
from student


查询 1990 年出生的学生名单:

SELECT * from student where YEAR(birthday) = 1990;


查询平均成绩大于等于 70 的所有学生的姓名、出生日期和平均成绩:

SELECT DISTINCT s.name,s.birthday,avg(sc.score) over(PARTITION by s.`name`) 
from score sc left JOIN student s
on sc.sid = s.id


查询mbatis 成绩低于60的学生信息:

SELECT s.*,sc.course,sc.score
FROM score sc LEFT JOIN student s
on sc.sid = s.id
where sc.course = 'mybatis' and sc.score < 60;


查询学生成绩前三名的记录:

SELECT ROW_NUMBER() over() as '成绩总分排名', sco.name,sco.allSco
FROM (
SELECT DISTINCT s.`name` ,sum(sc.score) over(PARTITION by s.`name`) 'allSco'
from score sc LEFT JOIN student s
on sc.sid = s.id ORDER BY allSco desc LIMIT 3
) as sco


查询学生信息及年龄:

SELECT stu.name,stu.birthday,(YEAR(CURRENT_DATE) - YEAR(stu.birthday)) '年龄'
from student stu


按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩:

SELECT DISTINCT s.`name` ,sum(sc.score) over(PARTITION by s.`name`) 'allScore',avg(sc.score) over(PARTITION by s.name) '平均成绩'
from score sc LEFT JOIN student s
on sc.sid = s.id ORDER BY allScore desc


查询未成年的学生信息:

SELECT stu.name, stu.birthday, (year(CURRENT_DATE) - year(birthday)) 'age'
from student stu
where (year(CURRENT_DATE) - year(birthday)) < 18


查询姓张的 学生信息:

SELECT *
FROM student
where name like '张%'


查询本月过生日的学生信息:

SELECT *
FROM student
where MONTH(CURRENT_DATE) = MONTH(birthday)


查询本周过生日的学生信息

SELECT *
FROM student
WHERE WEEKOFYEAR(CURRENT_DATE) = WEEKOFYEAR(birthday)


按各科成绩进行排序,并显示排名

SELECT stu.name , sc.course ,sc.score, RANK() over(PARTITION by sc.course ORDER BY sc.score desc)
from score sc LEFT JOIN student stu
on sc.sid = stu.id



扫描二维码推送至手机访问。

版权声明:本文由星星博客发布,如需转载请注明出处。

本文链接:https://xingxinghan.cn/?id=516

分享给朋友:

“mysql基础查询的使用” 的相关文章

SQL 数据库 - 创建/管理数据库

SQL CREATE DATABASE 语句SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。语法CREATE DATABASE 数据库名称;示例以下 SQL 语句创建了一个名为 "testDB" 的数据库:CREATE ...

MySQL触发器的使用

引言: MySQL是一种广泛使用的关系型数据库管理系统,提供了多种功能和工具来支持开发人员处理数据。其中之一就是触发器(Triggers)。触发器是在数据库中定义的一种特殊类型的存储过程,可以在指定的数据库操作(如插入、更新或删除)发生时自动执行。本文将介绍MySQL触发器的使...

MySQL修改用户名密码:详细步骤及代码演示

MySQL是一种非常流行的开源关系型数据库管理系统。在使用MySQL时,我们通常需要创建多个用户并设置相应的权限。当需要修改某个用户的用户名或密码时,该怎么办呢?本文将详细介绍MySQL修改用户名密码的步骤,并提供相关的代码演示。 一、连接到MySQ...

关于MySQL子查询

关于MySQL子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL4.1开始引入。 SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算出一个数据结果,然后与这个数据结果(可能是单行,也可能是多行...

Mysql 开启外网访问

mysql -u root -puse mysql;select user,host from user;GRANT ALL PRIVILEGES ON *.* TO &...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。