MYSQL思考题八_Mysql 经典50题练习

论坛 期权论坛     
选择匿名的用户   2021-5-22 18:42   144   0
<div style="font-size:16px;">
<p>工作之后发现自己已经不太会写sql了,除了业务方面的学习,技术上也不能落下啊。于是打算做一遍这50题,通过实际操作来加深对sql的理解。</p>
<p>CREATE TABLE student (</p>
<p>sid varchar(10),</p>
<p>sname varchar(10),</p>
<p>sage datetime,</p>
<p>ssex varchar(10)</p>
<p>);</p>
<p>insert into student values(&#39;01&#39; , &#39;赵雷&#39; , &#39;1990-01-01&#39; , &#39;男&#39;);</p>
<p>insert into student values(&#39;02&#39; , &#39;钱电&#39; , &#39;1990-12-21&#39; , &#39;男&#39;);</p>
<p>insert into student values(&#39;03&#39; , &#39;孙风&#39; , &#39;1990-05-20&#39; , &#39;男&#39;);</p>
<p>insert into student values(&#39;04&#39; , &#39;李云&#39; , &#39;1990-08-06&#39; , &#39;男&#39;);</p>
<p>insert into student values(&#39;05&#39; , &#39;周梅&#39; , &#39;1991-12-01&#39; , &#39;女&#39;);</p>
<p>insert into student values(&#39;06&#39; , &#39;吴兰&#39; , &#39;1992-03-01&#39; , &#39;女&#39;);</p>
<p>insert into student values(&#39;07&#39; , &#39;郑竹&#39; , &#39;1989-07-01&#39; , &#39;女&#39;);</p>
<p>insert into student values(&#39;08&#39; , &#39;王菊&#39; , &#39;1990-01-20&#39; , &#39;女&#39;);</p>
<p>CREATE TABLE course (</p>
<p>cid varchar(10),</p>
<p>cname varchar(10),</p>
<p>tid varchar(10)</p>
<p>);</p>
<p>insert into course values(&#39;01&#39; , &#39;语文&#39; , &#39;02&#39;);</p>
<p>insert into course values(&#39;02&#39; , &#39;数学&#39; , &#39;01&#39;);</p>
<p>insert into course values(&#39;03&#39; , &#39;英语&#39; , &#39;03&#39;);</p>
<p>CREATE TABLE teacher (</p>
<p>tid varchar(10),</p>
<p>tname varchar(10)</p>
<p>);</p>
<p>insert into teacher values(&#39;01&#39; , &#39;张三&#39;);</p>
<p>insert into teacher values(&#39;02&#39; , &#39;李四&#39;);</p>
<p>insert into teacher values(&#39;03&#39; , &#39;王五&#39;);</p>
<p>CREATE TABLE sc (</p>
<p>sid varchar(10),</p>
<p>cid varchar(10),</p>
<p>score decimal(18, 1)</p>
<p>);</p>
<p>insert into sc values(&#39;01&#39; , &#39;01&#39; , 80);</p>
<p>insert into sc values(&#39;01&#39; , &#39;02&#39; , 90);</p>
<p>insert into sc values(&#39;01&#39; , &#39;03&#39; , 99);</p>
<p>insert into sc values(&#39;02&#39; , &#39;01&#39; , 70);</p>
<p>insert into sc values(&#39;02&#39; , &#39;02&#39; , 60);</p>
<p>insert into sc values(&#39;02&#39; , &#39;03&#39; , 80);</p>
<p>insert into sc values(&#39;03&#39; , &#39;01&#39; , 80);</p>
<p>insert into sc values(&#39;03&#39; , &#39;02&#39; , 80);</p>
<p>insert into sc values(&#39;03&#39; , &#39;03&#39; , 80);</p>
<p>insert into sc values(&#39;04&#39; , &#39;01&#39; , 50);</p>
<p>insert into sc values(&#39;04&#39; , &#39;02&#39; , 30);</p>
<p>insert into sc values(&#39;04&#39; , &#39;03&#39; , 20);</p>
<p>insert into sc values(&#39;05&#39; , &#39;01&#39; , 76);</p>
<p>insert into sc values(&#39;05&#39; , &#39;02&#39; , 87);</p>
<p>insert into sc values(&#39;06&#39; , &#39;01&#39; , 31);</p>
<p>insert into sc values(&#39;06&#39; , &#39;03&#39; , 34);</p>
<p>insert into sc values(&#39;07&#39; , &#39;02&#39; , 89);</p>
<p>insert into sc values(&#39;07&#39; , &#39;03&#39; , 98);</p>
<p>查询&#34;01&#34;课程比&#34;02&#34;课程成绩高的学生的信息及课程分数</p>
<p>keyword : 自连接(SELF JOIN)</p>
<p>SELECT student.*, sc1.score AS &#39;course-01&#39;, sc2.score AS &#39;course-02&#39;</p>
<p>FROM student, sc sc1, sc sc2</p>
<p>WHERE student.sid &#61; sc1.sid</p>
<p>AND sc1.sid &#61; sc2.sid</p>
<p>AND sc1.cid &#61; &#39;01&#39;</p>
<p>AND sc2.cid &#61; &#39;02&#39;</p>
<p>AND sc1.score &gt; sc2.score</p>
<p align="center"><img alt="9abffdd334fa" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3d795cd176cb29f4bb7cd48bbbee4616"></p>
<p>1.1 查询存在&#34; 01 &#34;课程但可能不存在&#34; 02 &#34;课程的情况(不存在时显示为 null )</p>
<p>keyword : LEFT JOIN</p>
<p>SELECT *</p>
<p>FROM</p>
<p>( SELECT * FROM sc WHERE sc.cid &#61; &#39;01&#39; ) sc1</p>
<p>LEFT JOIN ( SELECT * FROM sc WHERE sc.cid &#61; &#39;02&#39; ) sc2 ON sc1.sid &#61; sc2.sid</p>
<p align="center"><img alt="9abffdd334fa" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3d795cd176cb29f4bb7cd48bbbee4616"></p>
<p>1.2 查询同时存在01和02课程的情况</p>
<p>keyword : 子查询</p>
<p>SELECT *</p>
<p>FROM</p>
<p>( SELECT * FROM sc WHERE sc.cid &#61; &#39;01&#39; ) sc1,</p>
<p>( SELECT * FROM sc WHERE sc.cid &#61; &#39;02&#39; ) sc2</p>
<p>WHERE sc1.sid &#61; sc2.sid</p>
<p align="center"><img alt="9abffdd334fa" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3d795cd176cb29f4bb7cd48bbbee4616"></p>
<p>1.3 查询选择了02课程但没有01课程的情况</p>
<p>keyword : NOT IN</p>
<p>SELECT *</p>
<p>FROM sc</p>
<p>WHERE cid &#61; &#39;02&#39; AND sid NOT IN ( SELECT sid FROM sc WHERE cid &#61; &#39;01&#39; )</p>
<p align="center"><img alt="9abffdd334fa" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3d795cd176cb29f4bb7cd48bbbee4616"></p>
<p>2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩</p>
<p>keyword : GROUP BY、HAVING</p>
<p>--注意版本默认的model问题</p>
<p>SELECT sc.sid,s.sname,avg(score)</p>
<p>FROM student s INNER JOIN sc ON s.sid &#61; sc.sid</p>
<p>GROUP BY sid</p>
<p>HAVING (avg(score) &gt;&#61; 60)</p>
<p align="center"><img alt="9abffdd334fa" src="https://
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP