SQL经典练习(1~6)

今天开始作息下SQL相关的练习题,题目来源这里
首先是数据库的准备,按照题目要求,自己创建了名为text_databases的数据库,并创建了相应的数据表,插入了数据。
文本编辑器用的是Navicat Premium
直接进入正题,开始练习。

  1. 查询‘01’课程比‘02’课程成绩高的学生的信息及课程分数
      分析:题目要求的是学生的信息和课程分数,学生的信息在Students表中,课程分数在SC表中,过滤条件是01(语文)成绩比02(数学)成绩高。
      两个表之间的查询考虑到子查询或联结查询,这两个表之间靠S#(学号)关联。
      在Navicat Premium代码如下:
SELECT s.*, a.score AS score_01, b.score AS score_02
FROM students s,
    (SELECT `S#`, score FROM sc WHERE `C#`=01) a,
    (SELECT `S#`, score FROM sc WHERE `C#`=02) b
WHERE a.`S#` = b.`S#` AND a.`S#`=s.`S#` AND a.score > b.score;

  上面代码中将子查询所得到的结果作为新表(可以理解为虚拟表),利用S#相等作为联结条件,将三个表联结,最后用分数条件过滤得出结果。

查询结果

  1. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
      分析:平均成绩立马想到了AVG函数,大于等于60分肯定是作为筛选条件,而学生编号和姓名是在Students表中,成绩是在SC表中,两表之间靠S#联结,因此还是表的联结查询。
SELECT s.`S#` AS "学生编号",Sname AS "学生姓名",AVG(score) AS "平均成绩"
FROM students AS s,SC
WHERE s.`S#` = SC.`S#`
GROUP BY s.`S#`,Sname
HAVING AVG(score) >= 60;

  上面代码利用了分组方法,并对要查询的各字段进行了重命名。注意:GROUP BY 子句中的分组依据要包含SELECT语句中除聚集函数(例如SUM,AVG等)以外所有的列名。结果如下:

查询结果

  1. 查询在 SC 表存在成绩的学生信息
      分析:学生信息和成绩在两个表中,成绩表中出现的都是存在成绩的,因此在成绩表中查询出学生编号,在利用这些编号在学生信息表中查出完整的学生信息即可。
    方法一(子查询):
SELECT s.* 
FROM students AS s 
WHERE s.`S#` IN (SELECT DISTINCT `S#`
                    FROM SC);

方法二(联结表):

SELECT s.*
FROM students AS s INNER JOIN (SELECT DISTINCT `S#` FROM SC) AS t
ON s.`S#` = t.`S#`;

或者

SELECT s.*
FROM students AS s,
     (SELECT DISTINCT `S#` FROM SC) AS t
WHERE s.`S#` = t.`S#`;
查询结果
  1. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
      分析:要求查询学生的总成绩,没有成绩的显示为NULL,存在有学生信息,但没有成绩的情况,也就是要显示学生信息的所有行,因此采用LEFT JOIN。
SELECT s.`S#`,s.Sname,COUNT(`C#`) AS '选课总数',SUM(score) AS '总成绩'
FROM students AS s LEFT JOIN SC
ON s.`S#` = SC.`S#`
GROUP BY s.`S#`,s.Sname;

查询结果

注意:对C#进行计数,有课程编号,就说明选了该课程。

  1. 查询「李」姓老师的数量
      分析:模糊匹配,想到使用通配符或者正则表达式查询。
SELECT COUNT(Tname) AS "老师数量"
FROM teachers 
WHERE Tname like '李%';

或者

SELECT COUNT(Tname) AS "老师数量"
FROM teachers
WHERE Tname REGEXP '李.+';
查询结果
  1. 查询学过「张三」老师授课的同学的信息
      分析:从题目要求可以看到用到了4个表,学生信息表students,成绩表SC,课程表courses,老师信息表teachers。它们之间两两通过ID连接。要从老师信息“张三”查到学生信息,必须从后往前查询;也可使用联结表,直接将4个表联结查询。
SELECT s.*
FROM students AS s,teachers AS t,courses AS c,SC
WHERE s.`S#` = SC.`S#` AND SC.`C#` = C.`C#` AND C.`T#` = t.`T#`
AND Tname = '张三';
查询结果
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,225评论 0 7
  • Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 S...
    忘了呼吸的那只猫阅读 2,833评论 0 8
  • 网上流传较广的50道SQL训练,奋斗了不知道多久终于写完了。前18道题的难度依次递增,从19题开始的后半部分算是循...
    Kaidi_G阅读 473,491评论 312 451
  • 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。 问题及描述: --1.学生表 Stud...
    lijun_m阅读 1,288评论 0 1
  • 好奇:所有的小宝宝都有一个人共同的特点,对任何东西都会很喜欢、很起劲,无论自己是否有能力来使用,都会很努力的想和这...
    林小理大阅读 170评论 0 0