zoukankan      html  css  js  c++  java
  • 数据库 简单查询 Sql Server 学生表 课程表 选课表

    创建教材中的三张表格,并输入相应的数据

    Create table student(
    	Sno char(9),
    	Same char(20),
    	Ssex char(2),
    	Sage smallint,
    	Sdept char(20)
    );
    Create table course(
    	Cno char(4),
    	Cname char(40),
    	Cpno char(4),
    	Ccredit smallint
    );
    Create table sc(
    	Sno char(9),
    	Cno char(4),
    	Grade smallint
    );
    Insert into student values(‘200215121’,’李勇’,’男’,20,’cs’);
    Insert into student values(‘200215122’,’刘晨’,’女’,19,’cs’);
    Insert into student values(‘200215123’,’王敏’,’女’,18,’ma’);
    Insert into student values(‘200515124’,’张立’,’男’,19,’is’);  
    Insert into course values (‘1’,’数据库’,’5’,4);
    Insert into course values (‘2’,’数学’,NULL,2);	
    Insert into course values(‘3’,’信息系统’,’1’,4);
    Insert into course values(‘4’,’操作系统’,’6’,3);
    Insert into course values(‘5’,’数据结构’,’7’,4);
    Insert into course values(‘6’,’数据处理’,NULL,2);
    Insert into course values(‘7’,’pascal语言’,’6’,4);
    Insert into sc values(‘200215121’,’1’,92);
    Insert into sc values(‘200215121’,’2’,85);
    Insert into sc values(‘200215121’,’3’,88);
    Insert into sc values(‘200215122’,’2’,90);
    Insert into sc values(‘200215122’,’3’,80);

    查询语句1:

    1.  列出所有不姓李的所有学生;

    select *FROMStudent

    where SnameNOTLIKE '%'

     

    2.  列出姓“张”且全名为2个汉字的学生

    select *FROMStudent

    where SnameLIKE'_'

     

    3.  显示在1993年以后出生的学生的基本信息;

    select *FROMStudent

    where Sage<2015-1993

     

    4.  查询出课程名含有“数据”字串的所有课程基本信息;

    select *FromCourse

    where CnameLIKE'%数据%'

     

    5.  列出选修了‘1’课程的学生学号,按成绩的降序排列;

    select SnoFROMSC

    where Cno='1'ORDERBY Grade DESC

     

    6.  列出课程表中全部信息,按先修课的升序排列;

    select *FROMCourse ORDER BY CpnoASC

     

    7.  列出年龄超过平均值的所有学生名单,按年龄的降序显示;

    select *FROMStudent

    where Sage>(SELECTAVG(Sage)

    FROM Student)ORDERBY Sage DESC

     

    8.  按照出生年份升序显示所有学生的学号、姓名、性别、出生年份及院系,在结果集中列标题分别指定为“学号,姓名,性别,出生年份,院系”;

    select Sno学号,Sname 姓名,Ssex性别,2014-Sage出生年月,Sdept院系

    FROM StudentORDERBY 2014-SageASC

     

    9.  按照课程号、成绩降序显示课程成绩在80-90之间的学生的学号、课程号及成绩

    selectSno,Cno,GradeFROMSC

    where Gradebetween 80AND 90ORDER BY Cno DESC,GradeDESC

     

    10.显示学生信息表中的学生总人数及平均年龄,在结果集中列标题分别指定为“学生总人数,平均年龄”;

    select COUNT(DISTINCTSno)学生总人数,AVG(Sage)平均年龄 

    FROM Student

     

    11.显示选修的课程数大于2的各个学生的选修课程数;

    select Sno学号,COUNT(Sno)选修课程数

    FROM SCGROUPBYSno HAVING COUNT(*)>2

     

    12.显示平均成绩大于“2002151022”学生平均成绩的各个学生的学号、平均成绩;

    select Sno,AVG(Grade)

          from SC

          Group by Sno

          having AVG(Grade)>(selectAVG(Grade)fromSC

    where Sno='200215122')

     

     

    查询语句2:

    1、查询所有学生的Sname、Cname和Grade列。

    SELECT Sname,Cname,Grade

        FROM Student,Course,SC

        where Student.Sno=SC.SnoandSC.Cno=Course.Cno;

     

    2、查询所有选修“数据库”课程的同学的成绩。

    SELECT Student.Sno,Sname,Cname,Grade

        FROM Student,Course,SC

        where Cname='数据库'ANDCourse.Cno=sc.CnoANDStudent.Sno=sc.Sno;

     

    3、查询和“李勇”同性别的同学Sname.

    SELECT x.SnameFROMStudentx

        where x.Ssex=(selectSsexFROM Student y WHEREy.Sname='李勇')ANDx.Sname!='李勇'

     

    4、查询所有同学的基本情况和选课情况,包括未选课的同学。

    /* SELECTStudent.*,SC.* FROM Student,SC where Student.Sno=sc.Sno */

    SELECT Student.*,SC.*

        FROM StudentLEFT OUTERJOINSC ON(Student.Sno=SC.Sno)

     

    5、查询选修1号课程且成绩高于90分的同学的名字。

    SELECT SnameFROMStudent,SC

        WHERE Student.Sno=sc.SnoANDCno='1'ANDGrade>90

     

    6、查询和学号为200215121的同学相同年龄的所有学生的Sno、Sname列。

    由于该题学号为200215121时,没有其他同学与他年龄相同,故实验中把学号改为200215122。查询结果包括“刘晨”自己。

    SELECT x.Sno,x.SnameFROMStudent x

        where x.Sage=(SELECTy.SageFROMStudent y WHERE y.Sno='200215122')

     

    7、查询刘晨同学所有的成绩。

    SELECT Sname,Cno,Grade

        FROM Student,SC

        where Student.Sname='刘晨'ANDStudent.Sno=Sc.Sno

     

    8、查询非计算机系的不超过计算机系所有学生的年龄的学生姓名。

    SELECT x.SnameFROMStudentx

        WHERE x.Sage<(SELECTMIN(y.Sage)

        FROM Studenty WHEREy.Sdept='CS')ANDx.Sdept!='CS'

     

    查询语句3

    1 、使用带IN谓词的子查询

    (1)   查询与刘晨在同一个系学习的学生的学号和性名。

    select Sno,SnameFROM Student

        WHERE SdeptIN(SELECTSdept From Student WHERE Sname='刘晨')

    AND Sname!='刘晨'

    (2)   查询选修了数据库课程的学生的学号和姓名。

    SELECT Sno,SnameFrom Student

        WHERE SnoIN(SELECTSno From SC WHERE Cno

    IN(SELECTCno FROM Course WHERE CnameIN('数据库')))

     

    (3)   查询选修了1号课程和2号课程的学生的学号和姓名。

    SELECT Sno,SnameFROM Student

        WHERE SnoIN(SELECTSno FROM SC WHERE CnoIN('1','2'))

    2 、使用带比较运算的子查询

    (4)   查询比男生平均年龄小的所有学生的信息。

    SELECT *FROM Student /*因为AVG是采取舍去计数,故要加等号*/

        WHERE Sage<=(SELECTAVG(Sage)FROM Student WHERE Ssex='')

     

    (5)   查询比王敏年龄大的所有学生的信息。

    SELECT *FROM Student

        WHERE Sage>(SELECTSage FROM Student WHERE Sname='王敏')

     

    3 、使用带有ANY,ALL谓词的子查询

    (6)   查询其它系中比计算机系CS所有学生年龄都要小的学生姓名和年龄。

    SELECT Sname,SageFROM Student

        WHERE Sdept!='CS'

        AND Sage<=ALL(SELECTSage FROM Student WHERE Sdept='CS')

     

    (7)   查询与计算机系所有学生的年龄均不同的学生学号,姓名和年龄

    SELECT Sno,Sname,SageFROM Student

    WHERE Sage!=ALL(SELECTSage FROM Student WHERE Sdept='CS')

     

     

    4 、使用带Exists谓词的子查询和相关子查询

    (8)   查询选修了数据库的学生的姓名和学号

    SELECT Sname,SnoFROM Student

        WHERE EXISTS(SELECT* FROM SC

                      WHERE Student.Sno=SnoAND Cno

    IN(SELECTCno FROM Course WHERE Cname='数据库'))

     

    (9)   查询没有选修数据库的学生姓名和学号

    SELECT Sname,SnoFROM Student

        WHERE NOTEXISTS(SELECT* FROM SC

                         WHERE Student.Sno=SnoAND Cno

    IN(SELECTCno FROM Course WHERE Cname='数据库'))

     

    (10)查询所有选修了1号课程的学生姓名。

    SELECT SnameFROM Student

        WHERE EXISTS(SELECT *FROM SC

                         WHERE Student.Sno=SnoAND Cno='1')

     

    (11)查询没有人选修的课程的课程号和课程名。

    SELECT Cno,CnameFROM Course

        WHERE NOTEXISTS(SELECT* FROM SC WHERE Course.Cno=Cno)

     

     

  • 相关阅读:
    java——testNG——工作复习——xml详解
    转义符,re模块,rangdom随机数模块,
    nyoj 814又见拦截导弹
    Soj题目分类
    Xcode 性能优化
    python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法(pip使用豆瓣源)
    浅谈模拟退火
    43-正则表达式(1)
    命令行上的narrowing(随着输入逐步减少备选项)工具
    有效决策,这么做就对了!
  • 原文地址:https://www.cnblogs.com/xiangyangzhu/p/4239799.html
Copyright © 2011-2022 走看看