mysql-查询例题大全

表名:student

字段信息

年龄age

性别gender:enum(‘男’,‘女’)

身高height:

查询表格样式

主要有两张表,表络的情况如下

在这里插入图片描述

比较运算符

>
>=
<
<=
=
!=    或者   <>

》查询年龄大于18岁的信息

select * from students where age > 18

》查询年龄小于18岁的信息

select * from student where age < 18

在这里插入图片描述

逻辑运算符

and
or
not

》查询18到20岁之间的学生,全部字段信息

select * from students where age>18 and age<20;

在这里插入图片描述
》查询18岁以上的女性

select * from students where age>18 and gender='女';

select * from students where age>18 and gender=2;

在这里插入图片描述

》查找18岁以上或者身高超过180(包含)以上的

select * from students where age>18 or height>=180;

在这里插入图片描述
》查找不是(18岁以上的女性)

select * from students where not(age>18 and gender=2);

在这里插入图片描述

》查年龄不是小于或等于18的,要找女的

select * from students where (not age<=18) and gender=2;

模糊查询

方式一
like
%
_


方式二
rlike 正则

》查询姓名以’小’开始的名字

select name from students where name like "小%";

》查询姓名中有’小’的所有名字

select name from students where name like "%小%"; 

》查询名字是两个字组成的

select name from students where name like "__";

》查询有三个字的名字

select name from students where name like "___";

》查询至少有2个字名字的信息

select name from students where name like "__%";

》查询以李开始的姓名

select name from students where name rlike "^李.*";

》查询以‘郭’开头,以‘城’结尾

select name from students where name rlike "^郭.*城$";

范围查询

in 元组
not in 元组
between ... and...
not between ... and ...

》查询年龄为18,34岁的信息

select * from students where age in (18, 34);
select * from students where age=18 or age=34;

》查询年龄不是12,18,34岁的信息

select * from students where age not in (12,18,34);

》查询年龄在18岁到34岁之间的信息

select * from students where age between 18 and 34;

查询结果包含18和34

在这里插入图片描述

》查询年龄不在18到34岁之间的信息

select * from students where age not between 18 and 34;

空判断

is null
is not null

》查出身高记录为空的数据

select * from students where height is null;

》 查询身高记录不为空的数据

select * from students where height is not null;

排序

order by 字段 排序

排序有
asc,由小到大
desc,由大到小

》查询年龄在18岁到34岁之间的男性,按照年龄从小到大的顺序排

select * from students where (age between 18 and 34) and gender=1 order by age;

select * from students where (age between 18 and 34) and gender=1 order by age asc;

在这里插入图片描述

》查询年龄在18到34岁之间的女性,身高由高到矮排序

select * from students where (age between 18 and 34) and gender=2 order by desc;

在这里插入图片描述

》查询年龄在18到34岁之间的女性,身高由高到矮排序,如果身高也一样的话,按照id由大到小排

select * from students where (age between 18 and 34) and gender=2 order by desc, id desc;

》查询年龄在18到34岁的女性,按照身高由大到小排,如果身高一样就按照年龄由小到大排,如果年龄也一样按照id从大到小排

select * from students where (age between 18 and 34) and gender=2 order by height desc, age asc, id desc;

在这里插入图片描述

》 按照年龄从小到大,如果年龄一样大,就按照身高从高到矮排

select * from students order by age asc, height desc;

聚合函数

帮我们计算某个值

 count
 max
 min
 avg
 sum

》查询男性有多少人,显示出来,并且让表头名称为‘男性人数’

select count(*) as 男性人数 from students where gender = 1;

在这里插入图片描述

》查询班里的最大的年龄

select max(age) from students;

在这里插入图片描述

》查询女性的最高身高

select max(height) from students where gender=2;

在这里插入图片描述

》计算所有人的年龄总和

select sum(age) from students;

》计算班上平均年龄

select sum(age)/count(*) from students;

在这里插入图片描述

》计算班上平均年龄,结果保留三位小数

select round(sum(age)/count(*)),3) from students;

round(数字,保留位数)

