一些SQL Server基本操作(一)

初学,第一次碰……其实是因为作业要写实验报告,所以顺便写写文章,也算留一个存档。

#实验要求具体就不描述了

实验要求

1,创建Student数据库,包括Students,Courses,SC表,表结构如下…

  #1. 先手动用SQL Server 2014 Management Studio添加新表,新列

  #2. 遇到第一个报错:

    不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项

   解决:http://www.jb51.net/article/30416.htm

   工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去掉即可。

  #2. 手打了Students表和Courses表

  #3. 嫌SC表内容太多,一个个手打太麻烦,然后直接复制了4行下去,作了个大死!开始报错:

    SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)

   参考:http://www.cnblogs.com/jhxk/articles/1614963.html

   试了好久,并没有成功【主要因为自己一开始不知道怎么搞】,然后干脆删了表(反正我就写了那么几行,删了就删了)重新建一个新的,

   然后开始批量生产,就是很普通的插入语句,大致如下:

 1 USE [Student]
 2 GO
 3
 4 INSERT INTO [dbo].[SC]
 5            ([SNO]
 6            ,[CNO]
 7            ,[GRADE])
 8      VALUES
 9            (‘0409011‘,‘EE-006‘,87);
10 GO

   妈妈再也不用担心我不能复制粘贴了。差不多第一个题勉强这么解决。

2.1.查询身高大于1.80m的男生的学号和姓名;

  #1. 直接SELECT语句

1 USE [Student]
2 GO
3
4 SELECT [SNO]
5             ,[SNAME]
6     FROM [dbo].[Students]
7     WHERE HEIGHT>1.80 AND SEX=‘男‘;
8 GO

    截图如上

2.2.查询计算机系秋季所开课程的课程号和学分数

  #1. 由于计算机系课程默认以SC开头,所以查找字段中包含某字符串的结果

   参考:http://blog.itpub.net/22392018/viewspace-772268/

1 USE [Student]
2 GO
3
4 SELECT [CNO]
5       ,[CREDIT]6     FROM [dbo].[Courses]7     WHERE PATINDEX(‘%CS%‘,CNO)>0 AND SEMESTER=‘秋‘8 GO

    截图如上

2.3查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩

  #1. 有关计算机秋的查询如上题,本次是三表联查

   参考:http://zhidao.baidu.com/question/465019816.html

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Courses].[CNO]
 5       ,[dbo].[Courses].[CREDIT]
 6       ,[dbo].[Students].[SNAME]
 7       ,[dbo].[SC].[GRADE]
 8   FROM [dbo].[SC]
 9   LEFT JOIN[dbo].[Courses]ON[dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
10   LEFT JOIN[dbo].[Students]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]
11
12   WHERE PATINDEX(‘%CS%‘,[dbo].[SC].[CNO])>0 AND SEMESTER=‘秋‘ AND [dbo].[Students].[SEX]=‘男‘
13
14 GO

    截图如上

2.4查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头)

  #1. 并没有用到新的知识,直接贴代码

USE [Student]
GO

SELECT [dbo].[Students].[SNAME]
  FROM [dbo].[Students]
  LEFT JOIN[dbo].[SC]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]

  WHERE PATINDEX(‘%CS%‘,[dbo].[SC].[CNO])>0 AND [dbo].[Students].[SEX]=‘女‘

GO

   让人忧伤的是,查询出来的是所有的记录,一直想知道怎么让它一个名字只出来一条,然而并没有找到办法。【此处未完日后待续】

   #第二天发现谜之答案之后得到解决——DISTINCT

 1 USE [Student]
 2 GO
 3
 4 SELECT DISTINCT [dbo].[Students].[SNAME]
 5   FROM [dbo].[Students]
 6   LEFT JOIN[dbo].[SC]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]
 7
 8   WHERE PATINDEX(‘%CS%‘,[dbo].[SC].[CNO])>0 AND [dbo].[Students].[SEX]=‘女‘
 9
10 GO

2.5查询每位学生已选修课程的门数和总平均成绩

  #1. 查询每位学生的已修课程COUNT(),总平均成绩AVG()

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Students].[SNO]
 5         ,AVG([dbo].[SC].[GRADE]) 平均成绩
 6         ,COUNT([dbo].[SC].[CNO]) 课程门数
 7     FROM [dbo].[SC]
 8   LEFT JOIN[dbo].[Courses]ON[dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
 9   LEFT JOIN[dbo].[Students]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]
10   GROUP BY [dbo].[Students].[SNO]

2.6查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩

  #1. 新知识为最大项MAX()和最小项MIN()

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Courses].[CNO]
 5         ,COUNT([dbo].[SC].[SNO]) 选课人数
 6         ,AVG([dbo].[SC].[GRADE]) 平均成绩
 7         ,MAX([dbo].[SC].[GRADE]) 最高成绩
 8         ,MIN([dbo].[SC].[GRADE]) 最低成绩
 9     FROM [dbo].[Courses],[dbo].[SC]
