mysql练习_MySQL基础入门练习50题

1.表格结构

学生表 student(sid,sname,ssex,sbirth,sclass)

sid 学生编号,sname 学生姓名,ssex 学生性别,sbirth 出生年月,sclass班级

教师表 teacher (tid,tname,tsex,tbirth,tprof,tdepart)

tid 教师编号,tname 教师姓名,tsex性别,tbirth出生年月,tprof职称,tdepart所在部门

课程表 course (cid,cname,tid) cid 课程编号,cname 课程名称,tid 教师编号

成绩表 score (sid,cid,degree) sid 学生编号,cid 课程编号,degree 分数


2.创建表格(数据类型、主键、外键)

创建表格 [学生表:student] (sid,sname,ssex,sbirth,sclass)

create 

d1e85fd6c47cf59c7019b5605a3544ad.png

创建表格 [教师表:teacher] (tid,tname,tsex,tprof,tdepart)

create 

555039e8d48ec57fb828b5252ceda66e.png

创建表格 [课程表:course] (cid,cname,tid)

create 

16f675f5827fe906522d488adaa999d5.png

创建表格 [成绩表:score] (sid,cid,degree)

create 

c138c2892005785eb2f6103f4daaa4da.png

3.添加数据

[学生表:student] 中添加数据

insert 

2e6396e6c4992d26d1026046c503b5b3.png

b2cff17b307ff4356517b708919adab9.png

更改数据内容:

update student set sbirth = '1991-12-21' where sid ='102';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

[教师表:teacher] 中添加数据

insert 

36224ba7e4537e214dc9f12e6c30527c.png

67ee1f92233bd8e25e6b6bba38aadd0d.png
mysql> update teacher set tname = '张旭' where tid = '856';
update teacher set tprof = '助教' where tname = '王萍';
update teacher set tbirth='1992-05-05' where tname = '王萍';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

022318427158e5769fa29dde342a796d.png

[课程表:course] 中添加数据

insert 

e70aaff208d55184e2d9505e4fd8dbb2.png

df79d7bcdde76ec5085e5db71b74fc1f.png

[成绩表:score] 中添加数据

insert 

74d72b36e4e7414afd5b43d6ab1a061a.png

1deb4528a81567974d9bdea07a1e43e1.png
删除表格、更改数据内容
mysql> drop table score;
Query OK, 0 rows affected (0.02 sec)
mysql> update score set degree = 79 where sid=108;
Query OK, 1 row affected (0.01 sec)

练习视频:https://www.bilibili.com/video/BV1Vt411z7wy

数据的内容,与原题目略有不同。

4.题目练习:

1、查询学生表中所有记录。

答案:

1、查询学生表中所有记录。

select 

23fe759d0214bca89fe5a5fcb0623d9e.png

2、查询学生表中所有学生姓名、性别、班级。

答案:

2、查询学生表中所有学生姓名、性别、班级。

select 

3d79a704e528defdcda3dd8156744b87.png

3、查询教师所有的单位(即不重复的所在部门)。

答案:

3、查询教师所有的单位(即不重复的所在部门)。

select 

fc2834905ccbc20c9041f7e8dbbcfd1e.png

4、查询成绩表中成绩在60到80之间的所有记录。

答案:

4、查询成绩表中成绩在60到80之间的所有记录。

select 

b21328592ebce2435d4a2a0734177225.png

select 

a7dcdc092598f06846166afd05edcfb2.png

5、查询成绩表中成绩为81,86或88的记录。

答案:

5、查询成绩表中成绩为81,86或88的记录。

select 

016ef3522d4f1a2318feedcd9e4596c8.png

select 

fdefb09fe2e35a441f6dd706bb24db18.png

6、学生表中‘95031’班或性别为‘女’的同学记录。

答案:

6、学生表中‘95031’班或性别为‘女’的同学记录。

select 

7da7b096416b44c60a2c49ec6c98c1b0.png

7、以班级降序查询学生表所有记录。

答案:

7、以班级降序查询学生表所有记录。

select 

195265137ac2db6562093b8b00eddcd4.png

8、查询成绩表中以课程升序,成绩降序的所有记录。

答案:

8、查询成绩表中成绩降序,课程号升序的所有记录。

select 

4bfc9a6a614ede60e35e0d994c0088ad.png

9、查询‘95031’班的学生人数。

