SQL数据库

基本程序

1. 题

先在D盘创建教学管理文件夹,Test文件夹
/*创建数据库“教学管理”。
(1) 有1个数据文件,数据文件逻辑文件名为“教学管理_Data”,
物理文件名为“教学管理_Data.mdf”,初始大小为5MB,最大大小不受限制,自动增长每次增加1MB。
(2) 事务日志文件只有一个,逻辑名为“教学管理_log”,物理文件名为“教学管理_log.ldf”,
初始大小1MB,最大大小为10MB,自动增长每次增加10%。
(3) 所有文件均保存在“D:\教学管理”文件夹中。
*/
CREATE DATABASE 教学管理
ON
(
NAME = 教学管理_Data,
FILENAME = ‘D:\教学管理\教学管理_Data.mdf’,
SIZE = 5MB,
FILEGROWTH = 10MB)
LOG ON
(
NAME = 教学管理_log,
FILENAME = ‘D:\教学管理\教学管理_log.ldf’,
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%)
/*创建数据库“Test”
(1) 要求该数据库有两个数据文件组,分别是primary和second。
(2) 共有3个数据文件,其中主数据文件逻辑文件名为“test”,
物理文件名为“test.mdf”,初始大小为10MB,最大大小为50MB,
自动增长每次增加5MB;辅助数据文件逻辑名分别为“test_Data2”、“test_Data3”,
物理文件名分别为“test_Data2.ndf”、“test_Data3.ndf”,初始大小均为5MB,
自动增长每次增加1MB,最大大小均为10MB,均放置在second文件组中。
(3) 事务日志文件只有一个,逻辑名为“test_log”,物理文件名为“test_log.ldf”,初始大小2MB,最大大小为10MB,自动增长,每次增加10%。
(4) 所有文件均保存在“D:\Test”文件夹中。
*/
CREATE DATABASE Test
ON primary
(
NAME = test,
FILENAME = ‘D:\Test\test.mdf’,
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB),
FILEGROUP second
(
NAME = test_Data2,
FILENAME = ‘D:\Test\test_Data2.ndf’,
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
(
NAME = test_Data3,
FILENAME = ‘D:\Test\test_Data3.ndf’,
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
LOG ON
(
NAME = test_log,
FILENAME = ‘D:\Test\test.ldf’,
SIZE = 2MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%)
/*在数据库Test中添加一个数据文件,逻辑文件名为“test_Data4”,
物理文件名为“test_Data4.ndf”,存放在“D:\Test”文件夹中,指定初始大小为5MB,
最大大小不受限,设置自动增长为2MB
*/
ALTER DATABASE Test
ADD FILE
(
NAME = tset_Data4,
FILENAME = ‘D:\Test\test_Data4.ndf’,
SIZE = 5MB,
FILEGROWTH = 2MB)
/**2.从数据库Test中删除数据文件test_Data4。
*/
ALTER DATABASE Test
REMOVE FILE test_Data4
/*3.在数据库Test中添加一个日志文件,逻辑文件名为“test_log2”,
物理文件名为“test_log2.ldf”,最大大小为10MB,按10%增长。
*/
ALTER DATABASE Test
ADD LOG FILE
(
NAME = test_log2,
FILENAME = ‘D:\Test\test_log2.ldf’,
MAXSIZE = 10MB,
FILEGROWTH = 10%)
/*删除数据库Test中的日志文件test_log2。
*/
ALTER DATABASE Test
REMOVE FILE test_log2
/*修改数据库Test中的数据文件test_Data2,初始大小为15MB,
最大大小为50MB,按3MB增长。
*/
ALTER DATABASE Test
MODIFY FILE
(
NAME = test_Data2,
SIZE = 15MB,
MAXSIZE = 50MB,
FILEGROWTH = 3MB)
/*将数据库Test的名字更改为Practice
*/
EXEC SP_RENAMEDB ‘Test’,‘Practice’
/*删除数据库Practice。
*/
DROP DATABASE Practice

2. 题

/*1. 使用T-SQL命令创建数据库“教学管理”,
其他选项均采用默认设置
*/
CREATE DATABASE 教学管理
/*2. 在数据库教学管理中,使用T-SQL命令创建如下数据库表。
教师表:Teacher,学生表:Student,课程表:Course,选课表SC,
授课表:TC。
*/
CREATE TABLE Teacher(
TNO char(2) PRIMARY KEY,
TNAME char(8) NOT NULL,
SEX char(2) CHECK(SEX=‘男’ or SEX=‘女’),
AGE tinyint CHECK(AGE>0),
PROF char(10) CHECK(PROF=‘助教’ or PROF=‘讲师’ or PROF=‘副教授’ or PROF=‘教授’),
SAL smallint default’200’ CHECK(SAL>0),
COMM smallint CHECK(COMM>=0),
DEPT varchar(20)
)
CREATE TABLE Student(
SNO CHAR(8) PRIMARY KEY,
SNAME CHAR(8) NOT NULL,
SEX CHAR(2) CHECK(SEX=‘男’ OR SEX=‘女’),
BIRTHDAY DATETIME ,
DEPT VARCHAR(20),
CLASS VARCHAR(10)
)
CREATE TABLE Course(
CNO CHAR(5) PRIMARY KEY,
CNAME VARCHAR NOT NULL,
CREDIT TINYINT,
SEMESTER TINYINT,
)
CREATE TABLE SC(
ID INT IDENTITY(1,1) NOT NULL,
SNO CHAR(8) NOT NULL,
CNO CHAR(5) NOT NULL,
SCORE TINYINT CHECK(0100),
PRIMARY KEY (ID),
FOREIGN KEY (SNO) REFERENCES Student(SNO),
FOREIGN KEY (CNO) REFERENCES Course(CNO)
)
CREATE TABLE TC(
ID INT IDENTITY(1,1) NOT NULL,
TNO CHAR(2) NOT NULL,
CNO CHAR(5) NOT NULL
)
/*① 向已有数据表Student中添加学籍列。列定义如下:
列名:NATIVE
数据类型及长度:CHAR(40)
是否可NULL:NOT NULL
*/
ALTER TABLE Student
ADD NATIVE CHAR(40) NOT NULL
/*② 修改已有数据表Student中的定义。
列名:NATIVE
数据类型及长度:CHAR(10)
是否可NULL:NULL
*/
ALTER TABLE Student
ALTER COLUMN NATIVE CHAR(10)
/*③ 删除数据库表Student中的NATIVE列。
*/
ALTER TABLE Student DROP COLUMN NATIVE
/*④为已有数据表Course中的CREDIT列添加约束CK_CREDIT,
保证学分大于零。
*/
ALTER TABLE Course WITH NOCHECK
ADD CONSTRAINT CK_CREDIT CHECK(CREDIT>0)
/*⑤为已有数据表Teacher中的COMM列添加默认值为0,
约束名为DF_COMM。
*/
ALTER TABLE Teacher WITH NOCHECK
ADD CONSTRAINT DF_COMM default 0 FOR COMM
/*⑥为已有数据表TC中的TNO列添加引用Teacher表的外键约束
FK_TC_TNO,CNO列添加引用Course表的外键约束FK_TC_CNO。
*/
ALTER TABLE TC
ADD CONSTRAINT FK_TC_TNO FOREIGN KEY (TNO) REFERENCES Teacher(TNO)
ALTER TABLE TC
ADD CONSTRAINT FK_TC_CNO FOREIGN KEY (CNO) REFERENCES Course(CNO)
/⑦删除数据表Teacher中的约束DF_COMM。/
ALTER TABLE Teacher
DROP CONSTRAINT DF_COMM
/*4.删除数据表TC。
*/
DROP TABLE TC

3. 题
之前表
CREATE DATABASE 教学管理
use 教学管理
CREATE TABLE Teacher
(
TNO CHAR(2) NOT NULL PRIMARY KEY ,
TNAME CHAR(8) NOT NULL ,
SEX CHAR(2) NULL CHECK(SEX=‘男’ or SEX=‘女’),
AGE TINYINT NULL CHECK(AGE>0) ,
PROF CHAR(10) NULL CHECK(PROF=‘助教’ or PROF=‘讲师’ or PROF=‘副教授’ or PROF=‘教授’),
SAL SMALLINT NULL CHECK(SAL>0) DEFAULT 2000 ,
COMM SMALLINT NULL CHECK(COMM> =0) ,
DEPT VARCHAR(20) NULL
)
CREATE TABLE Student
(
SNO CHAR(8) NOT NULL PRIMARY KEY ,
SNAME CHAR(8) NOT NULL ,
SEX CHAR(2) NULL CHECK(SEX=‘男’ or SEX=‘女’),
BIRTHDAY DATETIME NULL ,
DEPT VARCHAR(20) NULL ,
CLASS VARCHAR(10) NULL
)
CREATE TABLE Course
(
CNO CHAR(5) NOT NULL PRIMARY KEY ,
CNAME VARCHAR(30) NOT NULL ,
CREDIT TINYINT NULL ,
SEMESTER TINYINT NULL
)
CREATE TABLE SC
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY ,
SNO CHAR(8) NOT NULL FOREIGN KEY(SNO) REFERENCES Student(SNO) ,
CNO CHAR(5) NOT NULL FOREIGN KEY(CNO) REFERENCES Course(CNO) ,
SCORE TINYINT NULL CHECK(SCORE>=0 AND SCORE <=100) ,
)
CREATE TABLE TC
(
ID INT NOT NULL IDENTITY(1,1) ,
TNO CHAR(2) NOT NULL ,
CNO CHAR(5) NOT NULL
)
ALTER TABLE Student ADD NATIVE CHAR(40) NOT NULL
ALTER TABLE Student ALTER COLUMN NATIVE CHAR(10) NULL
ALTER TABLE Student DROP COLUMN NATIVE
ALTER TABLE Course WITH NOCHECK
ADD CONSTRAINT CK_CREDIT CHECK(CREDIT>0)
ALTER TABLE Teacher
ADD CONSTRAINT DF_COMM DEFAULT 0 FOR COMM
ALTER TABLE TC ADD CONSTRAINT FK_TC_TNO FOREIGN KEY (TNO) REFERENCES Teacher (TNO)
ALTER TABLE TC
ADD CONSTRAINT FK_TC_TNO FOREIGN KEY(CNO) REFERENCES Course (CNO)
ALTER TABLE Teacher DROP CONSTRAINT DF_TC_CNO
DROP TABLE TC

指定列或全部列查询
1)查询Student学生表中全体学生的详细信息。
2)查询所有学生的姓名及其出生年份。
3) 查询所有教师的姓名和性别。
4)查询课程的课程编号、课程名及学分。
5)查询有学生选修的课程号。

