目录
配套资料,免费下载
链接:https://pan.baidu.com/s/1Ffpvm45VRcuqQ1W2cqDN2A
提取码:xyqf
复制这段内容后打开百度网盘手机App,操作更方便哦
第一章 数据库概述
1.1、数据库的好处
1.2、数据库的常见概念
- DB:数据库,存储数据的仓库
- DBMS:数据库管理系统,又称为数据库软件或者数据库产品,用于创建和管理数据库,常见的有MySQL、Oracle、SQL Server
- DBS:数据库系统,数据库系统是一个通称,包括数据库、数据库管理系统、数据库管理人员等,是最大的范畴
- SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
1.3、数据库的存储特点
- 数据存放到表中,然后表再放到库中
- 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
- 表中有一个或多个列,列又称为“字段”,相当于Java中“属性”
- 表中的每一行数据,相当于Java中“对象”
1.4、数据库的常见分类
- 关系型数据库:MySQL、Oracle、DB2、SQL Server
- 非关系型数据库:
- 键值存储数据库:Redis、Memcached、MemcacheDB
- 列存储数据库:HBase、Cassandra
- 面向文档的数据库:MongDB、CouchDB
- 图形数据库:Neo4J
1.5、SQL语言的分类
- DQL:数据查询语言:select、from、where
- DCL:数据控制语言:grant、revoke
- DDL:数据定义语言:create、alter、drop、truncate
- DML:数据操作语言:insert、update、delete
- TCL:事务控制语言:commit、rollback
第二章 SQL Server概述
2.1、SQL Server的概述
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Ⅸ操作系统上的应用。
2.2、SQL Server的下载
操作系统: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|/
复制代码 右键解压:
2.3、SQL Server的安装
2.4、SQL Server的第一种连接
打开“开始菜单”,找到"SQL Server Management Studio",点击启动。
2.5、SQL Server的第二种连接
注意:Navicat Premium配套资料有,全部默认下一步安装即可,如何激活也有说明。
2.6、SQL Server的连接说明
虽然我们提供了两种连接数据库的方式,但是我们这里推荐并采用第一种连接方式。
第三章 SQL Server数据库管理
3.1、创建数据库
3.1.1、界面方式
在”数据库“项,右键”新建数据库“,然后在弹出窗口中输入数据库名称”TEST0“,然后点击确定即可。
3.1.2、命令方式
使用命令行的方式创建一个名字为”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
复制代码 3.2、修改数据库
3.2.1、界面方式
在”TEST0“数据库右键找到”属性“项,在弹出窗口中选择”文件“项,就可以对数据库进行修改。
3.2.2、命令方式
使用“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
复制代码 3.3、删除数据库
3.3.1、界面方式
在要删除数据库上右键选择“删除”,在弹出窗口中选择确定即可删除当前数据库
3.3.2、命令方式
删除数据库使用“DROP DATABASE”命令。
语法格式:
- DROP DATABASE database_name[,…n][;]
- GO
复制代码 案例演示:
删除JUST_TEST数据库。
- DROP DATABASE JUST_TEST
- GO
复制代码 第四章 SQL Server数据的类型
4.1、整数型
整数包括bigint、int、smallint和tinyint,从标识符的含义就可以看出,它们所表示的数范围逐渐缩小。
- bigint:大整数,数范围为-263(-9223372036854775808)~263-1(9223372036854775807),长度为8字节。
- int:整数,数范围为-231(-2147483648)~231-1(2147483647),长度为4字节。
- smallint:短整数,数范围为-215(-32768)~215-1(32767),长度为2字节。
- tinyint:微短整数,数范围为 0~255,长度为1字节。
4.2、精确数值型
精确数值型包括decimal和numeric,他们可存储从-1038+1到1038-1的数字数据。
它们的存储长度随精度(位数)变化而变化,最少为5字节,最多为17字节:
- 精度为1~9时,存储字节长度为5。
- 精度为10~19时,存储字节长度为9。
- 精度为20~28时,存储字节长度为13。
- 精度为29~38时,存储字节长度为17。
例如,若有声明numeric(8,3),则存储该类型数据需5字节;而若有声明numeric(22,5),则存储该类型数据需13字节。
4.3、浮点型
浮点型包括real和float[(n)] 。两者通常都使用科学计数法表示数据,即形为:尾数E阶数,如5.6432E20、-2.98E10、1.287659E-9等。
- real:使用4字节存储数据,表数范围为-3.40E+38~3.40E+38,数据精度为7位有效数字。
- float[(n)] :表数范围为-1.79E+308~1.79E+308。定义中的n取值范围是1~53,用于指示其精度和存储大小。
当n在1~24之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字。当n在25~53之间时,存储长度为8字节,精度为15位有效数字。当缺省n时,代表n在25~53之间。
4.4、货币型
专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值。
- money:数据的数范围为-263(-922337203685477.5808)~263-1(922337203685477.5807),精度为19,小数位数为4,长度为8字节。
- smallmoney:数据的数范围为-231(-214748.3648)~231-1(214748.3647),精度为10,小数位数为4,长度为4字节。
4.5、位型
位型只存储0和1,长度为一个字节。但要注意,SQL Server对表中bit类型列的存储做了优化:如果一个表中有不多于8个的bit列,这些列将作为一个字节存储;如果表中有9到16个bit列,这些列将作为两个字节存储;更多列的情况依次类推。
字符串值TRUE和FALSE可以转换为以下bit 值:TRUE转换为1,FALSE转换为0。
4.6、字符型
字符型用于存储字符串,在输入字符串时,需将串中的符号用单引号括起来,如‘abc’。
字符型包括两类:char是固定长度的数据类型,varchar是可变长度的数据类型,二者均使用ASCII字符集。
- char[(n)]:定长字符数据类型,其中n在1到8000之间,缺省为1。当实际存储的串长度不足n时,则在串的尾部添加空格。
- varchar[(n)]:变长字符数据类型,这里n表示的是字符串可达到的最大长度。
4.7、Unicode字符型
Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理,包括nchar[(n)]和nvarchar[(n)] 。
Unicode字符型包括两类:nchar是固定长度的数据类型,nvarchar是可变长度的数据类型,二者均使用UNICODE UCS-2字符集。
- nchar[(n)]:n的值在1与4000之间,缺省为1,长度2n字节。若输入的字符串长度不足n,将以空白字符补足。
- nvarchar[(n)]:nvarchar[(n)]为最多包含n个字符的可变长度Unicode字符型数据,n的值在1与4000之间,缺省为1。长度是所输入字符个数的两倍。
实际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。
4.8、文本型
文本型包括text和ntext两类,分别对应ASCII字符和Unicode字符。
- text类型可以表示最大长度为 231-1(2147483647)个字符,其数据的存储长度为实际字符数个字节。
- ntext类型可表示最大长度为 230-1(1073741823)个Unicode字符,其数据的存储长度是实际字符个数的两倍(以字节为单位)。
4.9、二进制型
二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。
- binary [(n)]:固定长度的n个字节二进制数据。n取值范围为1到8000,缺省为1。
- varbinary [(n)]:n个字节变长二进制数据。n取值范围为1到8000,缺省为1。
4.10、日期时间类型
日期时间类型包括datetime和smalldatetime两类。
- datetime:可表示的日期范围从1753 年1月1日到9999年12月31日的日期和时间数据。
- 日期部分常用的表示格式如下:
- 时间部分常用的表示格式如下:
- smalldatetime:可表示从1900年1月1日到2079年6月6日的日期和时间,数据精确到分钟。
4.11、时间戳类型
每当对该表加入新行或修改已有行时,都由系统自动修改该列的值,将原来的时间戳值加上一个增量,最后增加或修改的列该值最大。
timestamp 列可反映系统对该记录修改的相对顺序。一个表只能有一个timestamp 列。timestamp类型数据的长度为8字节。
4.12、图像型
图像型是image,它用于存储图片、照片等。实际存储的是可变长度二进制数据,介于0与231-1(2147483647)字节之间。
在SQL Server 2005中该类型是为了向下兼容而保留的数据类型,微软推荐用户使用varbinary(MAX)数据类型来替代image类型。
第五章 SQL Server数据表管理
首先先创建一个数据库,名字叫”学生信息数据库“,以下操作均在该数据库中进行。
5.1、新建数据表
XSB(学生表)的表结构:
[table][tr]列 名数 据 类 型长度可空默认值说 明[/tr][tr][td]学号[/td][td]定长字符型(char)[/td][td]6[/td][td]×[/td][td]无[/td][td]主键,2位年级,2位班号,2位序号[/td][/tr][tr][td]姓名[/td][td]定长字符型(char)[/td][td]8[/td][td]×[/td][td]无[/td][td][/td][/tr][tr][td]性别[/td][td]位型(bit)[/td][td]1[/td][td]√[/td][td]1[/td][td]1:男;0:女[/td][/tr][tr][td]出生时间[/td][td]日期型(datetime)[/td][td]系统默认[/td][td]√[/td][td]无[/td][td][/td][/tr][tr][td]专业[/td][td]定长字符型(char)[/td][td]12[/td][td]√[/td][td]无[/td][td][/td][/tr][tr][td]总学分[/td][td]整数型(int)[/td][td]4[/td][td]√[/td][td]0[/td][td]0≤总学分=0 AND 总学分=1 AND 开课学期=0 AND 总学分=1 AND 开课学期、>=、= 90 then '优秀' when 成绩 >= 70 then '良好' when 成绩 >= 60 then '及格' else '不及格'endfrom CJB;[/code] 7.5、分组查询
语法格式:
- 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
复制代码 案例演示1:按照学生专业对学生进行分组,查询分组后每个专业的名称
- 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
复制代码 案例演示2:按照学生专业对学生进行分组,查询分组后每个专业的名称以及所对应的学生人数
- CREATE TABLE CJB (
- 学号 char(6) NOT NULL ,
- 课程号 char(3) NOT NULL ,
- 成绩 int NULL DEFAULT (0) ,
- PRIMARY KEY (学号, 课程号)
- )
- GO
复制代码 案例演示3:按照课程号对课程进行分组,查询当前课程下所对应的学生人数
- alter table XSB
- add 奖学金等级 tinyint NULL
- GO
复制代码 案例演示4:按照课程号对课程进行分组,查询当前课程下所对应的最高成绩
- alter table XSB
- alter column 奖学金等级 int NOT NULL
- GO
复制代码 案例演示5:按照课程号对课程进行分组,查询当前课程下所对应的最低成绩
- alter table XSB
- drop column 奖学金等级
- GO
复制代码 案例演示6:按照课程号对课程进行分组,查询当前课程下所对应的平均成绩
7.6、过滤查询
语法格式:
案例演示1:按照课程号对课程进行分组,查询当前课程下所对应的平均成绩大于75分的课程号信息
7.7、排序查询
语法格式:
- insert into 表名(字段名,...) values(值,...);
复制代码 案例演示1:对课程号为“101”的课程所对应的学生成绩进行降序排序
- insert into XSB(学号,姓名,性别,出生时间,专业) values('180135','曹晨磊',1,'1997-12-05','计算机网络');
复制代码 7.8、多表查询
语法格式:
- update 表名 set 列 = 值,... where 查询条件;
复制代码 案例演示1:查询每一位学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩
- update XSB set 专业='计算机软件' where 学号 = '180135';
复制代码 案例演示2:查询学号为“081101”学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩
- delete from 表名 【where 筛选条件】;
复制代码 案例演示3:查询学号为“081101”学生选修课程的名称以及成绩,要求输出学生学号、姓名、课程名、成绩,并且对成绩进行升序排序
- delete from XSB where 学号 = '180135';
复制代码 7.9、子查询
语法格式:
- 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);
复制代码 案例演示1:查找选修了离散数学的学生学号
- select 【*/字段名,...】 from 【表名/查询结果集】;
复制代码 案例演示2:查找比所有计算机系的学生年龄都小的学生
案例演示3:查找课程号206的成绩不低于课程号101的最低成绩的学生的学号
案例演示4:查找选修206号课程的学生姓名
- 【格式一】:
- select 字段名 as 别名 from 【表名/查询结果集】;
- 【格式二】:
- select 字段名 别名 from 【表名/查询结果集】;
- 【格式三】:
- select 别名=字段名 from 【表名/查询结果集】;
复制代码 7.10、限制查询
语法格式:
- select 学号,姓名 as 学生姓名 from XSB;
复制代码 案例演示1:查询XSB表中前10条记录,输出所有列
- select 学号,姓名 学生姓名 from XSB;
复制代码 案例演示2:查询XSB表中第11-20条记录,输出所有列
- select 学号,学生姓名=姓名 from XSB;
复制代码 第八章 SQL Server高级语法
8.1、索引
8.1.1、索引概念
索引是帮助SQL Server高效获取数据的一种有序的数据结。它有以下两种分类:
- 聚簇索引 :聚簇索引的顺序就是数据的物理存储顺序。每个表只有一个聚簇索引,SQL Server 2005是按B树(BTREE)方式组织聚簇索引的,聚簇索引的叶节点就是数据节点,由于数据记录按聚簇索引键的次序存储,因此查找效率高。除非在创建主键时特别指定,否则创建主键时会自动创建聚簇索引。
- 非聚簇索引 :非聚簇索引的索引顺序与数据物理顺序无关 。非聚簇索引也是按B树方式组织的,但非聚簇索引B树的叶节点不存放数据页信息,而是存放非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。一个表中可有多个非聚集索引,创建索引时,可指定是按升序还是降序。
8.1.2、索引语法
创建索引:
- select distinct 字段名 from 【表名/查询结果集】;
复制代码 重建索引:
- select distinct 专业 from XSB;
复制代码 删除索引:
- select 【*/字段名,...】 from 【表名/查询结果集】
- where 查询条件;
复制代码 8.1.3、索引练习
创建索引:为KCB表的课程名列创建索引。
- select * from XSB where 学号 = '081103';
复制代码 重建索引:
- select * from XSB where 姓名 like '王%';
复制代码 删除索引:
- select * from XSB where 姓名 like '__民';
复制代码 8.2、视图
8.2.1、视图概念
视图是一个虚拟表,其内容由查询定义。但视图并不存储数据,视图数据来自由定义视图的查询所引用的表。
使用视图有下列优点:
- 简单性:如可屏蔽表连接等复杂操作。
- 安全性:简化用户权限的管理,将用户限制在数据的不同子集上。
- 逻辑数据独立性:基本表的改变只需改变视图,而无需修改应用程序。
8.2.2、视图语法
创建视图:
- select * from XSB where 姓名 like '__民' or 姓名 like '__琳';
复制代码 调用视图:
- select * from XSB where 总学分 < 45;
复制代码 删除视图:
- select * from XSB where 总学分 > 42 and 总学分 < 45;
复制代码 修改视图:
- select * from XSB where 专业 = '计算机' and 总学分 < 50;
复制代码 8.2.3、视图练习
创建视图:创建视图V_CJ,包括学生的学号、姓名、选修的课程名及成绩
- create view V_CJ ASupdate XSB set 专业='计算机软件' where 学号 = '180135';
复制代码 调用视图:
- select * from XSB where 备注 is not null;
复制代码 删除视图:
- select * from XSB where 备注 is null;
复制代码 8.3、T-SQL语言
8.3.1、概念
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 及流控制语句组成。
8.3.2、常量
按类型分为:字符串常量、整型常量、实型常量、日期时间常量、货币常量、唯一标识常量等。
8.3.3、变量
SQL Server中变量可分为两类:全局变量,局部变量。
- 全局变量 :全局变量由系统提供且预先声明,以“@@”开头。T-SQL全局变量作为函数引用。例如,@@ERROR返回执行的上一个T-SQL语句的错误号;@@CONNECTIONS返回自上次启动SQL Server以来连接或试图连接的次数。
- 局部变量 :局部变量以@开头。例如,保存运算的中间结果,作为循环变量等。
局部变量的定义:
- select * from XSB where 学号 in ('081101','081102','081103');
复制代码 局部变量的赋值:
- select * from XSB where 学号 not in ('081101','081102','081103');
复制代码 局部变量的演示1:创建局部变量@var1、@var2并赋值,然后输出变量的值。
- select 学号,成绩等级=
- case
- when 成绩 >= 90 then '优秀'
- when 成绩 >= 70 then '良好'
- when 成绩 >= 60 then '及格'
- else '不及格'
- end
- from CJB;
复制代码- select 【*/字段名,...】 from 【表名/查询结果集】
- 【where 查询条件】
- group by 分组条件;
复制代码 局部变量的演示2:局部变量用于查询条件中。
- select 专业 from XSB group by 专业;
复制代码- select 专业,COUNT(*) as 学生人数 from XSB group by 专业;
复制代码 局部变量的演示3:使用查询给局部变量赋值。
- select 课程号,COUNT(*) from CJB group by 课程号;
复制代码- select 课程号,MAX(成绩) from CJB group by 课程号;
复制代码 8.3.4、数据类型
数据类型包括 系统数据类型 和 用户自定义数据类型
- 系统数据类型 :系统数据类型又称为基本数据类型,在第四章已介绍。
- 用户自定义数据类型 :基于基本数据类型,可由其他表字段引用,在这里不重点介绍,了解即可。
8.3.5、运算符与表达式
8.3.5.1、运算符
- 算术运算符 :+(加)、-(减)、*(乘)、/(除)、%(求模)。
- 位运算符 :执行位操作,两个表达式的类型可为整型或与整型兼容的数据类型(例如字符型等,但不能为image类型)。
- 比较运算符 :比较运算符又称关系运算符,其运算结果为逻辑值,可以为三种之一:TRUE、FALSE 及 UNKNOWN。
- 逻辑运算符 :逻辑运算符在SELECT语句的WHERE子句部分讲过,在此了解即可。
- 字符串联接运算符 :通过运算符“+”实现两个字符串的联接运算。
- select 课程号,MIN(成绩) from CJB group by 课程号;
复制代码 - 一元运算符 :+(正)、-(负)和~(按位取反)。
- 赋值运算符 :指SET和SELECT语句中使用的“=”。
8.3.5.2、表达式
表达式就是常量、变量、列名、运算符和函数的组合,一个表达式通常可以得到一个值。
8.3.6、流程控制语句
流程控制语句可以改变计算机的执行顺序。
SQL Server流程控制语句如下图:
8.3.6.1、语句块
语法格式:BEGIN…END可以嵌套使用。
- select 课程号,AVG(成绩) from CJB group by 课程号;
复制代码 案例演示:查询XSB和KCB的信息。
- select 【*/字段名,...】 from 【表名/查询结果集】
- 【where 查询条件】
- group by 分组条件
- having 过滤条件;
复制代码 8.3.6.2、条件语句
语法格式:用于条件判断。
- select 课程号,AVG(成绩) from CJB group by 课程号 having AVG(成绩) > 75;
复制代码 案例演示:如果1=1,则查询学生表,否则查询KCB。
- select 【*/字段名,...】 from 【表名/查询结果集】
- 【where 查询条件】
- 【group by 分组条件】
- 【having 过滤条件】
- order by 排序字段 asc|desc;
复制代码 8.3.6.3、分支语句
语法格式:用于分支选择。
- 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】;
复制代码 8.3.6.4、无条件转移语句
语法格式:label是指向的语句标号,标号必须符合标识符规则。
- select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
- where x.学号 = c.学号 and c.课程号 = k.课程号;
复制代码 案例演示:跳过查询XSB直接查询KCB。
- select x.学号,x.姓名,k.课程名,c.成绩 from XSB x,CJB c,KCB k
- where x.学号 = c.学号 and c.课程号 = k.课程号
- and x.学号 = '081101';
复制代码 8.3.6.5、循环语句
语法格式:用于重复执行某个程序段。
- 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;
复制代码 案例演示:将学号为"081102"的学生的总学分使用循环修改到大于等于60,每次只加2并判断循环了多少次。
[code]declare @num int =0;while (select 总学分 from XSB where 学号 = '081102') |