答案:

9、查询‘95031’班的学生人数。

select 

361a4a9b65a0d237170bcf972a08259b.png

10、查询成绩表中最高分同学的学号和课程号(子查询)

答案:【基础入门第一个难点:子查询】

10、查询成绩表中最高分同学的学号和课程号(子查询)

select 

ca2321db42547772703ea167123fffbb.png

分析:

1.找到最高分成绩

select 

9be225fefda9b6c4a8a03767cc26014e.png

2.通过已找到的最高分成绩行,查询对应的学生编号和课程编号

select 

9314540a8d087cdcda8471d17f3f4a68.png

一开始写的不标准(如下),出现了错误。

select 
ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column '50sqltest.score.sid'; this is incompatible with sql_mode=only_full_group_by 翻译: 在没有分组条件 GROUP BY 情况下,聚集函数的查询,如 SELECT 的列表中包含了非聚集函数的列,这是与 sql_mode=only_full_group_by 不兼容的。

4b584688ca30c8f10ad751cee476677f.png

「MySQL必知必会 第12章 汇总数据」

聚集函数:计算和返回个单个值的函数:avg()、count()、max()、min()、sum()。

分析1:

在没有使用分组条件 Group By 的情况下,

select 只能直接接聚集函数(单个/组合聚集函数),select不能同时接字段和聚集函数。

大概是因为(组合)聚集函数的「(每个)聚集函数会被筛选成为一列,每列汇总为单一值」。

  • 查到网上有人也遇到的情况说明:关于MySQL中only_full_group_by模式的一点个人理解

8dcbb7cdaa90f2ced7a317a52093cbd9.png

b5b8ee60a8a16b04bfc7ef1fe095ad22.png
select 

那「MySQL必知必会中 第16章 创建高级联结」不知道能不能解决呢?


11、查询每门课的平均成绩。

答案:【基础入门第二个难点:分组 GROUP BY

11、查询每门课的平均成绩。

select 

a2669ff0eff31edf4062349ce0dc524e.png

分析1:

1.查询每门课,先要知道有多少门课。

select 

eab25be89b2cb2484337ecc6e8aaea9b.png

2.查询每门课平均分。

select 

3.查询每门课平均分,合并成一条语句。

即:将每门课按照课程号进行分组,求成绩的平均分。

select 

5df11066022b8a15db94f564e5245e57.png

4.完善查询

select 

390a5a8b917185d707b26515c497b990.png

分析2:

1.查询成绩表

select 

177da9ea3e798c364e17751fbda82a5c.png

2.按照课程编号排序:

select 

b7f84b8a0c1b3bbb574d83904586f48d.png

3.同一个课程编号分组,查看每门课各有几个人的成绩。

select 

149805de99b5ca8ab07fa5513f84f9fa.png

4.根据分组计算各科成绩平均值。

select 

c2dd0c8e59a93e99da74c87f6298bca8.png

验证了1.中:有多少门课cid和每门课的成绩的列表可自行count(cid)。

一开始写的不标准(如下),出现了第10题的错误。

select 
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '50sqltest.score.sid' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

e56f69e406b8d9ec9ffe16fdf8598a7a.png

分析2:(补充第10题的分析1)

分组的列cid (group by cid) :cid 对每个科目下的成绩 degree 分组,后取平均值avg(),select 只能对已分组的列 或 聚集函数进行查询。

学生编号 sid 无法通过分组在一列中呈现(一个cid对应sid有多个),

一个科目中有多个学生成绩和学号,成绩可以聚集计算,但学号sid不能,select 不能查询。

【补充:MySQL 8.0 关于 GROUP BY 的知识点理解 】

12、查询成绩表中,至少有2名同学选修,并以3开头的,课程的平均数。

答案:【基础入门第三个难点:分组 GROUP BY 和 聚集函数 组合使用

12、查询成绩表中,至少有2名同学选修,并以3开头的课程的平均数。

select 

62ad611e385f1a24757b7b0c37f5f21a.png

分析:

1.查看成绩表中所有列项

select 

e385bdf7fde8dcfe3da0e8bdafed5c7a.png

2.至少有2名同学选修的课程,即,学生号对应的课程号个数大于等于2

group 

3.条件增加‘并以3开头的课程’:

group 

4.课程的平均数:avg()

select 

