zoukankan      html  css  js  c++  java
  • 数据库技术源代码

    COURSE表:

    CNO    CNAME                CPNO   CCREDIT
    ------ -------------------- ------ -------
    1      SS                   5      4
    2      数学                 NULL   4
    3      信息系统             1      4
    4      操作系统             6      3
    5      数据结构             7      4
    6      数据处理             NULL   2
    7      PASCAL语言           6      4


    STUDENT表:

    SNO       SNAME      SSEX   SAGE   SDEPT     
    --------- ---------- ------ ------ ----------
    200215121 李勇         M      20     CS
    200215122 刘晨         F      19     CS
    200215123 王敏         F      18     MA
    200215125 张立         M      19     IS


    SC表:

    SNO       CNO    GRADE 
    --------- ------ ------
    200215121 1      92
    200215121 2      85
    200215121 3      88
    200215122 2      90
    200215122 3      80

    *****************************************/
    /****************************************
      创建一个数据库
    *****************************************/
    CREATE DATABASE ST;

    USE ST;   /*使用ST数据库*/


    /****************************************
     创建学生表
    *****************************************/
    CREATE TABLE STUDENT
     ( SNO CHAR(9) PRIMARY KEY,  /*学号*/
       SNAME VARCHAR(10),    /*姓名*/
       SSEX VARCHAR(6),      /*性别*/
       SAGE SMALLINT,        /*年龄*/
       SDEPT VARCHAR(10)     /*院系*/
      );

    /******************************************
     创建课程表
    ******************************************/

    CREATE TABLE COURSE
      ( CNO SMALLINT PRIMARY KEY,   /*课程号*/
        CNAME VARCHAR(20),          /*课程名称*/
        CPNO SMALLINT,              /*先行课程*/
        CCREDIT SMALLINT,            /*学分*/
        FOREIGN KEY (CPNO) REFERENCES COURSE(CNO)  /*定义外键*/
       );


    /******************************************
     创建学生选课表
    *******************************************/
    CREATE TABLE SC
       ( SNO CHAR(9), 
         CNO SMALLINT,
         GRADE SMALLINT,
         PRIMARY KEY (SNO,CNO),
         FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),
         FOREIGN KEY (CNO) REFERENCES COURSE(CNO)
       );


    /**********************************************
     为三个表建立索引
    ***********************************************/
    CREATE UNIQUE INDEX COURSEID ON COURSE(CNO);
    CREATE UNIQUE INDEX STUDENTID ON STUDENT(SNO);
    CREATE UNIQUE INDEX SCID ON SC(SNO,CNO);  /*默认为升序*/


    /*******************************************************
     为学生表插入数据,这里在性别里面输入中文MYSQL报错
    *********************************************************/
    INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) VALUES('200215121','李勇','M',20,'CS');
    INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) VALUES('200215122','刘晨','F',19,'CS');
    INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) VALUES('200215123','王敏','F',18,'MA');
    INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) VALUES('200215125','张立','M',19,'IS');


    /*************************************************
     为课程表插入数据
    **************************************************/
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(1,'SS',NULL,4);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(2,'数学',NULL,4);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(3,'信息系统',1,4);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(4,'操作系统',NULL,3);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(5,'数据结构',NULL,4);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(6,'数据处理',NULL,2);
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) VALUES(7,'PASCAL语言',NULL,4);
    UPDATE COURSE SET CPNO=5 WHERE CNO=1;
    UPDATE COURSE SET CPNO=6 WHERE CNO=4;
    UPDATE COURSE SET CPNO=7 WHERE CNO=5;
    UPDATE COURSE SET CPNO=6 WHERE CNO=7;


    /***************************************************
     为SC插入数据
    ****************************************************/
    INSERT INTO SC(SNO,CNO,GRADE) VALUES('200215121',1,92);
    INSERT INTO SC(SNO,CNO,GRADE) VALUES('200215121',2,85);
    INSERT INTO SC(SNO,CNO,GRADE) VALUES('200215121',3,88);
    INSERT INTO SC(SNO,CNO,GRADE) VALUES('200215122',2,90);
    INSERT INTO SC(SNO,CNO,GRADE) VALUES('200215122',3,80);


    /********************************************
     查询全体学生的学号和姓名
    *********************************************/
    SELECT SNO,SNAME FROM STUDENT;


    /********************************************
     查询全体学生的学号,姓名和所在系
    *********************************************/
    SELECT SNO,SNAME,SDEPT FROM STUDENT

    /********************************************
     查询全体学生的详细记录
    *********************************************/
    SELECT * FROM STUDENT;


    /********************************************
     查询全体学生的姓名和出生年月,BIRTH为列名
    *********************************************/
    SELECT SNAME,2007-SAGE AS BIRTH FROM STUDENT;

    /********************************************
     查询全体学生的姓名和出生年月和所在院系,要求
     用小写字母表示所有系名
    *********************************************/
    SELECT SNAME,'YEAR OF BIRTH:' ,2007-SAGE AS BIRTH,LOWER(SDEPT) AS SDEPT FROM STUDENT;


    /********************************************
     查询全选修了课程的学生号
    *********************************************/
    SELECT SNO FROM SC;
    /*或
    SELECT DISTINCT SNO FROM SC;*/


    /********************************************
     查询计算机科学系全体学生的名单
    *********************************************/
    SELECT  SNAME FROM STUDENT WHERE SDEPT='CS';


    /********************************************
     查询所有年龄在20岁以下的学生名单及其年龄
    *********************************************/
    SELECT  SNAME,SAGE FROM STUDENT WHERE SAGE < 20;


    /********************************************
     考试成绩有不几个的学生的学号
    *********************************************/
    SELECT  DISTINCT SNO FROM SC WHERE GRADE < 60;


    /********************************************
     查询年龄在20-30之间的学生姓名、年龄、系
    *********************************************/
    SELECT  SNAME,SAGE,SDEPT FROM STUDENT WHERE SAGE BETWEEN 20 AND 30;

    /********************************************
     查询计算机科学系、数学系和信息系的姓名和性别
    *********************************************/
    SELECT  SNAME,SSEX FROM STUDENT WHERE SDEPT IN ('CS','MA','IS');


    /********************************************
     查询不是计算机科学系、数学系和信息系的姓名和性别
    *********************************************/
    SELECT  SNAME,SSEX FROM STUDENT WHERE SDEPT NOT IN ('CS','MA','IS');

    /********************************************
     查询学号为200215121的学生的详细情况
    *********************************************/
    SELECT  * FROM STUDENT WHERE SNO LIKE '200215121';


    /***********************************************
     查询所有姓刘的学生的姓名、学号和性别
    ************************************************/
    SELECT SNAME,SNO,SSEX FROM STUDENT WHERE SNAME LIKE '刘%';


    /***********************************************
     查询所有姓刘的且全名为3个字符的学生的姓名
    ************************************************/
    SELECT SNAME,SNO,SSEX FROM STUDENT WHERE SNAME LIKE '刘__';


    /***********************************************
     查询所有姓不姓刘的学生信息
    ************************************************/
    SELECT * FROM STUDENT WHERE SNAME NOT LIKE '刘%';


    /***********************************************
     查询没有先行课的课程
    ************************************************/
    SELECT * FROM COURSE WHERE CPNO IS NULL;


    /***********************************************
     查询计算机系年龄在20岁以下的学生姓名
    ************************************************/
    SELECT SNAME FROM STUDENT WHERE SDEPT='CS' AND SAGE < 20;


    /***********************************************
     查询选修了3号课程的学生的学号及其成绩,查询结果按
     分数的降序排列
    ************************************************/
    SELECT SNO,GRADE FROM SC WHERE CNO=3 ORDER BY GRADE DESC;


    /***********************************************
      查询学生总人数
    ************************************************/
    SELECT COUNT(*) AS TOTAL FROM STUDENT;


    /***********************************************
      查询选修了课程的学生人数
    ************************************************/
    SELECT COUNT(DISTINCT SNO) AS TOTALSNO FROM SC;


    /***********************************************
      计算1号课程的学生平均成绩
    ************************************************/
    SELECT AVG(GRADE)AS GRADE FROM SC WHERE CNO = 1;


    /***********************************************
      查询选修3号课程的学生的最高分数
    ************************************************/
    SELECT MAX(GRADE)AS GRADE FROM SC WHERE CNO = 3;


    /***********************************************
      查询学生200215121选修课的总学分数
    ************************************************/
    SELECT SUM(CCREDIT)AS CCREDIT FROM SC,COURSE WHERE SNO = '200215121' AND SC.CNO =

    COURSE.CNO;

    /***************************************
     例31 求各个课程号及相应的选课人数
    *****************************************/
    SELECT COUNT(SNO) AS NUMBER,CNO FROM SC
      GROUP BY CNO


    /*******************************************
     查询选修了2门以上的课程的学生学号
    ********************************************/
    SELECT COUNT(CNO),SNO FROM SC
       GROUP BY SNO
       HAVING COUNT(CNO) > 2


    /********************************************
     例33查询每个学生及其选修课程的情况
    *********************************************/
    SELECT STUDENT.*,SC.* FROM SC,STUDENT WHERE SC.SNO = STUDENT.SNO;

    /********************************************
    对例33用自然连接完成
    *********************************************/
    SELECT STUDENT.SNAME,STUDENT.SSEX,STUDENT.SAGE,STUDENT.SDEPT,SC.* FROM SC,STUDENT
           WHERE SC.SNO = STUDENT.SNO;

    /*****************************************
     查询每一门课程的间接先修课
    *****************************************/
    SELECT SY.CNO,SX.CPNO FROM COURSE SX,COURSE SY
    WHERE SX.CNO = SY.CPNO


    /********************************************
    对例33用左外连接连接完成,注意这里加OUT出错
    *********************************************/
    SELECT STUDENT.SNAME,STUDENT.SSEX,STUDENT.SAGE,STUDENT.SDEPT,SC.* FROM 
       STUDENT LEFT JOIN  SC ON(SC.SNO = STUDENT.SNO);


    /********************************************
    查询每个学生的学号、姓名、选修的课程名及成绩
    *********************************************/
    SELECT STUDENT.SNO,STUDENT.SNAME,COURSE.CNAME,COURSE.CCREDIT FROM SC,STUDENT,COURSE
       WHERE SC.CNO =COURSE.CNO AND SC.SNO = STUDENT.SNO;


    /********************************************
      查询与刘晨在同一个系学习的学生
    *********************************************/

    SELECT SX.* FROM STUDENT SX
       WHERE SX.SDEPT IN
                 ( SELECT SY.SDEPT FROM STUDENT SY
                   WHERE SY.SNAME='刘晨'
                 );
    /************
       或者如下:
     
       SELECT SX.* FROM STUDENT SX,STUDENT SY
          WHERE SX.SDEPT = SY.SDEPT AND SY.SNAME = '刘晨';
      或者
       SELECT * FROM STUDENT SX WHERE EXISTS
            ( SELECT * FROM STUDENT SY WHERE SY.SDEPT = SX.SDEPT AND SY.SNAME='刘晨'); 
    **************/


    /********************************************
      查询选修了课程名为"信息系统"的学生学号和姓名
    *********************************************/

    SELECT SNO,SNAME FROM STUDENT
           WHERE SNO IN
              (
                SELECT SNO FROM SC
                    WHERE  CNO IN
                       ( SELECT CNO FROM COURSE
                          WHERE CNAME = '信息系统'
                       )
               );
     
     
    /********************************************
      找出每个学生超过他选修课程平均成绩的课程号
    *********************************************/
    SELECT SX.SNO,SX.CNO FROM SC SX WHERE
             SX.GRADE  >
             ( SELECT AVG(GRADE) FROM SC SY
                  WHERE SX.SNO = SY.SNO
                  GROUP BY SY.SNO
              );


    /*****************************************************
      查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄
    *******************************************************/
    SELECT SNAME,SAGE FROM STUDENT
       WHERE SAGE < ANY
           (SELECT SAGE FROM STUDENT
               WHERE SDEPT='CS'
           )
          AND SDEPT<>'CS';


    /*****************************************************
      查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄
    *******************************************************/
    SELECT SNAME,SAGE FROM STUDENT
       WHERE SAGE < ALL
           (SELECT SAGE FROM STUDENT
               WHERE SDEPT='CS'
           )
          AND SDEPT<>'CS';


    /*****************************************************
      查询所有选修了1号课程的学生姓名
    *******************************************************/
    SELECT SNAME FROM STUDENT
       WHERE EXISTS 
             ( SELECT * FROM SC
               WHERE SC.SNO = STUDENT.SNO AND SC.CNO='1'
              );


    /******************************************
     查询选修了全部课程的学生姓名
    *******************************************/
    SELECT SNAME FROM STUDENT WHERE NOT EXISTS
        ( SELECT * FROM COURSE WHERE NOT EXISTS
           ( SELECT * FROM SC WHERE STUDENT.SNO = SC.SNO AND COURSE.CNO = SC.CNO)
         );


    /*****************************************************
     查询至少选修了学生200215122选修的全部课程的学生号码
    *****************************************************/
    SELECT DISTINCT SNO FROM SC X
        WHERE NOT EXISTS
           ( SELECT * FROM SC Y WHERE SNO='200215122' AND
                 NOT EXISTS
                 ( SELECT * FROM SC Z WHERE Z.SNO = X.SNO AND Y.CNO = Z.CNO
                 )
            ); 
     

    /**********************************************************
     从自身表中选择一条记录,修改某个字段再回插到自身表中
     这里的INSERT INTO 可以用来插入子查询
    *********************************************************/
    INSERT INTO COURSE(CNO,CNAME,CPNO,CCREDIT) SELECT '8',CNAME,CPNO,CCREDIT FROM  COURSE WHERE

    CNO='2';


    /********************************************
     建立信息系学生的视图,在SQL SERVER 2000中后面
    不能跟逗号,并且CREATE VIEW必须是第一条语句
    **********************************************/
    CREATE VIEW VSTUDENT
    AS
    SELECT SNO,SNAME,SAGE,SSEX
    FROM STUDENT WHERE SDEPT='CS'
    WITH CHECK OPTION

  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/qixin622/p/950521.html
Copyright © 2011-2022 走看看