SELECT * FROM Student
SELECT Student.SNAME,Student.BIRTHDAY FROM Student
SELECT Teacher.TNAME,Teacher.SEX FROM Teacher
SELECT SC.ID,SC.CNO,SC.SCORE FROM SC
SELECT DISTINCT SC.CNO FROM SC

按条件查询
1)查询学时为4的课程名称。
2) 查询学号为S3的学生姓名、系名及年龄。
3)查询考试成绩有不及格的学生学号。
4)查询有选修课程没考试的学生学号和课程号。
5)查询考试成绩有75-85分之间的学生学号和成绩。
6)查询年龄在20-22岁之间的学生的姓名、系别和年龄。
7)查询所有姓李或姓王的学生的姓名、学号和性别。
8)查询名字中第二个字为“晓”字的男生姓名和系别。
9) 查询薪水在3000以上的信息系教师姓名。(薪水=工资+岗位津贴)
10) 查询计算机和通信的教师姓名及年龄。
SELECT DISTINCT SC.CNO FROM SC WHERE SC.SCORE =4
SELECT Student.SNAME,Student.DEPT,YEAR(Student.BIRTHDAY) FROM Student WHERE Student.SNO=‘S3’
SELECT DISTINCT SC.SNO FROM SC WHERE SC.SCORE<60
SELECT DISTINCT SC.SNO,SC.CNO FROM SC WHERE SCORE IS NULL
SELECT SC.SNO,SC.SCORE FROM SC WHERE (SC.SCORE>=75 AND SC.SCORE<=85)
SELECT Student.SNAME,Student.DEPT,YEAR(Student.BIRTHDAY) FROM Student WHERE(YEAR(Student.BIRTHDAY)>=‘20’ AND YEAR(Student.BIRTHDAY)<=‘22’)
SELECT Student.SNAME,Student.SNO,Student.SEX FROM Student WHERE Student.SNAME LIKE ‘[李王]%’
SELECT Student.SNAME,Student.DEPT FROM Student WHERE Student.SNAME LIKE ‘_[晓]%’
SELECT Teacher.TNAME FROM Teacher WHERE ((Teacher.SAL+Teacher.COMM)>3000)
SELECT Teacher.TNAME,Teacher.SEX FROM Teacher WHERE (Teacher.DEPT=‘计算机’ OR Teacher.DEPT=‘通信’)