a35248af1108a5e55dd183c0d71ba1fd.png

6.再补全信息:

select 

b91d6599938df8cffa999f374a60f2f2.png

7.补完信息:

select 

62ad611e385f1a24757b7b0c37f5f21a.png

13、查询分数大于70小于90的学生号。

答案:

13、查询分数大于70小于90的学生号。

select 

934cbc75d4abd6d4b7d066b39f5ae7cf.png

5adc40ca0604992899c61786e7da0803.png

14、查询所有学生的学生姓名、课程编号和成绩。

答案:【基础入门第四个难点:多表查询

14、查询所有学生的学生姓名、课程编号和成绩。

select 

4bfa8290dc794f85406f4c977de3ed43.png

分析:多表关联查询

学生姓名,在学生表中;课程编号和成绩,在成绩表中。

共同的列:学生编号。

1.从学生表中查询学生编号和学生姓名

select 

2.从成绩表中查询学生编号,课程编号和成绩

select 

3.两个表中,学生编号是共同的列,两表联结查询

select 

fc9628620a916f1d8874a0ec2495ef71.png

join

0ba8fb373786c53b3cd65dec34853c96.png
inner join...on...

15、查询所有学生的学生编号、课程名和成绩。

答案:【基础入门第四个难点:多表查询】(同上一题)

15、查询所有学生的学生编号、课程名和成绩。

select 

40540e82d170598589f1fe1335395409.png

16、查询所有学生的学生姓名、课程名和成绩。

答案:【基础入门第四个难点:三表关联查询

16、查询所有学生的学生姓名、课程名和成绩。

select 

8674df3b854d7c2b75cd761107c4b92f.png

分析:

公共列:学生编号和课程编号,同时查询

select 

a466f39b8cdf0d842a83f07251222da8.png

对比查询:

学生表中的学生编号、课程表中的课程编号,

与成绩表中的学生编号和课程编号,同时查询:

select 

da56cd5d67af2cbacde38fe2d5c4eeb5.png

17、查询95031班同学每门科目的平均分。

答案:

17、查询95031班同学每门科目的平均分。

select 

26bd783a3c446f9c50974cedbe1c62f0.png

分析:

1.在学生表中,筛选班级95031的学生编号

select 

419ad2c50b665278b5948edb5a224474.png

2.在成绩表中,筛选班级95031的学生的学生编号对应的成绩

select 

0c87bd70c33bf8e86b3e344d9ec37f6c.png

3.以成绩分组,求平均值

select 

6fe0c9f39c9ee05a7bb63efab03e34a7.png

报错1:

b6910e50ec60be6c738c8b8c71df250a.png
select 
ERROR 1242 (21000): Subquery returns more than 1 row

子查询中返回结果不止一个。

错误原因:

sid = 只能接一个值,sid IN 可以接多个非连续范围的值。

重点分析:

必须先进行95031班级号的筛选 sid 后,才能通过 sid 去 score 表进行分组。先分组后,sid 由于分组,无法操作唯一对应的主键功能。

错误做法2

select 

22c6d8b08a4a0ad5bfa51169c8e9e79f.png

错误思路:

1.求每门科目平均分:以科目的课程编号进行分组,并对课程编号的成绩进行平均分计算。

group 

2.查询条件为:班级是95031的同学,所在表格是学生表

where 

3.组合以上条件

select 

777a34f3efc983615726c5c1e95a3f0f.png

4.补全查询信息

select 

0e79cd00cc865365a176505e63057d4c.png

18、查询选修‘3-105’课程的成绩高于‘109’号同学‘3-105’成绩的所有同学记录。(题目有点意义不明)

答案:

18、查询选修‘3-105’课程的成绩高于‘109’号同学‘3-105’成绩的所有同学记录。

方法1: (如果数据中,109号同学3-105科目下没有成绩)

select 

0afe19e43ea87bf33c3fe813730ab167.png

分析:

1.查询‘3-105’课程的同学成绩列表

select 

4783c50f3313ecd3ce05138df15b769d.png

2.查询109号同学的成绩列表

select 

ae409114a7de51e4ccbe5f72f42d1b7e.png

3.查询选修‘3-105’课程的成绩高于‘109’号同学的学生列表

select 

方法2: (如果数据中,109号同学3-105科目下有成绩)