在这里插入图片描述

》计算男性的平均身高,保留2位小数

select round(avg(height),2) from students where gender=1;

round(数据,位数) ===》 round(3.1415,2) -----> 3.14

分组

一般与聚合函数一起使用

group by 字段

group_concat(...)

having

先分组,再从组里取数据

》显示班里每一个性别的学生有多少个

select gender, count(*) from students group by gender;

在这里插入图片描述

》按照性别分组,并显示每一组中的成员名称

group_concat(字段)

select gender, group_concat(name) from students group by gender;

在这里插入图片描述

》计算男性的人数

select gender, count(*) from students where gender=1 group by gender;

在这里插入图片描述

》将男性分组,并显示组中男性的姓名年龄和id

select gender, group_concat(name,"_",age,"_",id) from students where gender=1 group by gender;

在这里插入图片描述

》查询平均年龄超过30岁的性别,以及姓名

select gender, group_concat(name), avg(age) from students group by gender ;

select gender, group_concat(name), avg(age) from students group by gender having avg(age) >30 ;

在这里插入图片描述

》 where 与 having的区别

where 是对最终查询的结果进行一次过滤

having 是对分组后的组进行过滤,过滤后再进行其它操作,比如聚合等等。。

所有能用where的地方,都可以使用having来代替。。 而且having支持聚合查询 having avg(age)

分页

限制查询出来的数据个数

limit

用法一
limit 数字m
效果, 只出m个数据

用法二
limit 起始下标,显示个数

》查询学生表中前五个数据

select * from students limit 5;

在这里插入图片描述

》limit带两个参数的例子

在这里插入图片描述

》分页的公式

limit(第N页-1)*每页显示个数, 每页显示个数

》查询学生信息按照年龄升序排序,在结果中从第11条数据开始取,取两个出来

select * from students order by age asc limit 10,2;

链接查询

多个表格间的关联查询

在这里插入图片描述
在这里插入图片描述

》查询学生表与老师表能够对的上号的信息

学生表的cls_id与班级表的id一致的

select * from students inner join classes on students.cls_id = classes.id

select * from 表1 inner join 表2 on 条件

在这里插入图片描述

》查询学生表与老师表能够对的上号的信息,字段要求显示学生表全部字段,班级表只显示name字段

select student.*, classes.name from students inner join classes on students.cls_id=classes.id;

在这里插入图片描述

》表名太长,表名以别名方式完成上面的查询。 students别名s, classes别名c

from 表名 as 别名

在这里插入图片描述

》上述查询中,把班级的名称放在第一列

在这里插入图片描述

》查询学生表与老师表能够对的上号的信息,字段要求显示学生姓名和班级名称

select students.name, classes.name from students inner join classes on students.cls_id = classes.id;

在这里插入图片描述

》查询能对的上号的学生与班级信息,显示班级表的班级名称,学生表的全部信息。按照班级名称由小到大排序,班级名称一样的时候,就按照学生ID由小到大来排序

在这里插入图片描述

》查询学生表并显示学生对应的班级,有班级的显示班级名称,没班级的让它空着

在这里插入图片描述

》根据上表的查询结果,把没有班级的学生信息找出来

在这里插入图片描述