对查询结果排序
1)查询学生信息,按照出生日期降序排列。
2) 查询计算机、电信学生的姓名、系名,结果按系名升序、姓名降序排序。
3)查询所有有课程号C2成绩的学生的学号、课程号和成绩,并按成绩降序排序。
4)查询学号为S2的学生参加考试的成绩,结果按照成绩降序排列。
SELECT * FROM Student ORDER BY Student.BIRTHDAY DESC
SELECT Student.SNAME,Student.DEPT FROM Student WHERE(Student.DEPT='计算机’OR Student.DEPT=‘电信’) ORDER BY Student.DEPT ASC,Student.SNAME DESC
SELECT SC.SNO,SC.CNO,SC.SCORE FROM SC WHERE(SC.CNO= ‘c2’) ORDER BY SC.SCORE DESC
SELECT SC.SCORE FROM SC WHERE(SC.SNO=‘S2’) ORDER BY SC.SCORE DESC

  1. 使用聚集函数的查询
    1)查询计算机学生的总人数。
    2)查询C3课程考试的成绩最高分及最低分。
  1. 查询学号为S1的学生所有课程的平均成绩。
    4)查询参加了C1课程考试的学生人数。
    5)查询所有姓王的计算机教师人数。
    SELECT COUNT(DISTINCT Student.SNO) FROM Student WHERE(Student.DEPT=‘计算机’)
    SELECT MAX(SC.SCORE),MIN(SC.SCORE) FROM SC WHERE(SC.CNO=‘C3’)
    SELECT AVG(SC.SCORE) FROM SC WHERE(SC.SNO=‘S1’)
    SELECT COUNT(DISTINCT SC.SNO) FROM SC WHERE(SC.CNO=‘C1’)
    SELECT COUNT(Teacher.TNAME) FROM Teacher WHERE Teacher.TNAME LIKE ‘[李]%’
  1. 分组统计查询
  1. 查询学生各个性别及其人数。
    2)查询各个系各个性别教师的人数。
    3)查询每个学生的学号及所有考试的平均成绩。
    4)查询各门课程的课程号及选课人数。
    5)查询选修了两门以上课程的学生学号和平均成绩。
    6)查询所有课程考试成绩均及格的学生学号。
    SELECT COUNT(DISTINCT Student.SNO) FROM Student WHERE Student.SEX=‘男’
    SELECT COUNT(DISTINCT Student.SNO) FROM Student WHERE Student.SEX=‘女’