即问题是:查询所有选修‘3-105’课程的同学,其中哪些人是成绩高于109号同学的‘3-105’科目成绩,的学生记录。

select 

5b7f93e4e165141248bc40667503d6b4.png

1.查询学号109号的同学3-105科目的成绩

select 

0a82dd5e19a281ef23a92bd8cb2bfb70.png

98fcab1014bdf97c8d8a793b1ceb4467.png

2.查询选择3-105科目的同学中,成绩大于109号(已选‘3-105’科目)同学的成绩的列表。

select 

5b7f93e4e165141248bc40667503d6b4.png

19、查询成绩高于学号为‘109’、课程号为‘3-105’的同学成绩的所有记录。

答案:

19、查询成绩高于学号为‘109’、课程号为‘3-105’的同学成绩的所有记录。

select 

7d42d8319d008ede19cbaaf2f742ec12.png

20、查询和学号为108、101的同学同年出生的所有同学的学号、姓名和出生日期。

答案:

20、查询和学号为108、101的同学同年出生的所有同学的学号、姓名和出生日期。

select 

530fab6187728b4d4390baf4038c0357.png

分析:

1.查询学号为108、101同学的出生年份。

select 

72d3feaabfd2f46aa6e1249af6e9fd95.png

2.查询与108、101学号同年份的同学的学号、姓名和出生日期。

select 

530fab6187728b4d4390baf4038c0357.png

21、查询‘张旭’老师任课的学生成绩。

答案:

21、查询‘张旭’老师任课的学生成绩。

select 

分析:子查询

1.查询张旭老师的老师编号。

select 

8fdfd24432473cf0e918933d6060cfd0.png

2.根据老师编号查询任课的课程编号。

select 

9321848df68c918eec1ec8591f73e088.png

3.根据老师任课的课程编号,查询对应课程编号的学生成绩。

select 

c42f5a374d1655d72ee666bf869def61.png

22、查询选修某课程的同学人数多于5人的老师姓名。

答案:

22、查询选修某课程的同学人数多于5人的老师姓名。

select 

aaa7a2afa2ac2399ed93d2f49da0c341.png

分析:子查询

1.查询选修某课程人数多于5人的课程号。

select 

ee7c7d2a3cb28b79233c9d053daf6361.png

2.查询选修该课程的老师编号。

select 

e74ce399e6a04c7914334c8a075b7195.png

3.查询该老师编号的老师姓名。

select 

aaa7a2afa2ac2399ed93d2f49da0c341.png

23、查询95033班和95031班全体学生的记录。

答案:

23、查询95033班和95031班全体学生的记录。

select 

c53a4238d5d7beeebae76e30cb2a9eed.png

分析:

select 

498cb53fb7f662d35205cf89a416b868.png

错误写法:

and 表示交集,同时存在在两个班级内。既在95031班,又在95033班的同学,不存在。

in 表示并集,或者关系,在95031 或 在95033的班级内的同学,存在这样的数据。

select 

585191ac4cdfb6588a74e8e4e62b4bad.png

24、查询存在有85分以上成绩的课程编号。

答案:

24、查询存在有85分以上成绩的课程编号。

select 

64f44b6a273914aec079a907d12fd354.png

分析:

select 

de3d98ffd747523f1a79e5959d69e17d.png
select 

64f44b6a273914aec079a907d12fd354.png

25、查询计算机系老师所教课程的成绩表。

答案:

25、查询计算机系老师所教课程的成绩表。

select 

5b47e409ee072df9a2c20d786d214701.png

分析:

1、在教师表中,查询计算机系老师编号。

select 

2eff52e2b50a3ec4f54ef1325a035c13.png

2、通过老师编号,查询课程表中,老师所教的对应课程科目编号。

select 

8d1ee03e202b22c2834a94f937f84097.png

3、通过对应课程编号,查询成绩表的对应成绩。

select 

74a27914950f9a3895a55495556534c1.png

26、查询‘计算机系’与‘电子工程系’不同职称的老师的姓名和职称。

答案:【入门难点:not in 和 union 求并集 联合 】

26、查询计算机系与电子工程系,不同职称的老师的姓名和职称。

select 

b4bbf5b88e3e39414402b30d95dfa2db.png

分析:

  1. 查看老师表中数据。
select 

b2eac1525936d37d279de2713883e7ce.png

2.查询计算机系的老师的职称。

select 