10     WHERE [dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
11     GROUP BY [dbo].[Courses].[CNO]

2.7查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列

  #1. 想法是查询最低成绩在80分以上,则所有成绩都在80分以上,想当然的使用 GROUP BY MIN([dbo].[SC].[GRADE])>=80 报错,提示使用HAVING

   参考:http://www.cnblogs.com/gaiyang/archive/2011/04/01/2002452.html

    GROUP BY 和 HAVING 讲的很多

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Students].[SNO]
 5         ,[dbo].[Students].[SNAME]
 6     FROM [dbo].[Students]
 7     LEFT JOIN [dbo].[SC] ON [dbo].[SC].[SNO]=[dbo].[Students].[SNO]
 8     GROUP BY [dbo].[Students].[SNO],[dbo].[Students].[SNAME]
 9     HAVING MIN([dbo].[SC].[GRADE])>=80
10     ORDER BY [dbo].[Students].[SNO]

  结果只有一个人(其实一个人都没有,后来改了数据orz)

2.8查询缺成绩的学生的姓名,缺成绩的课程号及其学分数

  #1.新知识IS NULL 为空

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Students].[SNAME]
 5         ,[dbo].[Courses].[CNO]
 6         ,[dbo].[Courses].[CREDIT]
 7     FROM [dbo].[SC]
 8     LEFT JOIN[dbo].[Courses]ON[dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
 9     LEFT JOIN[dbo].[Students]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]
10     WHERE [dbo].[SC].[GRADE] IS NULL

  搜不到,然后任性的加了一个试验品hhhh

2.9查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名;

  #1. 世界上最狗血的事情就是,当我想好好写数据库作业的时候,一百度发现了全套答案

  发张图表达一下这操蛋的心情,我不抄我不抄,我就看一眼

  链接:http://3y.uu456.com/bp_1jk0h81auc7zlrk1b2th_1.html

  看了一下前面题的答案,还是不错的,至少解决了之前未完待续的问题棒棒哒!不过我前题做法比答案复杂不止一点点呢……

    WHERE STUDENTS.SNO=SC.SNO 就能代替我所有的 LEFT JOIN (话说我之前是哪里百度出LEFT JOIN的写法)

  参考了答案之后撸出这道题,然后发现其实这个题很简单orz

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Students].[SNAME]
 5
 6     FROM [dbo].[SC],[dbo].[Courses],[dbo].[Students]
 7     WHERE [dbo].[SC].[SNO]=[dbo].[Students].[SNO]
 8             AND [dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
 9             AND [dbo].[Courses].[CREDIT]>=3
10             AND [dbo].[SC].[GRADE]<70
11 /*上面是答案的方法,下面是按我之前风格写的,
12   区别在于另外两个表联法不同*/13 USE [Student] 14 GO 15 16 SELECT [dbo].[Students].[SNAME] 17   FROM [dbo].[SC] 18   LEFT JOIN[dbo].[Courses]ON[dbo].[SC].[CNO]=[dbo].[Courses].[CNO] 19   LEFT JOIN[dbo].[Students]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO] 20   WHERE [dbo].[Courses].[CREDIT]>=3 AND [dbo].[SC].[GRADE]<70

2.10查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数

  #1. 挺简单的BETWEEN AND

 1 USE [Student]
 2 GO
 3
 4 SELECT [dbo].[Students].[SNAME]
 5         ,COUNT([dbo].[Courses].[CREDIT]) 已修学分
 6         ,AVG([dbo].[SC].[GRADE]) 平均成绩
 7     FROM [dbo].[SC]
 8     LEFT JOIN[dbo].[Courses]ON[dbo].[SC].[CNO]=[dbo].[Courses].[CNO]
 9     LEFT JOIN[dbo].[Students]ON[dbo].[SC].[SNO]=[dbo].[Students].[SNO]
10     WHERE [dbo].[Students].[BDATE] BETWEEN ‘1984-01-01‘ AND ‘1986-12-31‘
11     GROUP BY [dbo].[Students].[SNAME]

2.11在STUDENT和SC关系中,删去SNO以’01’开关的所有记录。

  #这个不知道什么意思呢。。。看了一眼答案发现题目的开关应该是开头orz。。。= =还以为是什么很高级的东西的说

  而且答案还错了

 1 USE [Student]
 2 GO
 3
 4 DELETE FROM [dbo].[SC]
 5       WHERE [dbo].[SC].[SNO] LIKE ‘%01%‘
 6 GO
 7
 8 DELETE FROM [dbo].[Students]
 9       WHERE [dbo].[Students].[SNO] LIKE ‘%01%‘
10 GO

2.12在STUDENTS关系中增加以下记录:

  #直接INSERT跟第1题一样

 1 USE [Student]
 2 GO
 3
 4 INSERT INTO [dbo].[Students]
 5            ([SNO]
 6            ,[SNAME]
 7            ,[SEX]
 8            ,[BDATE]
 9            ,[HEIGHT]
10            ,[DEPARTMENT])
11      VALUES
12            (‘0409101‘,‘何平‘,‘女‘,‘1987-03-02‘,1.62,‘‘),
13            (‘0408130‘,‘向阳‘,‘男‘,‘1986-12-11‘,1.75,‘‘);
14 GO