SELECT Dept,COUNT() FROM Teacher WHERE Teacher.SEX=‘男’ GROUP BY DEPT
SELECT Dept,COUNT(
) FROM Teacher WHERE Teacher.SEX=‘女’ GROUP BY DEPT
SELECT SC.SNO,AVG(SC.SCORE) FROM SC GROUP BY SC.SNO
SELECT SC.CNO,COUNT(SC.SNO) FROM SC GROUP BY SC.CNO

SELECT SC.SNO FROM SC GROUP BY SC.SNO HAVING COUNT()>1
SELECT AVG(SC.SCORE) FROM SC GROUP BY SC.SNO HAVING COUNT(
)>1

SELECT SC.SNO FROM SC GROUP BY SC.SNO HAVING MIN(SC.SCORE)>=60

4 题
/*内连接

  1. 查询所有选课学生的学号、姓名、选修课程号及考试成绩。
  2. 查询所有选课学生的学号、姓名、选修课程名称及考试成绩。
  3. 查询开课课程的课程号、任课教师姓名,结果按课程号排序。
  4. 查询开课课程的课程名称及任课教师姓名。
  5. 查询教授“C语言程序设计”课程的教师姓名、性别及职称。
  6. 查询选修了课程的计算机系学生的姓名、选修课程名称及考试成绩。
  7. 统计学生“张晓明”选修课程的门数及平均成绩。
    /
    SELECT Student.SNO 学号,Student.SNAME 姓名,SC.CNO 选修课程号,SC.SCORE 考试成绩
    FROM Student JOIN SC ON Student.SNO = SC.SNO
    SELECT Student.SNO 学号,Student.SNAME 姓名,TC.TNO 选修课程名,SC.SCORE 考试成绩
    FROM Student JOIN SC ON Student.SNO = SC.SNO JOIN TC ON TC.CNO = SC.CNO
    SELECT TC.TNO, Teacher.TNAME
    FROM Teacher JOIN TC ON Teacher.TNO = TC.TNO
    ORDER BY TC.TNO
    SELECT Teacher.TNAME,TC.CNO
    FROM Teacher JOIN TC ON Teacher.TNO = TC.TNO
    SELECT Teacher.TNAME,Teacher.SEX,Teacher.PROF
    FROM Teacher JOIN TC ON Teacher.TNO = TC.TNO
    JOIN Course ON TC.CNO = Course.CNO
    WHERE Course.CNAME = ‘C语言程序设计’
    SELECT Student.SNAME,Course.CNAME,SC.SCORE
    FROM Student JOIN SC ON Student.SNO = SC.SNO
    JOIN Course ON SC.CNO = Course.CNO
    WHERE Student.DEPT = ‘计算机’
    SELECT COUNT(
    ),AVG(SC.SCORE) FROM Student JOIN SC ON Student.SNO = SC.SNO
    WHERE Student.SNAME = ‘张晓明’
    /*自连接
  8. 查询所有比“刘伟”工资高的教师姓名、工资及刘伟的工资。
  9. 查询与“王青山”同班的学生学号和姓名。
    */
    SELECT T2.TNAME,T2.COMM
    FROM Teacher T1 JOIN Teacher T2 ON T1.COMM = T2.COMM
    WHERE T1.TNAME=‘刘伟’ AND T2.COMM>=T1.COMM
    SELECT S2.SNO,S2.SNAME
    FROM Student S1 JOIN Student S2 ON S1.CLASS = S2.CLASS
    WHERE S1.SNAME = ‘王青山’ AND S2.CLASS = S1.CLASS
    /*外连接
  10. 查询所有学生的选课情况,要求返回学生学号、姓名、选修课程号及成绩(没有选课的学生的选课信息显示为空)。
  11. 查询所有学生的选课情况,要求返回学生学号、姓名、选修课程名称及成绩(没有选课的学生的选课信息显示为空)。
  12. 查询所有未选修课程的学生名单,返回学生学号和姓名。
    /
    SELECT Student.SNO,Student.SNAME,SC.CNO,SC.SCORE
    FROM Student LEFT OUTER JOIN SC ON Student.SNO = SC.SNO
    SELECT Student. SNO,Student.SNAME,Course.CNAME,SC.SCORE
    FROM Student LEFT OUTER JOIN SC ON Student.SNO = SC.SNO
    LEFT OUTER JOIN Course ON SC.CNO = Course.CNO
    SELECT Student.SNO,Student.SNAME
    FROM Student LEFT OUTER JOIN SC ON Student.SNO = SC.SNO
    LEFT OUTER JOIN Course ON SC.CNO = Course.CNO
    WHERE SC.CNO IS NULL
    /
  1. 查询教师“张兰”讲授课程的课程名称。
  2. 统计选修了课程“微机原理与技术”的每个专业的总成绩和平均成绩,按照平均成绩降序排序。
  3. 查询所有学生都没有选修的课程编号和课程名。
  4. 查询同时选修了“C语言程序设计”和“微机原理与技术”的学生姓名。
    */
    SELECT Course.CNAME
    FROM Teacher JOIN TC ON Teacher.TNO = TC.TNO JOIN Course ON TC.CNO = Course.CNO
    WHERE Teacher.TNAME = ‘张兰’

SELECT DEPT,COUNT(SC.SCORE),AVG(SC.SCORE)
FROM Student JOIN SC ON Student.SNO = SC.SNO JOIN Course ON SC.CNO = Course.CNO
WHERE Course.CNAME = ‘微机原理与技术’
GROUP BY DEPT
ORDER BY AVG(SC.SCORE) DESC

SELECT Course.CNO,Course.CNAME
FROM Course LEFT JOIN SC ON Course.CNO = SC.CNO
WHERE SC.CNO IS NULL

SELECT Student.SNAME
FROM Course AS C1 JOIN Course AS C2 ON C1.CNO !=C2.CNO
RIGHT JOIN SC AS SC1 ON C2.CNO = SC1.CNO
RIGHT JOIN SC AS SC2 ON C1.CNO = SC2.CNO
RIGHT JOIN Student ON Student.SNO = SC1.SNO
WHERE C1.CNAME = ‘C语言程序设计’
AND C2.CNAME = ‘微机原理与技术’
AND SC1.SNO = SC2.SNO
第五题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值