91fe07010141df765cc7cc868814cf26.png

3.查询电子工程系的老师的职称。

select 

498fe9c31956091f5280c1510b893031.png

4.查询计算机系老师的职称,且不与电子工程系老师的职称相同。

select 

ef371e47a652c7d5403914ca27f6a869.png

5.查询电子工程系老师的职称,且不与计算机系老师的职称相同。

select 

ada26c21c8750a516e1151b0103e6c80.png

27、查询选修课程号为‘3-103’课程且成绩至少高于选修课程号‘3-245’的同学的学号、课程号、成绩,并按照成绩从高到低次序排序。

答案:【入门:any()】

27、查询选修课程号为‘3-105’课程且成绩至少高于选修课程号‘3-245’的同学,的学号、课程号、成绩,并按照成绩从高到低次序排序。

select 

3a05c7b6034e41f90f49e41c68f2880f.png

分析:

1.查询课程‘3-105’的数据

select 

eeedfab69bd31d59e51a156e7e557e49.png

2.查询课程‘3-245’的数据

select 

fafb8afeab6aae5d4f6d432ed2e1a055.png

3. 至少,大于其中至少任意一个数据,使用any

select 

错误写法:

select 

4a07ac791e0b48a263add03119f05349.png

28、查询选修课程号为‘3-105’且成绩高于选修课程号‘3-245’课程的同学的学号、课程号和成绩。

答案:【入门:all()】

28、查询选修课程号为‘3-105’且成绩高于选修课程号‘3-245’课程的同学的学号、课程号和成绩。

select 

a47d2c16d8dc5bc01e9f7b717858a604.png

29、查询所有老师和同学的姓名、性别和出生日期。

答案:

29、查询所有老师和同学的姓名、性别和出生日期。

select 

cf1799516a7dc6d9ef32e55244ba54f4.png

分析:

select 

7f1ec97805f32d13258ec392cf3ce7d0.png

使用as作为别名。

30、查询所有女教师女学生的姓名、性别、出生日期。

答案:

30、查询所有女教师女学生的姓名、性别、出生日期。

select 

758214e45afe4d829664e4b2b15500f3.png

31、查询成绩比课程平均成绩低的同学的成绩表。

答案:

31、查询成绩比课程平均成绩低的同学的成绩表。

select 

d3612e1f875d8f4693a81bcc0e64eb40.png

分析:

1.查看各科成绩平均分(按照科目分组)

select 

feca1e76f3cc299c915224c813f0eca8.png

2. 表格他本身的数据,无法和他本身求平均值同时进行比较。所以,通过表格本身,命名为 a ,复制另一个一摸一样的表格,命名为 b。(保证两个表格一样,条件有 a.cid = b.cid,就可以进行比较了 )

select 

a226318e128415a80484ac6b5705ed06.png

32、查询所有任课老师的姓名和部门。

答案:

32、查询所有任课老师的姓名和部门。

select 

682a2dab69e82bd5a959b103fdeb7bce.png

分析:

1.查询任课老师(指的是有课程表中安排课程的老师。)

select 

ba4f0f2e5f986233a99a272c11f4d730.png

2.根据课程中查询的老师编号,找到任课老师姓名和部门。

select 

2f91b10525ad0b720dbf7b86287d4840.png

3.如果题目改为查询任课老师姓名和部门,同时安排了考试成绩。

select 

df8b1132e657a592382fc360e8d44913.png

33、查询至少有2名男生的班级。

答案:

33、查询至少有2名男生的班级。

select 

3907fb2ce3905f502417c1223050d1d4.png

分析:

1.查询学生表

select 

8304c5f4401090af9a8e400d3aa8ce79.png

2. 先查询表中的男学生,再将其按班级分组(为了查询班级号),计数(性别)

select 

9510d8487dee14a8922251200b7fd60c.png

至少有2名 = 计数 count() > 1!不是大于2!

至少有2名 = 计数 count() > 1!不是大于2!

至少有2名 = 计数 count() > 1!不是大于2!

错误写法:计数count() > 2,数据为空。

select 

1a58e5089a062f1a47759529162b311f.png

34、查询学生表中不姓王的同学。

答案:

34、查询学生表中不姓王的同学。

select 

f066c5f70a7bbb7a3adbd9a03c284ed8.png

分析:

1.查询所有学生姓名

