技术标签: sqlserver Database 数据库 sql
配套资料,免费下载
链接:https://pan.baidu.com/s/1Ffpvm45VRcuqQ1W2cqDN2A
提取码:xyqf
复制这段内容后打开百度网盘手机App,操作更方便哦
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的小型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNⅨ操作系统上的应用。
操作系统:Windows 10 专业版 64位(版本号,19041.508)
安装版本:sql server 2008 r2 enterprise
迅雷下载:
ed2k://|file|cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso|4662884352|1DB025218B01B48C6B76D6D88630F541|/
右键解压:
打开“开始菜单”,找到"SQL Server Management Studio",点击启动。
注意:Navicat Premium配套资料有,全部默认下一步安装即可,如何激活也有说明。
虽然我们提供了两种连接数据库的方式,但是我们这里推荐并采用第一种连接方式。
在”数据库“项,右键”新建数据库“,然后在弹出窗口中输入数据库名称”TEST0“,然后点击确定即可。
使用命令行的方式创建一个名字为”TEST1“的数据库,同时需要明确指定TEST1的数据文件和日志文件所存储的路径和大小等信息。
CREATE DATABASE TEST1
ON
(
NAME='TEST1_DATA',
FILENAME='C:\Users\TEST1_DATA.MDF',
SIZE=5MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=10%
)
LOG ON
(
NAME='TEST1_LOG',
FILENAME='C:\Users\TEST1_LOG.LDF',
SIZE=5MB,
MAXSIZE=50MB,
FILEGROWTH=1MB
)
GO
在”TEST0“数据库右键找到”属性“项,在弹出窗口中选择”文件“项,就可以对数据库进行修改。
使用“ALTER DATABASE”命令对数据库可进行以下修改:
语法格式:
ALTER DATABASE database_name
{ ADD FILE <filespec>[,…n][ TO FILEGROUP filegroup_name ] /*在文件组中增加数据文件*/
| ADD LOG FILE <filespec>[,…n] /*增加日志文件*/
| REMOVE FILE logical_file_name /*删除数据文件*/
| ADD FILEGROUP filegroup_name /*增加文件组*/
| REMOVE FILEGROUP filegroup_name /*删除文件组*/
| MODIFY FILE <filespec> /*更改文件属性*/
| MODIFY NAME = new_dbname /*数据库更名*/
| MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }
| SET <optionspec> [ ,...n ] [ WITH <termination> ] /*设置数据库属性*/
| COLLATE < collation_name > /*指定数据库排序规则*/
}
GO
演示前提:
假设已经创建了数据库TEST1,它只有一个主数据文件,其逻辑文件名为TEST1_DATA,大小为5MB,最大为50MB,增长方式为按10%增长。
案例演示1:
修改数据库TEST1现有数据文件的属性,将主数据文件的最大大小改为100MB,增长方式改为按每次5MB增长。
ALTER DATABASE TEST1
MODIFY FILE
(
NAME = TEST1_DATA, --这里是逻辑名
MAXSIZE = 100MB, --将主数据文件的最大大小改为100MB
FILEGROWTH = 5MB --将主数据文件的增长方式改为按5MB增长
)
GO
案例演示2:
为数据库TEST1添加文件组FGROUP,并为此文件组添加两个大小均为10MB的数据文件。
ALTER DATABASE TEST1
ADD FILEGROUP FGROUP --新增文件组的名字
GO
ALTER DATABASE TEST1
ADD FILE
(
NAME = 'TEST1_DATA2',
FILENAME = 'C:\Users\TEST1_DATA2.ndf',
SIZE = 10MB,
MAXSIZE = 30MB,
FILEGROWTH = 5MB
),
(
NAME = 'TEST1_DATA3',
FILENAME = 'C:\Users\TEST1_DATA3.ndf',
SIZE = 10MB,
MAXSIZE = 30MB,
FILEGROWTH = 5MB
)
TO FILEGROUP FGROUP --添加到指定文件组
GO
案例演示3:
从数据库中删除文件组,将案例2中添加到TEST1数据库中的文件组FGROUP删除。
--先删除文件组中的文件
ALTER DATABASE TEST1
REMOVE FILE TEST1_DATA2
GO
ALTER DATABASE TEST1
REMOVE FILE TEST1_DATA3
GO
--再删除文件组
ALTER DATABASE TEST1
REMOVE FILEGROUP FGROUP
GO
案例演示4:
为数据库TEST1添加一个日志文件。
ALTER DATABASE TEST1
ADD LOG FILE
(
NAME = 'TEST1_LOG2',
FILENAME = 'C:\Users\TEST1_LOG2.ldf',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB
)
GO
案例演示5:
从数据库TEST1中删除一个日志文件,将日志文件TEST1_LOG2删除。
ALTER DATABASE TEST1
REMOVE FILE TEST1_LOG2
GO
案例演示6:
将数据库TEST1的名改为JUST_TEST,进行此操作时必须保证该数据库不被其他任何用户使用。
ALTER DATABASE TEST1
MODIFY NAME = JUST_TEST
GO
在要删除数据库上右键选择“删除”,在弹出窗口中选择确定即可删除当前数据库
删除数据库使用“DROP DATABASE”命令。
语法格式:
DROP DATABASE database_name[,…n][;]
GO
案例演示:
删除JUST_TEST数据库。
DROP DATABASE JUST_TEST
GO
整数包括bigint、int、smallint和tinyint,从标识符的含义就可以看出,它们所表示的数范围逐渐缩小。
精确数值型包括decimal和numeric,他们可存储从-1038+1到1038-1的数字数据。
它们的存储长度随精度(位数)变化而变化,最少为5字节,最多为17字节:
例如,若有声明numeric(8,3),则存储该类型数据需5字节;而若有声明numeric(22,5),则存储该类型数据需13字节。
浮点型包括real和float[(n)] 。两者通常都使用科学计数法表示数据,即形为:尾数E阶数,如5.6432E20、-2.98E10、1.287659E-9等。
当n在1~24之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字。当n在25~53之间时,存储长度为8字节,精度为15位有效数字。当缺省n时,代表n在25~53之间。
专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值。
位型只存储0和1,长度为一个字节。但要注意,SQL Server对表中bit类型列的存储做了优化:如果一个表中有不多于8个的bit列,这些列将作为一个字节存储;如果表中有9到16个bit列,这些列将作为两个字节存储;更多列的情况依次类推。
字符串值TRUE和FALSE可以转换为以下bit 值:TRUE转换为1,FALSE转换为0。
字符型用于存储字符串,在输入字符串时,需将串中的符号用单引号括起来,如‘abc’。
字符型包括两类:char是固定长度的数据类型,varchar是可变长度的数据类型,二者均使用ASCII字符集。
Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理,包括nchar[(n)]和nvarchar[(n)] 。
Unicode字符型包括两类:nchar是固定长度的数据类型,nvarchar是可变长度的数据类型,二者均使用UNICODE UCS-2字符集。
实际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。
文本型包括text和ntext两类,分别对应ASCII字符和Unicode字符。
二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。
日期时间类型包括datetime和smalldatetime两类。
datetime:可表示的日期范围从1753 年1月1日到9999年12月31日的日期和时间数据。
日期部分常用的表示格式如下:
时间部分常用的表示格式如下:
smalldatetime:可表示从1900年1月1日到2079年6月6日的日期和时间,数据精确到分钟。
每当对该表加入新行或修改已有行时,都由系统自动修改该列的值,将原来的时间戳值加上一个增量,最后增加或修改的列该值最大。
timestamp 列可反映系统对该记录修改的相对顺序。一个表只能有一个timestamp 列。timestamp类型数据的长度为8字节。
图像型是image,它用于存储图片、照片等。实际存储的是可变长度二进制数据,介于0与231-1(2147483647)字节之间。
在SQL Server 2005中该类型是为了向下兼容而保留的数据类型,微软推荐用户使用varbinary(MAX)数据类型来替代image类型。
首先先创建一个数据库,名字叫”学生信息数据库“,以下操作均在该数据库中进行。
XSB(学生表)的表结构:
列 名 | 数 据 类 型 | 长度 | 可空 | 默认值 | 说 明 |
---|---|---|---|---|---|
学号 | 定长字符型(char) | 6 | × | 无 | 主键,2位年级,2位班号,2位序号 |
姓名 | 定长字符型(char) | 8 | × | 无 | |
性别 | 位型(bit) | 1 | √ | 1 | 1:男;0:女 |
出生时间 | 日期型(datetime) | 系统默认 | √ | 无 | |
专业 | 定长字符型(char) | 12 | √ | 无 | |
总学分 | 整数型(int) | 4 | √ | 0 | 0≤总学分<160 |
备注 | 变长字符型(varchar) | 500 | √ | 无 |
CREATE TABLE XSB (
学号 char(6) NOT NULL ,
姓名 char(8) NOT NULL ,
性别 bit NULL DEFAULT (1) ,
出生时间 datetime NULL ,
专业 char(12) NULL ,
总学分 int NULL DEFAULT (0) CHECK (总学分>=0 AND 总学分<160) ,
备注 varchar(500) NULL ,
PRIMARY KEY (学号)
)
GO
KCB(课程表)的表结构:
列 名 | 数 据 类 型 | 长 度 | 可 空 | 默 认 值 | 说 明 |
---|---|---|---|---|---|
课程号 | 定长字符型(char) | 3 | × | 无 | 主键 |
课程名 | 定长字符型(char) | 16 | × | 无 | |
开课学期 | 整数型(tinyint) | 1 | √ | 1 | 只能为1~8 |
学时 | 整数型(tinyint) | 1 | √ | 0 | |
学分 | 整数型(tinyint) | 1 | × | 0 |
CREATE TABLE KCB (
课程号 char(3) NOT NULL ,
课程名 char(16) NULL ,
开课学期 tinyint NULL DEFAULT (1) CHECK (开课学期>=1 AND 开课学期<=8) ,
学时 tinyint NULL DEFAULT (0) ,
学分 tinyint NULL DEFAULT (0) ,
PRIMARY KEY (课程号)
)
GO
CJB(成绩表)的表结构:
列 名 | 数 据 类 型 | 长 度 | 可 空 | 默 认 值 | 说 明 |
---|---|---|---|---|---|
学号 | 定长字符型(char) | 6 | × | 无 | 主键 |
课程号 | 定长字符型(char) | 3 | × | 无 | 主键 |
成绩 | 整数型(int) | 默认值 | √ | 0 |
CREATE TABLE CJB (
学号 char(6) NOT NULL ,
课程号 char(3) NOT NULL ,
成绩 int NULL DEFAULT (0) ,
PRIMARY KEY (学号, 课程号)
)
GO
添加一列:在XSB表中增加1个新列—奖学金等级,类型为tinyint,允许为null
alter table XSB
add 奖学金等级 tinyint NULL
GO
修改一列:修改XSB表中奖学金等级列的类型,类型为int,不允许为null
alter table XSB
alter column 奖学金等级 int NOT NULL
GO
删除一列:删除XSB表中奖学金等级这一个列
alter table XSB
drop column 奖学金等级
GO
删除XSB表:
drop table XSB
GO
删除KSB表:
drop table KCB
GO
删除CJB表:
drop table CJB
GO
首先先创建一个数据表,名字叫”XSB“,以下操作均在该数据表中进行。
语法格式:
insert into 表名(字段名,...) values(值,...);
需求描述:插入一条你自己的信息
insert into XSB(学号,姓名,性别,出生时间,专业) values('180135','曹晨磊',1,'1997-12-05','计算机网络');
语法格式:
update 表名 set 列 = 值,... where 查询条件;
需求描述:修改你自己的信息的专业为”计算机软件“。
update XSB set 专业='计算机软件' where 学号 = '180135';
语法格式:
delete from 表名 【where 筛选条件】;
需求描述:根据学号删除你自己的信息。
delete from XSB where 学号 = '180135';
首先先创建一个数据库,名字叫”学生信息数据库“,以下操作均在该数据库中进行,如果存在该数据库,请直接导入以下数据。
本章节需要导入测试数据:
IF OBJECT_ID ('dbo.XSB') IS NOT NULL
DROP TABLE dbo.XSB;
GO
CREATE TABLE XSB (
学号 char(6) NOT NULL ,
姓名 char(8) NOT NULL ,
性别 bit NULL DEFAULT (1) ,
出生时间 datetime NULL ,
专业 char(12) NULL ,
总学分 int NULL DEFAULT (0) CHECK (总学分>=0 AND 总学分<160) ,
备注 varchar(500) NULL ,
PRIMARY KEY (学号)
)
GO
IF OBJECT_ID ('dbo.KCB') IS NOT NULL
DROP TABLE dbo.KCB;
GO
CREATE TABLE KCB (
课程号 char(3) NOT NULL ,
课程名 char(16) NOT NULL ,
开课学期 tinyint NULL DEFAULT (1) CHECK (开课学期>=1 AND 开课学期<=8) ,
学时 tinyint NULL DEFAULT (0) ,
学分 tinyint NULL DEFAULT (0) ,
PRIMARY KEY (课程号)
)
GO
IF OBJECT_ID ('dbo.CJB') IS NOT NULL
DROP TABLE dbo.CJB;
GO
CREATE TABLE CJB (
学号 char(6) NOT NULL ,
课程号 char(3) NOT NULL ,
成绩 int NULL DEFAULT (0) ,
PRIMARY KEY (学号, 课程号)
)
GO
insert XSB values('081101','王林',1,'1990-2-10','计算机',50,null);
insert XSB values('081102','程明' ,1,'1991-2-1' ,'计算机',50,null);
insert XSB values('081103','王燕' ,0,'1989-10-6' ,'计算机',50,null);
insert XSB values('081104','韦严平',1,'1990-8-26' ,'计算机',50,null);
insert XSB values('081106','李方方',1,'1990-11-20','计算机',50,null);
insert XSB values('081107','李明' ,1,'1990-5-1' ,'计算机',54,null);
insert XSB values('081108','林一帆',1,'1989-8-5' ,'计算机',52,'提前休完,获得学分');
insert XSB values('081109','张强民',1,'1989-8-11' ,'计算机',50,'提前休完,获得学分');
insert XSB values('081110','张蔚' ,0,'1991-7-22' ,'计算机',50,null);
insert XSB values('081111','赵琳' ,0,'1990-3-18' ,'计算机',50,null);
insert XSB values('081113','严红' ,0,'1989-8-11' ,'计算机',48,null);
insert XSB values('081201','王敏' ,1,'1989-6-10' ,'通信工程',42,null);
insert XSB values('081202','王林' ,1,'1989-1-29' ,'通信工程',40,null);
insert XSB values('081203','王玉民',1,'1990-3-26' ,'通信工程',42,null);
insert XSB values('081204','马琳琳',0,'1989-2-10' ,'通信工程',42,null);
insert XSB values('081206','李计' ,1,'1989-9-20' ,'通信工程',42,'提前休完,获得学分');
insert XSB values('081210','李红庆',1,'1989-5-1' ,'通信工程',44,'提前休完,获得学分');
insert XSB values('081216','孙祥欣',1,'1989-3-19' ,'通信工程',42,null);
insert XSB values('081218','孙研' ,1,'1990-10-9' ,'通信工程',42,null);
insert XSB values('081220','吴薇华',0,'1990-3-18' ,'通信工程',42,null);
insert XSB values('081221','刘燕敏',0,'1989-11-12','通信工程',42,null);
insert XSB values('081241','罗林琳',0,'1990-1-30' ,'通信工程',50,null);
insert KCB values('101','计算机基础',1,80,5);
insert KCB values('102','程序设计与语言',2,68,4);
insert KCB values('206','离散数学',4,68,4);
insert KCB values('208','数据结构',5,68,4);
insert KCB values('210','计算机原理',5,85,5);
insert KCB values('209','操作系统',6,68,4);
insert KCB values('212','数据库原理',7,68,4);
insert KCB values('301','计算机网络',7,51,3);
insert KCB values('302','软件工程',7,51,3);
insert CJB values('081101','101',80);
insert CJB values('081101','102',78);
insert CJB values('081101','206',76);
insert CJB values('081103','101',62);
insert CJB values('081103','102',70);
insert CJB values('081103','206',81);
insert CJB values('081104','101',90);
insert CJB values('081104','102',84);
insert CJB values('081104','206',65);
insert CJB values('081102','102',78);
insert CJB values('081102','206',78);
insert CJB values('081106','101',65);
insert CJB values('081106','102',71);
insert CJB values('081106','206',80);
insert CJB values('081107','101',78);
insert CJB values('081107','102',80);
insert CJB values('081107','206',68);
insert CJB values('081108','101',85);
insert CJB values('081108','102',64);
insert CJB values('081108','206',87);
insert CJB values('081109','101',66);
insert CJB values('081109','102',83);
insert CJB values('081109','206',70);
insert CJB values('081110','101',95);
insert CJB values('081110','102',90);
insert CJB values('081110','206',89);
insert CJB values('081111','101',91);
insert CJB values('081111','102',70);
insert CJB values('081111','206',76);
insert CJB values('081113','101',63);
insert CJB values('081113','102',79);
insert CJB values('081113','206',60);
insert CJB values('081201','101',80);
insert CJB values('081202','101',65);
insert CJB values('081203','101',87);
insert CJB values('081204','101',91);
insert CJB values('081210','101',76);
insert CJB values('081216','101',81);
insert CJB values('081218','101',70);
insert CJB values('081220','101',82);
insert CJB values('081221','101',76);
insert CJB values('081241','101',90);
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】;
案例演示1:查询学生表所有学生信息
select * from XSB;
案例演示2:查询学生表所有学生的学号和姓名
select 学号,姓名 from XSB;
语法格式:
【格式一】:
select 字段名 as 别名 from 【表名/查询结果集】;
【格式二】:
select 字段名 别名 from 【表名/查询结果集】;
【格式三】:
select 别名=字段名 from 【表名/查询结果集】;
案例演示1:查询学生表所有学生的学号和姓名,要求姓名列显示为学生姓名
select 学号,姓名 as 学生姓名 from XSB;
案例演示2:查询学生表所有学生的学号和姓名,要求姓名列显示为学生姓名
select 学号,姓名 学生姓名 from XSB;
案例演示3:查询学生表所有学生的学号和姓名,要求姓名列显示为学生姓名
select 学号,学生姓名=姓名 from XSB;
语法格式:
select distinct 字段名 from 【表名/查询结果集】;
案例演示1:查询XSB表中所有学生的专业,要求去重
select distinct 专业 from XSB;
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】
where 查询条件;
常见运算符:
案例演示1;查询学号为“081103”的学生的信息
select * from XSB where 学号 = '081103';
案例演示2:查询以“王”开头的学生的信息
select * from XSB where 姓名 like '王%';
案例演示3:查询姓名的第三个字母是“民”的学生信息
select * from XSB where 姓名 like '__民';
案例演示4;查询姓名的第三个字母是“民”或者“琳”的学生信息
select * from XSB where 姓名 like '__民' or 姓名 like '__琳';
案例演示5:查询学生总学分小于45分的学生信息
select * from XSB where 总学分 < 45;
案例演示6:查询学生总学分小于45分并且大于42分的学生信息
select * from XSB where 总学分 > 42 and 总学分 < 45;
案例演示7:查询计算机专业学生总学分小于50分的学生信息
select * from XSB where 专业 = '计算机' and 总学分 < 50;
案例演示8:查询“出生时间”在“1989-06-01”到“1990-01-01”之间的学生信息
select * from XSB where 出生时间 between '1989-06-01' and '1990-01-01';
案例演示9:查询所有备注信息不为空的学生信息
select * from XSB where 备注 is not null;
案例演示10:查询所有备注信息为空的学生信息
select * from XSB where 备注 is null;
案例演示11:查询学号为“081101”、“081102”、“081103”这三位同学的信息,要求使用in
select * from XSB where 学号 in ('081101','081102','081103');
案例演示12:查询学号不为“081101”、“081102”、“081103”这三位同学的信息,要求使用in
select * from XSB where 学号 not in ('081101','081102','081103');
案例演示13:查询CJB表信息并使用CASE表达式对成绩按以下规则进行替换:若成绩大于等于90分,则替换为“优秀”;若成绩低于90分且大于等于70分,则替换为“良好”;若成绩低于70分且大于等于60分,则替换为“及格”;若成绩低于60分,则替换为“不及格”。列标题更改为“成绩等级”。
select 学号,成绩等级=
case
when 成绩 >= 90 then '优秀'
when 成绩 >= 70 then '良好'
when 成绩 >= 60 then '及格'
else '不及格'
end
from CJB;
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】
【where 查询条件】
group by 分组条件;
案例演示1:按照学生专业对学生进行分组,查询分组后每个专业的名称
select 专业 from XSB group by 专业;
案例演示2:按照学生专业对学生进行分组,查询分组后每个专业的名称以及所对应的学生人数
select 专业,COUNT(*) as 学生人数 from XSB group by 专业;
案例演示3:按照课程号对课程进行分组,查询当前课程下所对应的学生人数
select 课程号,COUNT(*) from CJB group by 课程号;
案例演示4:按照课程号对课程进行分组,查询当前课程下所对应的最高成绩
select 课程号,MAX(成绩) from CJB group by 课程号;
案例演示5:按照课程号对课程进行分组,查询当前课程下所对应的最低成绩
select 课程号,MIN(成绩) from CJB group by 课程号;
案例演示6:按照课程号对课程进行分组,查询当前课程下所对应的平均成绩
select 课程号,AVG(成绩) from CJB group by 课程号;
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】
【where 查询条件】
group by 分组条件
having 过滤条件;
案例演示1:按照课程号对课程进行分组,查询当前课程下所对应的平均成绩大于75分的课程号信息
select 课程号,AVG(成绩) from CJB group by 课程号 having AVG(成绩) > 75;
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】
【where 查询条件】
【group by 分组条件】
【having 过滤条件】
order by 排序字段 asc|desc;
案例演示1:对课程号为“101”的课程所对应的学生成绩进行降序排序
select * from CJB where 课程号 = '101' order by 成绩 desc;
语法格式:
select t1.*,t2.*,... from 表1 t1, 表2 t2, ...
where 连接条件
【and 查询条件】
【group by 分组条件】
【having 过滤条件】
【order by 排序字段 asc|desc】;
案例演示1:查询每一位学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩
select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
where x.学号 = c.学号 and c.课程号 = k.课程号;
案例演示2:查询学号为“081101”学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩
select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
where x.学号 = c.学号 and c.课程号 = k.课程号
and x.学号 = '081101';
案例演示3:查询学号为“081101”学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩,并且对成绩进行升序排序
select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
where x.学号 = c.学号 and c.课程号 = k.课程号
and x.学号 = '081101'
order by c.成绩 asc;
语法格式:
select 【*/字段名,...】 from 【表名/查询结果集】
where 查询条件包含select子句
案例演示1:查找选修了离散数学的学生学号
select 学号 from CJB
where 课程号 = (select 课程号 from KCB where 课程名 = '离散数学');
案例演示2:查找比所有计算机系的学生年龄都小的学生
select * from XSB
where 出生时间 > (select MAX(出生时间) from XSB where 专业 = '计算机');
案例演示3:查找课程号206的成绩不低于课程号101的最低成绩的学生的学号
select 学号 from CJB
where 课程号 = '206' and 成绩 !< (select MIN(成绩) from CJB where 课程号 = '101');
案例演示4:查找选修206号课程的学生姓名
select 姓名 from XSB
where 学号 in (select 学号 from CJB where 课程号 = '206');
语法格式:
select top 获取前几条 【*/字段名,...】 from 【表名/查询结果集】
【where 查询条件】
【group by 分组条件】
【having 过滤条件】
【order by 排序字段 asc|desc】;
案例演示1:查询XSB表中前10条记录,输出所有列
select top 10 * from XSB;
案例演示2:查询XSB表中第11-20条记录,输出所有列
select top 10 * from XSB
where 学号 not in (select top 10 学号 from XSB);
索引是帮助SQL Server高效获取数据的一种有序的数据结。它有以下两种分类:
创建索引:
create 【unique】 index 索引名称 on 表名(要创建索引的字段1,要创建索引的字段2,...);
重建索引:
alter index 索引名称 on 表名 rebuild;
删除索引:
drop index 表名.索引名称;
创建索引:为KCB表的课程名列创建索引。
create index I_KCM on KCB(课程名);
重建索引:
alter index I_KCM on KCB rebuild;
删除索引:
drop index KCB.I_KCM;
视图是一个虚拟表,其内容由查询定义。但视图并不存储数据,视图数据来自由定义视图的查询所引用的表。
使用视图有下列优点:
创建视图:
create view 视图名称 as 查询语句;
调用视图:
select * from 视图名称;
删除视图:
drop view 视图名称;
修改视图:
先删除、在创建
创建视图:创建视图V_CJ,包括学生的学号、姓名、选修的课程名及成绩
create view V_CJ AS
select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
where x.学号 = c.学号 and c.课程号 = k.课程号;
调用视图:
select * from V_CJ;
删除视图:
drop view V_CJ;
SQL语言的全名是结构化查询语言(Structured Query Language),1986年10月,美国ANSI对 SQL进行规范后,以此作为关系数据库管理系统的标准语言。不同的数据库管理系统对SQL规范做了某些编改和扩充。例如,微软公司的SQL Server支持的是T-SQL,而甲骨文公司的Oracle数据库所使用的SQL语言则是PL-SQL。T-SQL是SQL语言的一种版本,只能用于微软SQL Server以及Sybase Adaptive Server系列数据库。T-SQL除了提供标准的SQL命令之外,还提供了变量说明、流程控制、功能函数等。在SQL Server数据库中,T-SQL语言由DQL、DCL、DDL、 DML 及流控制语句组成。
按类型分为:字符串常量、整型常量、实型常量、日期时间常量、货币常量、唯一标识常量等。
SQL Server中变量可分为两类:全局变量,局部变量。
局部变量的定义:
declare { @变量名 数据类型 }[,...n]
局部变量的赋值:
set语法格式:一个set语句只能给一个变量赋值
set @变量名=表达式
select语法格式:一个select语句可以给多个变量赋值
select { @变量名=表达式 }[,...n]
局部变量的演示1:创建局部变量@var1、@var2并赋值,然后输出变量的值。
declare @var1 varchar(10) ,@var2 varchar(30);
set @var1='中国';
set @var2=@var1+'是一个伟大的国家';
select @var1, @var2;
declare @var1 varchar(10) ,@var2 varchar(30);
select @var1='中国',@var2=@var1+'是一个伟大的国家';
select @var1, @var2;
局部变量的演示2:局部变量用于查询条件中。
declare @sex bit;
set @sex=0;
select 学号,姓名 from XSB where 性别=@sex;
declare @sex bit;
select @sex=0;
select 学号,姓名 from XSB where 性别=@sex;
局部变量的演示3:使用查询给局部变量赋值。
declare @student char(8);
set @student=(select 姓名 from XSB where 学号= '081102');
select @student;
declare @student char(8);
select @student=姓名 from XSB where 学号= '081102';
select @student;
数据类型包括 系统数据类型 和 用户自定义数据类型
算术运算符 :+(加)、-(减)、*(乘)、/(除)、%(求模)。
位运算符 :执行位操作,两个表达式的类型可为整型或与整型兼容的数据类型(例如字符型等,但不能为image类型)。
比较运算符 :比较运算符又称关系运算符,其运算结果为逻辑值,可以为三种之一:TRUE、FALSE 及 UNKNOWN。
逻辑运算符 :逻辑运算符在SELECT语句的WHERE子句部分讲过,在此了解即可。
字符串联接运算符 :通过运算符“+”实现两个字符串的联接运算。
select (学号+ ',' + 姓名) as 学号及姓名 from XSB where 学号= '081102';
一元运算符 :+(正)、-(负)和~(按位取反)。
赋值运算符 :指SET和SELECT语句中使用的“=”。
表达式就是常量、变量、列名、运算符和函数的组合,一个表达式通常可以得到一个值。
流程控制语句可以改变计算机的执行顺序。
SQL Server流程控制语句如下图:
语法格式:BEGIN…END可以嵌套使用。
begin
...
end
案例演示:查询XSB和KCB的信息。
begin
select * from XSB;
select * from KCB;
end
语法格式:用于条件判断。
if 条件表达式
一条SQL语句或者语句块
[else
一条SQL语句或者语句块]
案例演示:如果1=1,则查询学生表,否则查询KCB。
if 1=1
select * from XSB;
else
select * from KCB;
语法格式:用于分支选择。
#格式一:
case 表达式
when 表达式值 then 结果表达式1
[ ...n ]
[ else 结果表达式n+1 ]
end
#格式二:
case
when 布尔表达式 then 结果表达式1
[ ...n ]
[ else 结果表达式n+1 ]
end
案例演示:判断变量的数值来选择输出“男”还是“女”。
#格式一:
declare @性别 bit =1;
select 性别=
case @性别
when 1 then '男'
when 0 then '女'
end;
#格式二:
declare @性别 bit =0;
select 性别=
case
when @性别=1 then '男'
when @性别=0 then '女'
end;
语法格式:label是指向的语句标号,标号必须符合标识符规则。
goto 标签名;
案例演示:跳过查询XSB直接查询KCB。
goto KCBYJ;
select * from XSB;
KCBYJ: select * from KCB;
语法格式:用于重复执行某个程序段。
while 条件表达式
一条SQL语句或者语句块
案例演示:将学号为"081102"的学生的总学分使用循环修改到大于等于60,每次只加2并判断循环了多少次。
declare @num int =0;
while (select 总学分 from XSB where 学号 = '081102')<60
begin
update XSB set 总学分=总学分+2 where 学号= '081102'
set @num=@num+1
end;
select @num as 循环次数;
语法格式:一般用在循环语句中,用于结束本次循环,重新转到下一次循环条件的判断。
continue;
语法格式:一般用在循环语句中,用于退出本层循环。当程序中有多层循环嵌套时,使用break语句只能退出其所在的这一层循环。
break;
语法格式:用于返回使用,可以返回一个表达式的值。
return [表达式];
abs():求绝对值函数
select ABS(-1);
pi():获取pi的值。
select PI();
floor():向下取整。
select FLOOR(3.14);
ceiling():向上取整。
select CEILING(3.14);
round():按小数位数规定的精度四舍五入。
select ROUND(3.1415,2);
rand():产生一个随机数,产生范围是0-1之间的一个小数。
select RAND();
sqrt():开平方根。
select sqrt(4);
lower():将字符串全部转为小写。
select LOWER('Hello World');
upper():将字符串全部转为大写。
select UPPER('Hello World');
str():把数值型数据转换为字符型数据。
select STR(100);
char():将ASCII码转换为字符。输入0 ~ 255之间的ASCII 码值,否则返回NULL 。
select CHAR(97);
ascii():返回字符表达式最左端字符的ASCII码值。
select ASCII('a');
ltrim():去掉字符串左部空格。
select LTRIM(' Hello ');
rtrim():去掉字符串右部空格。
select RTRIM(' Hello ');
left():返回字符串左起的第n个字符。
select LEFT('helloworld',3);
right():返回字符串右起的第n个字符。
select RIGHT('helloworld',3);
substring():返回从字符串左边第i个字符起的n个字符的部分。
select SUBSTRING('helloworld',2,3);
常用的类型转换有:日期型→字符型、字符型→日期型、数值型→字符型、字符型→数值型等。
CAST (表达式 AS 新类型)
CONVERT (新类型 ,表达式)
日期型→字符型:
select CAST('1997-12-05' as varchar(30));
select CONVERT(varchar(30),'1997-12-05');
字符型→日期型:
select CAST('1997-12-05' as datetime);
select CONVERT(datetime,'1997-12-05');
数值型→字符型:
select CAST(1997 as varchar(30));
select CONVERT(varchar(30),1997);
字符型→数值型:
select CAST('1997' as int);
select CONVERT(int,'1997');
getdate():返回当前系统日期和时间,返回值类型为datetime。
select GETDATE();
year():返回指定日期的年部分,返回值为整数。
select YEAR(GETDATE());
month():返回指定日期的月部分,返回值为整数。
select MONTH(GETDATE());
day():返回指定日期的天部分,返回值为整数。
select DAY(GETDATE());
dateiff():返回两个指定日期在datepart(年、月、日)方面date2超过date1的差距值,其结果值是一个带有正负号的整数值。
select DATEDIFF(DAY,'2020-01-01','2020-01-10');
select DATEDIFF(MONTH,'2019-01-01','2020-01-01');
select DATEDIFF(YEAR,'2019-01-01','2020-01-01');
db_id():根据数据库名,返回数据库标识(ID)号。
select DB_ID('学生信息数据库');
db_name():根据数据库ID,返回数据库名。
select DB_NAME(DB_ID('学生信息数据库'));
object_id():返回数据库中对象的ID号 ,返回值类型为smallint。
select OBJECT_ID('XSB');
创建函数:
create function 函数名称 ( [@参数名 参数类型 [=默认值]],... )
returns 返回值类型
as
begin
函数体
return 表达式;
end;
调用函数:
select dbo.函数名(实参1,实参2,...,实参n);
删除函数:
drop function 函数名称;
修改函数:
先删除、在创建
创建函数:给定学生学号,求该学生所选课程的平均成绩。
create function F_GET_AVG (@学号 char(6)) returns int
as
begin
declare @avg int;
select @avg=(select AVG(成绩) from CJB where 学号=@学号);
return @avg;
end;
调用函数:
select dbo.F_GET_AVG('081102');
删除函数:
drop function F_GET_AVG;
SQL Server触发器分为DML触发器和DDL触发器这两种。
在触发器中可以使用两个特殊的虚拟表inserted和deleted:
Update操作时:新的记录存入inserted表,旧的记录存入deleted表。
创建触发器:
##创建DML触发器(掌握)
create trigger 触发器名 on 表名/视图名
{ for | after | instead of }
{ insert [,] | update [,] | delete }
as
begin
触发器需要执行的逻辑
end;
##创建DDL触发器(了解)
create trigger 触发器名 on 数据库作用域/服务器作用域
{ for | after }
{ 事件类型 }
as
begin
触发器需要执行的逻辑
end;
事件类型:CREATE_对象类型、DROP_对象类型、ALTER_对象类型
对象类型:DATABASE、TABLE、VIEW等
删除触发器:
##删除DML触发器
drop trigger 触发器名称;
##删除DDL触发器
drop trigger 触发器名称 on 数据库作用域/服务器作用域;
修改触发器:
先删除、在创建
创建DML触发器:当删除XSB表中的一条学生记录时将CJB表中该学生的相应记录也删除
create trigger T_XSB_DELETE on XSB
after
delete
as
begin
delete from CJB where 学号 in (select 学号 from deleted)
end;
触发DML触发器:
delete from XSB where 学号 = '081101';
select * from XSB where 学号 = '081101';
select * from CJB where 学号 = '081101';
删除DML触发器:
drop trigger T_XSB_DELETE;
存储过程(Stored Procedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中。
使用存储过程的优点如下:
常见存储过程的主要分类:
创建存储过程:
create procedure 存储过程名称 [ { @参数名 数据类型 [varying][=default][ouput] },... ]
as
begin
存储过程需要执行的逻辑
end;
参数解读:
=default:表示为该参数设定的默认值,定义默认值后,不必指定该参数的值即可执行过程。
ouput:表示该参数是输出值。
varying ouput:表示该参数是游标参数。
注意:存储过程中不能包含一些特殊语句,如:创建及修改视图、创建及修改函数、创建及修改触发器、创建及修改存储过程、创建DEFAULT、创建SCHEMA、USE 数据库等。
调用存储过程:
execute 存储过程名称 { [@参数=]{常量|@变量 [output]|[default]},... };
删除存储过程:
drop procedure 存储过程名称;
修改存储过程:
先删除、在创建
创建存储过程:计算指定学号的学生所选课程的平均成绩,要求输入参数为学号,输出参数为平均成绩
create procedure P_GET_AVG @num char(6), @avgScore float OUTPUT
AS
begin
select avg(成绩) from CJB group by 学号 having 学号=@num
end;
调用存储过程:
declare @avg float;
execute P_GET_AVG @num='081102',@avgScore=@avg OUTPUT;
或者
declare @avg float;
execute P_GET_AVG '081102',@avg;
删除存储过程:
drop procedure P_GET_AVG;
语法格式:
USE master
GO
EXEC sp_addumpdevice 'disk', --磁盘
'逻辑名称', --逻辑名
'备份地址' --物理名
backup database 数据库名称 to 逻辑名称 --备份
案例演示:
USE master
GO
EXEC sp_addumpdevice 'disk', --磁盘
'mybackupfile', --逻辑名
'D:\mybackupfile.bak' --物理名
backup database 学生信息数据库 to mybackupfile --备份
语法格式:
restore database 数据库名称 from 逻辑名称 with file=1, REPLACE
案例演示:
注意:只有数据库被删除后并且在删除前进行了完全备份,才能使用下边这条命令恢复。
restore database 学生信息数据库 from mybackupfile with file=1, REPLACE
文章浏览阅读1.3w次,点赞5次,收藏50次。今天为大家分享一些可以接私单的平台,相信大家学习编程未来是希望成为一个软件工程师或者码农,找到好的工作,有好的发展。但是在还没有找工作之前,大家可以通过一些平台接一些兼职,一来能够赚钱,在主页保持稳定的情况下能够发展自己的副业。二来通过接项目,大量的实践,你说接触的类型会更丰富,可以为你积累实战经验,面试时也会比他人更有优势。下面就跟我一起来看看有哪些兼职平台吧~国内远程工作平台,接单平台1、CODING 码市著名的Coding旗下的互联网软件外包服务平台,平台以外包为主。._软件工程师哪里好找活
文章浏览阅读497次,点赞8次,收藏9次。在Deepin系统上部署samba服务器_deepin配置samba服务器
文章浏览阅读3k次,点赞4次,收藏29次。本文主要描述QNX SPI Drvier的相关内容,并以SA8155P处理器为例讲解SPI框架。_sa8155
文章浏览阅读7.3k次,点赞4次,收藏5次。IVF是一个非常简单的视频容器。用于封装VP8/VP9的数据。下面多字节的数据是采用小端编码(little-endian)。IVF文件头由32字节组成:bytes 0-3 signature: 'DKIF'bytes 4-5 version (should be 0)bytes 6-7 length of header in bytesbytes _ivf vp8
文章浏览阅读145次。1、虚拟机:淘宝刷单肯定不能使用真正的电脑来操作,难免会有些记录是给淘宝登记了,所以我们要使用虚拟机来实现多台电脑设备进行操作,推荐使用vmware虚拟机,带快照功能,可以无限制的复制N个镜像系统 2、虚拟机快照:很多人喜欢使用快照复制来生成一大堆电脑,其实这个是很危险的,你想想同样的系统安装时间同样的系统软件版本来你店里买东西,这个淘宝会怎么看?所以还是老实点,建个一段时间注册一..._shua shua had a big quarrel with his gf
文章浏览阅读3.2w次,点赞10次,收藏16次。realme gt neo3 看屏幕是天马屏幕还是京东方(图文教程)realme gt neo3 看屏幕是天马屏幕还是京东方(图文教程)由于官网删除我的贴子,所以我发布再csdn上,第一次使用,多多包含!教程准备1:电脑2:数据线3: abd 工具 后面我会提供https://pan.baidu.com/s/1mQwaq-xFh8PX8JiLgkpm6A?pwd=jy5u图文縂教程1.打开开发者模式后进行usb调试打开,链接电脑后允许2.解压 adb3.输入adb bugreport &_neo3京东方和天马屏幕怎么分
文章浏览阅读3.4k次,点赞13次,收藏20次。在上一篇: Android项目实战 | 从零开始写app(九)】Tablayout+ViewPager实现页面分类顶部标题页面联动切换 的基础上实现数据的填充展示由于首页会展示到推荐新闻列表,所以今天先把新闻模块的数据先请求下来,就跳着更吧,后面再继续完善首页~~这篇早早就写好了,奈何发布了几次老是说审核不通过,说内容违规???? 无可奈何~菜鸡一枚,写得不好,有问题的请指教~~文章导航一、【Android项目实战 | 从零开始写app(一)】 创建项目二、【Android项目实战 | 从零开_android listview和http实现获取新闻列表
文章浏览阅读119次。ASP.NET MVC 5 一 入门 本系类教程将要构建ASP.NET MVC 5 Web 应用程序,使用的工具是VS2013 。现在有预览版可以下载了,点击下载VS2013 FOR WEB ISO文件。VS2012 还没用几天呢,2013就要出来,据说数据库..._.net mvc5的body属性
文章浏览阅读603次。为了更好的使用Cmder v1.2,不得不升级PowerShell为4.0。不知道Cmder的,可以点击这里:https://github.com/cmderdev/cmder和逆天神器 cmder。Powershell是运行在Windows机器上实现系统和应用程序管理自动化的命令行脚本环境。需要.NET环境的支持,同时支持.NET对象。当前PowerShell有5个版..._powershell v4
文章浏览阅读1.3k次。CTS/GTS问题分析6遇到一个Android P相关的问题,和原来CTS/GTS 问题分析1的表现是一样的,但是将http://gerrit.pt.miui.com/#/c/387000/这个修复cp过来,发现不生效,仍然报错,因此记录一下问题初探测试命令: run gts -m GtsGmscoreHostTestCases -t com.google.android.gts.devicepo..._gts测试问题分析
文章浏览阅读1.9k次。P: 2009-05-10 23:35:263DVI D系列端子插口针脚定义,“WORD-BREAK处理方式:break-all幅度高达140%”,就像如果人们参加赛马[/ align >英文简介:插头,连接器———插头端子>,< /处理起来:“WORD-BREAK风格,就像如果人们参加赛马break-all幅度高达140%”[/ align >,D型端子EIAJ五D-c..._dvi接口音频针脚
文章浏览阅读683次。Apple Pay的发布,让从事安卓NFC应用开发者兴奋了一把,苹果对NFC的支持必将推动整个产业的发展,然而Apple Pay与安卓系统上的NFC支付有什么区别呢?特别是安卓系统上的HCE技术。近日,著名HCE方案商SimplyTapp CEO Doug Yeager就在博客中发表了文章,对比Apple Pay与HCE。博客对信令技术进行了简单的介绍,他认为“一个信令可以理解成一个证书的生命”,..._hce nfc apdu unionpay