2.13将课程CS-221的学分数增为3,讲课时数增为60

  #UPDATE语句

 1 USE [Student]
 2 GO
 3
 4 UPDATE [dbo].[Courses]
 5    SET [CREDIT] = 3
 6       ,[LHOUR] = 60
 7  WHERE [dbo].[Courses].[CNO]=‘CS-211‘
 8
 9
10
11 GO

/**************************************我是萌萌哒的分割线**************************************/

  第一次写日志,并不是什么特别有意义的东西QAQ

  但是,毕竟第一次就当鼓励自己了,应该除了我之外没人看吧,我就当日记写了orz

  好好加油,无论现在多么凄惨,一年之后一定能遇见不一样的自己!

时间: 2024-08-25 19:34:04

一些SQL Server基本操作(一)的相关文章

sql server 基本操作

1输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQL Server命令行如下: 启动SQL ServerNET START MSSQLSERVER 暂停SQL ServerNET PAUSE MSSQLSERVER 重新启动暂停的SQL ServerNET CONTINUE MSSQLSERVER 停止SQL ServerNET STOP MSSQLSERVER 2.创建数据库 创建数据库 -> 使用SSMS创建数据库(可视化) -> 在SQL Server中任何

08.SQL Server 基本操作【分离(脱机)、附加(联机)】

1.创建.删除(对准数据库右键)2.分离(脱机).附加(联机) 关于附加数据库失败的处理:原因:对文件的操作权限不够处理方法:对准mdf文件和ldf文件 右键 属性 安全性将 用户 Users 编辑 设置为"完全控制"

SQL Server 基本操作之三种增加法

前言: 数据库操作避免不了对数据的操作,操作方法大同小异,万变不离其宗,今就写一下各种花式操作的根本增删改查四种操作,今天我们就来说一下增加操作的三种方法 正文: 增加操作是对数据库进行数据行的添加,用于添加新的数据信息 注意事项: 1.插入数据行时要插入完整,不要只插入几列 2.每个值的数据类型.精度和小数位数必须与相应的列匹配: 3.不能为标识列指定值,因为它的数字是自动增长的: 4.插入时要符合约束 5.具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值 格式: (1)

sql server 基本操作二

基本查询 create database ZK_Test go use zk_test go create table Student ( ID int identity(1,1) primary key, Name varchar(20) not null, Sex char(2) not null, Birthday datetime, Height int ) select * from student insert into student (Name, Sex, Birthday, H

SQL Server博客目录

SQL Server博客目录 1 SQL Server数据库学习 2 GUID全局唯一标识符 3 SQL Server Profiler使用方法 4 Sql Server数据的加密与解密 5 SQL注入式攻击 6 SQL Server基本操作积累 7 Transact-SQL 语句 8 关系型数据库与非关系型数据库 9 在SQL Server 2012中新建用户 10 SQL Server基础 11 数据库表的设计 12 模糊查询&&日期时间操作 13 存储过程 14 Union-SQL

Sql Server 添加外部程序集基本操作

原文:Sql Server 添加外部程序集基本操作 简介:有时候Sql Server的内置函数没有那么好用的时候,可以引用一下外部程序集,下面献下丑,做下添加外部程序集操作 1.准备程序,编译出一个MyCLR的DLL. public class CLRClass { [Microsoft.SqlServer.Server.SqlFunction] public static int MyFun(int a, int b) //必须使用静态方法,非静态方法会报错. { return a <= b

SQL Server基础之《视图的概述和基本操作》

阅读目录 一:视图的概述 二:视图的分类 三:视图的优点和作用 四:视图的基本操作和语法 五:视图和表的区别  数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用,创建视图,查看视图,修改视图,更新和删除视图等SQL Server的数据库知识. 回到顶部 一:视图的概述  视图是从一个或者多个表导出的,它的行为与表非常相似,但视图是一个虚拟表,在视图中

【SQL server】数据库创建与基本操作

一. 创建数据库 create database test1 --数据库名称 --主数据文件 on ( name = 'Test1_data', --主数据文件名称 filename = 'F:\SQL_study\test1_data\test1.mdf', --数据库存放位置,注意后缀为mdf,表示主数据库文件 size = 5MB, --初始空间大小 maxsize = 50MB, --最大值 filegrowth = 10% --增长比例/大小 ) --日志文件 log on ( nam

SQL Server 2005的备份、还原及分离、附加基本操作

1.备份 连接好数据库引擎后,我本地有2个实例,分别是sqlserver.sqltest,如图(1-1). (图1-1) 以备份sqlserver为例,右击->任务->备份,如图(1-2). (图1-2) 出现如图(1-3)界面: [源]-数据库,默认为图(1-2)中选中的数据库实例. [目标]默认备份文件名为"数据库实例名.bak". (图1-3) 可以通过添加功能修改备份文件名,点击"添加",出现如图(1-4)界面. (图1-4) 点击选择目录操作后