select 

968bfbed67b3a0f74e9f9c7e4d744b0b.png

2.不姓王的同学。

select 

896e9d3a928f34ef207a19e15948fce7.png

35、查询学生表中每个同学的姓名和年龄。


答案:

35、查询学生表中每个同学的姓名和年龄。

select 

5b0deb320a9566a58c0055b675bbaa11.png

分析:

1.年龄 = 当前年份 - 学生出生年份

当前年份

select 

65c3ea1625cb49f03859238f6de07f8f.png

2.学生出生年份

select 

81d072fe6d2a98436e5b5f956f643441.png

36、查询学生表最大和最小的出生日期的日期值。

答案:

36、查询学生表最大和最小的出生日期的日期值。

select 

ae0feecda147c5ef987c2ec32d357eed.png

分析:

1.查询学生出生日期

select 

62e7a36d7ba329d3ef4daba39e3cf7f5.png

2.查询最大和最小出生日期(最大是指数值大,而不是年龄的大小;例1996 大,1988 小)

select 

785a14911f6d43f8958f33cbc44d0e4f.png

3.查询日期,去除时间值,起别名。

select 

ef75ac15a6e2d60e67665972e22f4899.png

37、以班号和年龄从大到小的顺讯查询学生表记录。

答案:

37、以班号和年龄从大到小的顺序查询学生表记录。

select 

36439a9a1a8cb9d8f0254257ccaaf5fe.png

写法2:算年龄

select 

fa7bdfc6d9e36865e2f606ec3d181197.png

38、查询男老师及其所上的课程。

答案:

38、查询男老师及其所上的课程。

select 

5ff7bcd6fadb3e2c3a214f2a97caa8ea.png

39、查询最高分同学的学号、课程号、成绩。

答案:

39、查询最高分同学的学号、课程号、成绩。

select 

c298ae35164f81b7f92a52a53cf0b0b8.png

分析:

select 

0da036bb46def2e4f811350a7828e2be.png

思考,如果最高分有多个呢?语句用 等于= 会报错吗?

修改数据:

update score set degree = 92 where cid ='6-166'and sid='109';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

135cb6b939272e6f73d161c03c790f35.png

现在有两个最高分,都是92分,再来看语句:

select 

3f5d9e7a69e6b84638bd011e4ecae364.png

无变化。

再次补充完整语句后,依然用等于号 = ,max()只返回一个数值。

select * from score where degree = (select max(degree) from score);

cbf1576a544fc3af4d7949927ba66134.png

输出了两条相等的max(degree)的数据。

错误写法:

select sid,cid,max(degree) from score;

97da1abbeaeee2ab41745a15954f96a8.png
一条包含 aggregate 聚集函数的查询语句但是没有使用 group by 分组。
当select语句中,除了聚合函数外还选择了多个字段,只用多个字段中的一个字段作为分组的依据,那么剩下的字段任然无法与聚集函数之间构成有明确合理的关联。

40、查询与李云同性别的所有的同学姓名。

答案:

40、查询与李云同性别的所有的同学姓名。

select 

8e56236b51ca570b8fc9336c548fc190.png

41、查询与李云同性别并且同班的同学姓名。

答案:【双子查询】

41、查询与李云同性别并且同班的同学姓名。

select 

b8b2d5fe78d7437741ec5e7eb5856dd6.png

错误写法:

select sname from student where ssex in (select ssex from student where sname ='李云')
union
select sname from student where sclass in (select sclass from student where sname ='李云');

0c437976ade42bda86906224a731bcd2.png

这是或和李云同性别,或和李云同班级的同学姓名。

42、查询所有选修计算机导论课程的男同学的成绩表。

答案:

42、查询所有选修计算机导论课程的男同学的成绩表。

select 

3d68d57426fee7bf083fb44c2e673c65.png

分析:

1.查询男同学

select 

322840c24fed7b644a060ffd39ded7ef.png

2.查询计算机导论的课程号

select 

750d69ddeaaba4433dcd605ce38eade1.png

3.查询选修计算机导论,且,选择学号在男同学范围里的同学

select 

cdf20583f99dccbb0903a71b91ef0e51.png

错误写法:

select 

b7165d9f42650f3bb9989f1b072f7ba1.png

sid,有多个男学生,所以 = 只能选取一个值,要用 in 表示在这个a范围内。

