zoukankan      html  css  js  c++  java
  • mysql练习

    数据库的感悟:

    一开始学习数据库的时候,被里面的语法给吓到了,到后来领悟了一些东西,才知道自己错在了哪里

      刚开始零基础时,学习编程语言这些东西时,我有一个误区,以为一切先设计好,然后在细枝末节中修补就可以了,一个产品或者一个有意义的代码诞生了,但是在设计中老是会想到这个功能怎么实现,把整体的功能描绘出来,越想越不会越不会越放弃,最后学无所成。因此学什么的速度都很慢。于是开始怀疑人生,怀疑自己的智力,天赋,觉得自己百无一用,越来越颓废。

      最后才发现是自己一开始的思想就错了,我不应该把整体的需求整体来做,而是要把所有的东西拆成一个个小问题来解决,讲一个个小问题解决完了,把它们堆起来,就形成了整体的功能。说了这么多的废话,其实是希望自己在学数据库的时候也把问题拆开解决,以select为首的最后肯定是一张表,可以把这个看成一个整体,在进行查询,你所要知道的就是,准确找出每张表对应的主键名称,找出其中的关系。把一个一个需求都拆开,然后在整合,

    select过后是一张表

    from跟着的是一张表格,自然可以跟着select嵌套

    where是限定条件,没有其他的技巧,理解里面的函数,用法,

    下面的例题是我复制别人博客里面的题目,当时没注意,忘了他的博客,这里就没有备注了,他当时没有给出答案,我自己做了一遍,把代码写了过来,仅供参考,若有错误请评论指正,谢谢!

    祝你们学有所成!

    一:五张表

    2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;

    select a.student_id from (select * from score where course_id = (select cid from course where cname=‘生物‘))a inner join (select * from score where course_id = (select cid from course where cname=‘物理‘))b on a.student_id=b.student_id and a.number>b.number;

    3、查询平均成绩大于60分的同学的学号和平均成绩; 

    select student_id,AVG(number) from score group by student_id having AVG(number)>60;

    4、查询所有同学的学号、姓名、选课数、总成绩;

    select student.sid,student.sname,COUNT(score.course_id),SUM(score.number) from score left join student on student.sid=score.student_id group by student.sid;

    5、查询姓“李”的老师的个数;

    select COUNT(a.tname) from (select * from teacher where tname like ‘李%‘) a;

    6、查询没学过“令尊”老师课的同学的学号、姓名;

    SELECT DISTINCT s.sid,s.sname FROM student s, (SELECT * FROM score WHERE corse_id=
    (SELECT cid FROM course WHERE cid=(SELECT tid FROM teacher WHERE tname=‘令尊‘)))a
    WHERE s.sid not in (SELECT student_id FROM score WHERE corse_id=
    (SELECT cid FROM course WHERE cid=(SELECT tid FROM teacher WHERE tname=‘令尊‘)));

    7、查询学过“体育”并且也学过编号“物理'”课程的同学的学号、姓名;

    select student.sid,student.sname from student inner join (select a.student_id from (select *  from score where course_id=001)a inner join (select * from score where course_id=002)b on a.student_id=b.student_id)c on student.sid=c.student_id;

    SELECT sid ,sname FROM student WHERE sid in (SELECT a.student_id FROM (SELECT student_id,number,corse_id FROM score
    where corse_id=(SELECT cid FROM course where cname ='体育'))a,(SELECT student_id,number,corse_id FROM score where corse_id=
    (SELECT cid FROM course where cname ='物理'))b WHERE a.student_id=b.student_id);

    8、查询学过“令尊”老师所教的所有课的同学的学号、姓名;

    select student.sid,student.sname from student inner join  (select * from score where course_id in (select cid from course where teach_id=(select tid from teacher where tname=‘令尊‘)))a on student.sid=a.student_id group by sid;

    9、查询课程编号“生物”的成绩比课程编号“物理”课程低的所有同学的学号、姓名;

    SELECT a.student_id FROM (select *from score WHERE corse_id =(SELECT cid FROM course WHERE cname='生物')) a INNER JOIN

    (select *from score WHERE corse_id =(SELECT cid FROM course WHERE cname='物理'))b on a.student_id=b.student_id and a.number>b.number;

     

    10、查询有课程成绩小于60分的同学的学号、姓名;

    select student.sid,student.sname from student inner join (select * from score where number<60 group by student_id)a on student.sid=a.student_id;

    11、查询没有学全所有课的同学的学号、姓名;

    select student.sid,student.sname from student inner join (select student_id,COUNT(course_id)  as c from score group by student_id having c=(select COUNT(cid) as d from course))f on student.sid=f.student_id;

    12.检索“体育”课程分数小于90,按分数降序排列的同学学号;
    SELECT s.sid,sname,number FROM student s,(SELECT * FROM score WHERE corse_id=(SELECT cid FROM course WHERE cname='体育') and number<90)a
    WHERE a.student_id=s.sid ORDER BY number DESC;

    13.删除“王语嫣”同学的“体育”课程的成绩;

    DELETE FROM score WHERE student_id=(SELECT sid FROM student WHERE sname='王语嫣') and
    corse_id=
    (SELECT cid FROM course WHERE cname='体育');

    14.查询出只选修了两门课程的全部学生的学号和姓名;
    SELECT student.sid,student.sname FROM student ,(SELECT student_id,count(student_id) as num FROM score GROUP BY student_id)a
    WHERE a.student_id=student.sid and num=2;

    15. 查询男生、女生的人数;
    SELECT gender,COUNT(gender) FROM student GROUP BY gender;

    16.查询姓“王”的学生名单;
    SELECT sid,sname,gender,caption FROM student,class where sname LIKE '王%' AND class_id=cid;

  • 相关阅读:
    [Swift]LeetCode32. 最长有效括号 | Longest Valid Parentheses
    [Swift]LeetCode31. 下一个排列 | Next Permutation
    [Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
    [Swift]LeetCode29. 两数相除 | Divide Two Integers
    时光轴的设计理念
    ITFriend开发日志20140611
    ITFriend开发日志20140611
    高中生活--第7篇–我为什么不交作业
    高中生活--第7篇–我为什么不交作业
    ITFriend网站内测公测感悟
  • 原文地址:https://www.cnblogs.com/yq12138/p/7283870.html
Copyright © 2011-2022 走看看