create table sailors( sid char(10) primary key, sname char(20), rating int, age int); create table boats( bid char(10) primary key, bname char(20), color char(10)); create table reserves( sid char(10) , bid char(10) , rdate date, primary key(sid,bid,rdate), foreign key (sid) references sailors(sid) on delete cascade, foreign key (bid) references boats(bid) on delete cascade); insert into sailors(sid,sname,rating,age) values("22","dustin",7,45) ("29","brustus",1,33), ("31","lubber",8,56), ("32","andy",8,26), ("58","rusty",10,35), ("64","horatio",7,35), ("71","zorba",10,35), ("74","horatio",9,35), ("85","art",3,26), ("86","john",1,17), ("95","bob",3,64), ("96","frodo",3,26), ("98","tom",3,17); insert into boats(bid,bname,color) values("101","A","red"), ("102","B","green"), ("103","C","blue"), ("104","D","white") ("105","E","red"), ("106","F","blue"), ("107","G","green"); insert into reserves(sid,bid,rdata) values("22","101","2010-01-08"), ("22","102","2010-01-09"), ("29","103","2010-01-09"), ("31","102","2010-02-11"), ("22","104","2010-03-08"), ("22","103","2010-03-10"), ("32","105","2010-03-11"), ("32","106","2010-03-18"), ("32","102","2010-03-19"), ("58","104","2010-03-20"), ("64","105","2010-03-20"), ("95","101","2010-04-02"), ("85","102","2010-04-05"), ("22","101","2010-04-07"), ("22","105","2010-05-01"), ("22","106","2010-06-18"), ("22","107","2010-07-09"), ("31","106","2010-08-06"), ("32","105","2010-08-06"), ("29","104","2010-08-07"), ("64","103","2010-09-05"), ("58","102","2010-09-09"), ("64","104","2010-11-03"), ("64","105","2010-11-04"), ("31","106","2010-12-0
MySQL 查询练习(50题) MySQL 查询练习(50题) I 1 -- 建表 1 1.1 -- 学生表 1 1.2 -- 课程表 1 1.3 -- 教师表 1 1.4 -- 成绩表 2 1.5 -- 插入学生表测试数据 2 1.6 -- 课程表测试数据 2 1.7 -- 教师表测试数据 2 1.8 -- 成绩表测试数据 2 2 -- 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数 3 3 -- 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数 4 4 -- 3、查询平均成绩大于等于85分的同学的学生编号和学生姓名和平均成绩 4 5 -- 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩-- (包括有成绩的和无成绩的) 4 6 -- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩 5 7 -- 6、查询"李"姓老师的数量 5 8 -- 7、查询学过"张三"老师授课的同学信息 5 9 -- 8、查询没学过"张三"老师授课的同学信息 5 10 -- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学信息 6 11 -- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学信息 6 12 -- 11、查询没有学全所有课程的同学信息 6 13 -- 12、查询至少有一门课与学号为"01"的同学所学相同的同学信息 6 14 -- 13、查询和"01"号的同学学习的课程完全相同的其他同学信息 7 15 -- 14、查询没学过"张三"老师讲授的任一门课程的学生姓名 7 16 -- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 7 17 -- 16、检索"01"课程分数小于60,按分数降序排列的学生信息 7 18 -- 17.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 8 19 -- 18.查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 8 20 -- 19、按各科成绩进行排序,并显示排名(实现不完全) 9 21 -- 20查询学生的总成绩并进行排名 10 22 -- 21、查询不同老师所教不同课程平均分从高到低显示 10 23 -- 22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩 10 24 -- 23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比 11 25 -- 24、查询学生平均成绩及其名次 11 26 -- 25、查询各科成绩前三名的记录 12 27 -- 26、查询每门课程被选修的学生数 12 28 -- 27、查询出只有两门课程的全部学生的学号和姓名 12 29 -- 28、查询男生、女生人数 12 30 -- 29、查询名字中含有"风"字的学生信息 12 31 -- 30、查询同名同性学生名单,并统计同名人数 12 32 -- 31、查询1990年出生的学生名单 13 33 -- 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 13 34 -- 33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩 13 35 -- 34、查询课程名称为"数学",且分数低于60的学生姓名和分数 13 36 -- 35、查询所有学生的课程及分数情况; 13 37 -- 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数; 14 38 -- 37、查询不及格的课程 14 39 --38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名; 14 40 -- 39、求每门课程的学生人数 14 41 -- 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩 14 42 -- 41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩 15 43 -- 42、查询每门功成绩最好的前两名 15 44 -- 43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列, 15 45 -- 44、检索至少选修两门课程的学生学号 15 46 -- 45、查询选修了全部课程的学生信息 15 47 -- 46、查询各学生的年龄 16 48 -- 47、查询本周过生日的学生 16 49 -- 48、查询下周过生日的学生 16 50 -- 49、查询本月过生日的学生 16 51 -- 50、查询下月过生日的学生 16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值