记录数据库原理实验所用到的代码。
创建数据库
创建名称为XSGL_CP的数据库。
create database XSGL_CP--设置主文件的逻辑名称、文件名、初始大小、最大文件大小限制、需要增加时的增量on(name=XSGL_MAIN_DATA,filename='C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XSGL_CP.mdf',size=10MB,filegrowth=5%)--一次增加5%--设置日志文件的逻辑名称、文件名、初始大小、最大文件大小限制、需要增加时的增量log on (name=XSGL_LOG,filename='C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\XSGL_CP.ldf',size=2MB,maxsize=5MB,filegrowth=1MB--以此增加1MB)go
创建表
/*使用SQL语句创建表*//*创建学院信息表*/create table dept(DNO char(4) not null,DNAME char(30) not null,DEAN char(10),primary key(DNO));/*创建学生信息表*/create table student(SNO char(8) not null unique, --UNIQUE 约束唯一标识数据库表中的每条记录,表示这个属性不存在重复的元素,一个表中可以出现多个unique属性SNAME char(10) not null,AGE smallint,SEX char(2) ,check(SEX in ('男','女')),DNO char(4) not null,BIRTHDAY datetime,primary key(SNO), --PRIMARY KEY 拥有自动定义的 UNIQUE 约束foreign key(DNO) references dept); --使用外键约束,用dept表中的DNO与此表中的DNO进行关联,dept表作为主表,student作为子表/*创建课程信息表*/create table course(CNO char(8) not null unique,CNAME char(30) not null,TNAME char(10),CREDIT float,ROOM char(30),primary key(CNO));/*创建学生选课表*/create table sc(SNO char(8) not null,CNO char(8) not null,GRADE float,check(GRADE between 0 and 100),primary key(SNO,CNO), --SNO与CNO作为联合主键,一个表中只能有一个主键,不能指定两个主键foreign key(SNO) references student,foreign key(CNO) references course);go
下面这篇文章详细介绍了外键的使用:
【数据库基础】Foreign Key的使用及其优缺点
添加属性
向已经存在的student表中添加新属性ability:
alter table studentadd ability char(10) not null
分离数据库
分离数据库是指将数据库从 SQL Server 实例中分离出去,但是数据库的数据文件和事务日志文件保
持不变。分离数据库之后,用户就可以将这些数据库文件附加到任何 SQL Server 实例中,包括分离该数
据库的服务器。数据库的分离和附加在数据库转移中经常用到。
分离数据库步骤:鼠标右键点击想要分离的数据库名称——任务——分离
添加数据库步骤:右击“数据库”——附加——添加
select查询
table的格式:
实验:
/*求学院编号为'0001'的学生的学号、姓名、性别*/select SNO,SNAME,SEXfrom studentwhere DNO='0001'/*求学院编号为'0001'的男生的学号、姓名、性别*/select SNO,SNAME,SEXfrom studentwhere DNO='0001' and SEX='男'/*求选修授课班号为'327401'且成绩在 80~90 之间的学生学号和成绩,并将成绩乘以系数 0.8 输出,且将 SNO 列更名为学号,成绩列更名为处理成绩 。*/select SNO as 学号,GRADE*0.8 as 处理成绩from scwhere GRADE between 80 and 90 and CNO='327401'/*求每个学生的年龄,并输出姓名和年龄*/select SNAME,AGEfrom student--使用YEAR函数以及BIRTHDAY计算年龄select SNAME as 姓名 ,YEAR(GETDATE())-YEAR(BIRTHDAY) as 年龄from student/*寻找数据库中非空的AGE或者BIRTHDAYselect SNAME,AGE,BIRTHDAYfrom studentwhere AGE is not null or BIRTHDAY is not null*//*求选修了课程的学生的学号*/select distinct SNO --使用distinct去除重复的元素from scwhere CNO is not null/*求选修授课班号为’327401’的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列*/select SNO,GRADEfrom scwhere CNO='327401'order by GRADE desc,SNO asc --使用order by进行排序,DESC表示降序,ASC表示升序/*求缺少了成绩的学生学号和课程号。*/select SNO,CNOfrom scwhere GRADE is null/*统计选课学生人数及最高分成绩和最低分成绩*/select COUNT(distinct SNO) as 总选课人数,MAX(GRADE) as 最高成绩,MIN(GRADE) as 最低成绩from sc/*求学院编号为’0001’或‘0002‘中姓张的学生的信息。*/select * from studentwhere (DNO='0001' or DNO='0002') and SNAME like '张%'/*求姓名中包含’丽’的学生信息*/select *from studentwhere SNAME like '%丽%'/*求姓名只有两个字,且第二个字为’丽’的学生信息*/select *from studentwhere SNAME like '_丽'/*求信息学院计算机专业的学生名单*/select *from studentwhere SUBSTRING(SNO,4,2)='10' --SUBSTRING函数用于切割字符串--第一个参数是被检测的属性(需要是字符串类型),第二个参数是起始位置,第三个参数是从起始位置到目标位置的字符数/*统计各个学院的人数*/select DNO as 学院编号,COUNT(SNO) as 学院人数from studentgroup by DNO --使用group by来对属性分组,属性中相同的元素放在一组,聚集函数(Aggregate functions)根据分组进行分组计算/*按授课班号统计选修该课程的人数,并按照人数升序排列。*/select CNO,COUNT(SNO) as 选修人数from scgroup by CNOorder by COUNT(SNO) asc/*统计平均成绩超过 80 分的学生的学号及平均成绩*/select SNO,AVG(GRADE)from scgroup by SNOhaving AVG(GRADE)>= 80 --使用having来限制group by之后的数据order by AVG(GRADE) desc/*求选修课程超过 6 门课的学生学号,并按选修课程数目升序排列。*/select SNO,COUNT(CNO)from scgroup by SNOhaving COUNT(CNO)>6order by COUNT(CNO) asc/*求每个学院学生的平均年龄,并把结果存入当前数据库‘系平均年龄’临时表中。*/select DNO,AVG(AGE) as 平均 INTO 系平均年龄 --使用INTO语句将select出来的属性作为新表存入from studentgroup by DNO /*分页浏览数据方法:*//*(1)查询student表中第1-10名同学的信息*/select top 10 *from student/*(2)查询student表中第11-20名同学的信息*/select top 10 *from studentwhere SNO not in (select top 10 SNO from student)/*查询‘1987-1-1’号以后出生的女生的学生信息*/select *from studentwhere BIRTHDAY>'1987-1-1' and SEX='女'go/*创建'计算机系学生'视图,用于浏览计算机系学生的学号、姓名和年龄*/create view 计算机系学生as select SNO,SNAME,AGE from studentwhere SUBSTRING(SNO,4,2)='10'go/*查询分数在70和90之间的学生学号*/select SNOfrom scgroup by SNOhaving MIN(GRADE)>70 and MAX(GRADE)<90/*查询少于 10 名同学选修的授课班号*/select CNOfrom scgroup by CNOhaving COUNT(SNO)<10order by CNO/*查询选课表中的最高分*/select MAX(GRADE) as 最高分from sc/*查询授课编号为‘153701’的课程的平均分*/select AVG(GRADE) as 课程平均分from scwhere CNO='153701'/*查询课程平均分超过 85 的授课班号,输出结果按课程平均分升序排列*/select CNO,AVG(GRADE)from scgroup by CNOhaving AVG(GRADE)>85order by AVG(GRADE) asc/*查询课程名称为’线性代数’的排课情况*/select *from coursewhere CNAME='线性代数'/*查询授课班号为‘218801’的学生学号*/select SNOfrom scwhere CNO='218801'order by SNO/*按授课班号查询课程的平均分,输出授课班号和平均成绩*/select CNO,AVG(GRADE)from scgroup by CNOorder by AVG(GRADE)/*在 sc 中输出成绩在 90-100 之间的学生信息*/select *from scwhere GRADE between 90 and 100--或者使用CONVERT函数将GRADE转化成字符串,然后匹配'9%'\select *from scwhere CONVERT(char(20),GRADE) like '9%'/*查询‘周芬’老师,这个学期的上课安排情况*/select *from coursewhere TNAME='周芬'/*查询姓‘周’的教师的排课情况*/select *from coursewhere TNAME like '周%'/*按教室分组统计排课门数情况*/select ROOM,COUNT(CNO) as 排课门数from coursegroup by ROOM/*查询排课门数超过 8 门的教室名单及其排课门数*/select ROOM,COUNT(CNO)from coursegroup by ROOMhaving COUNT(CNO)>8go/*创建机电学院女生的视图*/create view 机电学院女生as select SNO,SNAMEfrom student,deptwhere student.DNO=dept.DNO and SEX='女'and DNAME like '机电%'go/*查询学分超过 4 分的课程,输出课程名和学分,并要求按学分升序*/select CNAME,CREDITfrom coursewhere CREDIT>4 order by CREDIT asc/*按教室明细并汇总排课情况*/select ROOM,COUNT(CNO) as 排课情况from coursegroup by ROOMorder by 排课情况 desc/*查询课程号为“203402”的成绩最高的前 5 名学生的学号及成绩,结果按成绩降序*/select top 5 SNO,GRADEfrom scwhere CNO='203402'order by GRADE desc/*查询年龄小于 20 岁的学生学号*/select SNAMEfrom studentwhere AGE<20--或者使用BIRTHDAY计算年龄select SNAMEfrom studentwhere YEAR(GETDATE())- YEAR(BIRTHDAY)<20/*查询有 90 人以上选修的课程号*/select CNO,COUNT(SNO) as 选课人数from scgroup by CNOhaving COUNT(SNO)>90/*查询全体男生的姓名,要求查询结果按所在系升序排列,对相同系的学生按姓名升序排列*/select SNAMEfrom studentorder by DNO asc,SNAME asc/*查询成绩在 70-90 范围内的学生学号*/select SNOfrom scwhere GRADE between 70 and 90
如果觉得《【SQL Server数据库】建库 建表 简单查询语句(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!