sql 练习(四)

作者: 叨叨侠爱叨叨 | 来源:发表于2017-10-27 16:55 被阅读42次

环境是mysql

练习数据见SQL:练习的前期准备
sql 练习(一)
sql 练习(二)
sql 练习(三)
31、查询所有“女”教师和“女”同学的name、sex和birthday.

SELECT sname,ssex,sbirthday
  FROM student
 WHERE ssex = '女'
  UNION 
SELECT tname,tsex,tbirthday 
  FROM teacher
 WHERE tsex = '女'

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

SELECT a.sno,a.cno,a.degree 
  FROM score a
  LEFT JOIN (
        SELECT AVG(degree) degree,cno
          FROM score
         GROUP BY cno)b
    ON a.cno=b.cno
 WHERE a.degree< b.degree
 
 
SELECT Sno,Cno,degree 
  FROM Score a 
 WHERE degree<(SELECT AVG(degree) FROM score b WHERE a.Cno=b.Cno)

33、查询所有任课教师的Tname和Depart.

SELECT tname,depart
  FROM teacher
 WHERE tno IN(SELECT tno FROM course )
 
 SELECT tname,depart 
   FROM teacher a 
  WHERE EXISTS (SELECT * FROM course b WHERE a.tno=b.tno)

34、查询所有未讲课的教师的Tname和Depart.

SELECT tname,depart 
  FROM Teacher 
 WHERE tno  NOT IN(SELECT tno FROM course)

35、查询至少有2名男生的班号。

SELECT class 
  FROM Student 
 WHERE Ssex='男' 
 GROUP BY class 
HAVING COUNT(SSex)>=2 

36、查询不姓王的同学信息

SELECT *
  FROM student 
 WHERE sname NOT LIKE '王%'

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

SELECT Sname,(YEAR(NOW())-YEAR(Sbirthday)) age
  FROM student

38、查询Student表中最大和最小的Sbirthday日期值。

SELECT MAX(sbirthday),MIN(sbirthday)
  FROM student 

39、以班号和年龄从大到小的顺序查询Student表中的全部记录。

SELECT *
  FROM student
 ORDER BY sbirthday ASC,class DESC

40、查询“男”教师及其所上的课程。

SELECT a.tname,b.cname 
  FROM teacher  a 
  JOIN course b
    ON a.tno = b.tno
 WHERE a.tsex ='男'

41、查询最高分同学的Sno、Cno和Degree列。

SELECT * 
  FROM score 
 WHERE degree=(SELECT MAX(degree)FROM score)

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

SELECT sno,degree
  FROM score
 WHERE sno IN (SELECT sno FROM student WHERE ssex='男')
   AND cno IN (SELECT cno FROM course WHERE cname='计算机导论')  

43、查询和“李军”同性别的所有同学的Sname.

SELECT sname
  FROM student
 WHERE ssex=(SELECT ssex FROM student WHERE sname='李军')

44、查询日期

SELECT *
  FROM teacher 
 WHERE tbirthday=STR_TO_DATE('1972-05-05 00:00:00','%Y-%m-%d')

相关文章

  • sql 练习(五)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)sql 练习(三)sql ...

  • sql 练习(四)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)sql 练习(三)31、查...

  • sql 练习(三)

    环境是mysql 练习数据见SQL:练习的前期准备 sql 练习(一)sql 练习(二)21、查询成绩高于学号为“...

  • MySQL Operation

    sql语句练习sql练习2 MYSQL导入数据出现The MySQL server is running with...

  • MySQL 练习题

    01第一天20180703 【SQL练习】经典SQL练习题 02第二天20180704 sql语句练习50题(My...

  • SQL练习

    SQL练习-4张表 针对下面的4张表格进行SQL语句的练习。 image SQL练习-题目 查询001课程比002...

  • 总结:SQL练习【SQL经典练习题】

    刚刷完SQL练习【SQL经典练习题】,本篇文章将对我不牢固的知识做简单汇总。没对比就没标准,当练习超经典SQL练习...

  • sql练习题(四)

    1.查询出表中和当天日期相同的数据 方案: 2.对表中的成绩进行标记 方案: 3.将两张表的信息合成一张更加直观的...

  • 2017-11-07

    实验楼的SQL基础练习前四个实验。over 计划:实验楼的下四个SQL实验。 计划:七月算法一节课。

  • MySQL语句练习

    -- ------------------------------------------------SQL练习语...

网友评论

  • 蛋总Maximus:另外请问一下作者,第32题第2个解法对我来说是很amazing了,能不能请作者在题目下方或者评论里头具体解释一下原理呢?非常感谢!
  • 蛋总Maximus:作者您好,第42题有一个不需要子查询的解法,我也放上来希望采纳~要点就是外联了course和student两张表:

    select * from score
    join course on course.cno=score.cno
    join student on student.sno=score.sno
    where course.cname='计算机导论' and student.ssex='男';
    叨叨侠爱叨叨:二者都可以,在子查询里面限制了部分数据效率会更高点。
  • 蛋总Maximus:作者您好,我认为第41题可能题目表述不清,但是我们日常生活中查询最高分同学的话肯定是会对不同课程分别查询的,因此我建议您也可以参考一下以下解法:
    select c.sname, a.sno, a.cno, a.degree
    from score a
    join (select cno, max(degree) as max_deg
    from score group by cno) b
    on b.cno=a.cno
    join student c on c.sno=a.sno
    where a.degree=b.max_deg;

    您的sql 练习教程帮助了我很多,在此特地感谢您!希望以后有更多的好文章与教程分享~

本文标题:sql 练习(四)

本文链接:https://www.haomeiwen.com/subject/oghdpxtx.html