`
sylinx_yqg
  • 浏览: 143429 次
  • 性别: Icon_minigender_1
  • 来自: 福建 漳州
社区版块
存档分类
最新评论

学习数据库的好资料

阅读更多

/***************************************
 作者:颜清国
 学习数据库的资料 2007.4.19
*****************************************/

/*****************************************

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

 

 



 

分享到:
评论

相关推荐

    数据库 数据库学习资料

    数据库学习资料的集合对初学者来说是一份宝贵的资源,它可以帮助你系统地理解数据库的基础知识,并逐步掌握高级概念和技术。 首先,数据库的基本概念包括数据库(Database)、数据库管理系统(DBMS)和数据库系统...

    INFORMIX数据库学习资料

    【Informix数据库学习资料】 Informix数据库是一款高效且灵活的关系型数据库管理系统,广泛应用于企业级应用,尤其在金融、电信等领域。本学习资料集合包含了Informix数据库操作、SQL语法、编程、性能优化、服务器...

    中级数据库学习资料

    【中级数据库学习资料】 在中级数据库学习的旅程中,MSSQL(Microsoft SQL Server)是一个重要的里程碑。MSSQL是一款由微软开发的关系型数据库管理系统,广泛应用于企业级数据存储、管理和处理。它提供了高效的数据...

    数据库学习资料-PPT课件.ppt

    学习数据库需要学习数据库的基本概念、数据库的设计和实现、数据库的管理和维护等等。资源建议学习者多实践、多操作、多学习。 在数据库学习中,还需要学习数据库的基本概念,例如数据、数据库、数据库管理系统等等...

    SQL数据库学习资料

    SQL数据库

    Oracle数据库学习资料

    本资料集是我在中软学习期间整理的一系列关于Oracle数据库的学习资源,旨在帮助初学者和进阶者深入理解Oracle的核心概念和技术。 首先,Oracle数据库的基础知识包括数据库的概念、数据模型以及SQL语言。数据库是...

    Oracle数据库 资料学习

    Oracle数据库是全球最广泛使用的...通过分析和实践这些实际案例,你可以更好地将理论知识应用于实际操作中,提升对Oracle数据库的理解和应用能力。记得不断练习和实验,理论结合实践,才能真正掌握Oracle数据库的精髓。

    teradata数据库学习资料

    在“teradata数据库学习资料”这个主题中,我们可以通过提供的资源深入理解Teradata的核心概念、基本操作以及优化策略。 首先,"teradata-参考资料(某著名外企内部培训所用资料).pdf"很可能包含了一些内部培训课程...

    labview数据库学习资料

    数据库学习资料通常包含以下知识点: 1. **LabVIEW的数据库接口**:LabVIEW提供了多种与数据库交互的方法,如Database Connectivity Toolkit和ADO.NET等。这些工具包允许用户通过SQL(Structured Query Language)...

    数据库学习资料(oracle)

    【数据库学习资料(Oracle)】 Oracle数据库是一款广泛应用于企业级数据管理的大型关系型数据库管理系统,由美国甲骨文公司开发。本学习资料包涵盖了Oracle的多个重要方面,旨在帮助学习者深入理解并掌握Oracle的核心...

    数据库相关学习资料(PDF)

    学习数据库时,了解数据库管理系统(DBMS)的概念至关重要。DBMS是用于创建和管理数据库的软件,它负责处理用户请求,确保数据的正确性。例如,MySQL是一个广泛使用的开源DBMS,适合各种规模的企业。 安装数据库...

    数据库学习资料

    本压缩包文件“数据库学习资料”包含了丰富的学习资源,帮助你深入理解和掌握数据库的相关知识。 在数据库的学习中,首先需要理解基本概念,如关系型数据库(Relational Database)、SQL(Structured Query ...

    MYSQL数据库大进级,是非常全面的MYSQL数据库进阶学习资料!

    MYSQL数据库大进级,是非常全面的MYSQL数据库进阶学习资料!

    数据库学习资料下载

    数据库是存储和管理数据的核心工具,对于任何IT...同时,理论知识的积累和最佳实践的学习同样重要,因为它们会帮助你更好地应对数据库设计、性能优化和故障排查等挑战。记得,持续学习和实践是成为数据库专家的关键。

    数据库资料数据库的资料

    在学习数据库的过程中,我们首先需要理解数据库的基本概念,如数据模型、关系模型、实体关系(ER)图等。数据模型是数据库设计的基础,包括概念数据模型(如实体-关系模型)、逻辑数据模型(如关系模型)和物理数据...

    数据库学习入门数据库基础入门

    最后,实践是学习数据库的最好方式。通过实际操作,如创建表、编写查询、管理用户和备份恢复,可以巩固理论知识,并逐渐熟悉数据库管理系统。 总的来说,数据库学习入门需掌握SQL基本语法、数据库设计原则、事务...

    oracle数据库整体学习资料

    这个"Oracle数据库整体学习资料"压缩包包含了多个PPT和文档,旨在为学习者提供一个全面了解和掌握Oracle数据库的资源集合。 首先,我们从`Oracle体系结构简介.ppt`开始,这个文件会详细介绍Oracle数据库的核心组成...

    JMeter数据库压力测试工具学习资料.rar

    JMeter数据库压力测试工具学习资料JMeter数据库压力测试工具学习资料JMeter数据库压力测试工具学习资料JMeter数据库压力测试工具学习资料JMeter数据库压力测试工具学习资料JMeter数据库压力测试工具学习资料JMeter...

    (完整版)数据库学习资料.ppt

    数据库学习资料是指学习数据库相关知识的所有资源的总称。数据库是现代信息系统的核心组件,广泛应用于各个领域,如图书馆管理系统、工资管理系统等。学习数据库知识是掌握信息技术的重要一步。 学习数据库需要了解...

    VFP资料学习大全,学习VFP程序设计及数据库的好资料

    本压缩包包含的是VFP的学习资料,主要关注VFP的程序设计和数据库操作,适合备考或自我提升的学员使用。 文件“VFP 6.0 全套中文命令与函数帮助文件.chm”是一个完整的VFP 6.0命令和函数参考手册,提供了全面的中文...

Global site tag (gtag.js) - Google Analytics