cid,计算机导论,对应只有一个课程号,所以用 = 。

43、查询所有同学的学号、课程号和grade等级列。

建立如下grade等级表

create 

输入数据:

insert 

答案:

43、查询所有同学的学号、课程号和grade等级列。

select 

308def7549a7c156de7753270c69eed2.png

SQL的四种连接

内连接:

inner join 或 join

外连接:

1.左连接:Left join 或 left outer join

2.右连接:Right join 或 right outer join

3.完全外连接:full join 或 full outer join

1.创建数据库:

create 

080a67927d2b4e91e7668d22b9d066ad.png

2.选中数据库:

use 

1cfba33e0a7465547dda4c5341da1e6e.png

3.创建person表和card表:

create 

create 

4.查看表

show 

977d1852942ca02579c4b49de399938b.png

5.添加表中数据:

card表:

insert 

518b98defbf2a7d4cfcb9e153d647b04.png

查看card表数据:

select 

cd5b319a7dec1e08e2162f7633a149d8.png

person表:

insert 

查看person表数据:

select 

f032e3709136e2352d2d98c788c0596d.png

6.两个表的关系:

没有创建外键,但是原则上有外键关系。

7.查询内连接inner join:两张表的数据,通过某个字段相等,查询出相关记录数据。

select * from person inner join card on person.cardId = card.id;

aeead3621b665e101e0aa89a304670cd.png

8.左外连接left join / left outer join:

把左边表内所有数据取出来,

右边表中的数据,若有相等值,则显示;若没有,则NULL。

select 

51bac0fa55dbc276eae116a6e8b4df18.png

9.右外连接 right join:

把右边表内所有数据取出来,

左边表中的数据,若有相等值,则显示;若没有,则NULL。

select * from person right join card on person.cardId = card.id;

151e9f2d8114a795c11ea1bb7cb92f7b.png

10.全外连接full join:

select * from person full join card on person.cardId = card.id;

49a2f14b10ced83b01f74f0487655d86.png

mysql不支持全外连接full join 。

select * from person left join card on person.cardId = card.id
union
select * from person right join card on person.cardId = card.id;

66fc926c5e39abfbaa811641ae1f1e65.png

0f70e2203519eef76c96e9cd6ccf1aae.png
  1. 查询“01”课程比“02”课程成绩高的所有学生的学号;
  2. 查询平均成绩大于60分的同学的学号和平均成绩;
  3. 查询所有同学的学号、姓名、选课数、总成绩
  4. 查询姓“李”的老师的个数;
  5. 查询没学过“张三”老师课的同学的学号、姓名;
  6. 查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名;
  7. 查询学过“张三”老师所教的课的同学的学号、姓名;
  8. 查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;
  9. 查询所有课程成绩小于60分的同学的学号、姓名;
  10. 查询没有学全所有课的同学的学号、姓名;
  11. 查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;
  12. 查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名
  13. 把“score”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;
  14. 查询没学过"张三"老师讲授的任一门课程的学生姓名;
  15. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩;
  16. 检索"01"课程分数小于60,按分数降序排列的学生信息;
  17. 按平均成绩从高到低显示所有学生的平均成绩;
  18. 查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率;
  19. 按各科平均成绩从低到高和及格率的百分数从高到低顺序;
  20. 查询学生的总成绩并进行排名;
  21. 查询不同老师所教不同课程平均分从高到低显示;
  22. 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩;
  23. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比;
  24. 查询学生平均成绩及其名次;
  25. 查询各科成绩前三名的记录;
  26. 查询每门课程被选修的学生数;
  27. 查询出只选修了一门课程的全部学生的学号和姓名;
  28. 查询男生、女生人数;
  29. 查询名字中含有"风"字的学生信息;
  30. 查询同名同性学生名单,并统计同名人数;
  31. 查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime);
  32. 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
  33. 查询不及格的课程,并按课程号从大到小排列;
  34. 查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;
  35. 查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
  36. 查询每门功课成绩最好的前两名;
  37. 统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列;
  38. 检索至少选修两门课程的学生学号;
  39. 查询选修了全部课程的学生信息;
  40. 查询各学生的年龄;
  41. 查询本周过生日的学生;
  42. 查询下周过生日的学生;
  43. 查询本月过生日的学生;
  44. 查询下月过生日的学生;
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值