SQLserver服务器的安装:SQLserver2019的安装:在微软官网下载SQLserve服务器,安装即可

第一章:数据库技术介绍

1.数据库技术:数据库技术口水研究的问题然后科学的组织和存储数据,然后高效的获取和处理数据数据库技术的重要性:数据库技术能为人们提供安全,可靠,可共享的数据什么是SQL :结构化查询语言  SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言
在使用SQL的时候,只需要发出做什么的命令,怎么做是不需要使用者考虑的数据库:数据(Data)  数据库(databases)  数据库管理系统(DBMS)  数据库系统 (DBS)数据(data)的定义:对客观生物的符号表示,如图形,数字,字母等。数据是数据库中存储的基本对象
在日常中:直接用语言来描述事务,在计算机中为了存储和处理这些事务,就要将事务的特征抽象出来组成一个记录来描述数据的种类:文字 图形 图像 声音数据举例;
数据的形式是不能完全表达其内容的数据库(DB)定义:长期存储在计算机内,有组织的,可共享的的数据集合
数据库中的数据按照一定的数据模型组织,描述和存储具有较小的 冗余度,较高的数据独立性和易扩展性,并可为各个用户共享数据源管理系统:DBMS:位于应用程序与存储数据的的一层数据管理软件
是基础软件,是一个大型复杂的软件系统DBMS的用途:科学的足赤和存储数据,高效的获取和维护数据数据库定义的功能:用DDL编写的各级源模式不易成各级目标模式。这些目标  模式是对数据库结构信息的描述,而不是数据本身
数据库的操作功能:单独数据操作语言DML及编译程序
数据库的保护功能:数据恢复没数据库的并发控制 数据我在想控制和数据安全性控制
数据库的维护功能:数据库的数据的导入,转换,存储,数据库新性能监控等DBMS的优点:相互互联的数据的集合 较少的数据冗余 程序和数据相互对立 保证数据的安全 可靠 正确数据可以并发使用并能同时保证一致性 也就是同步更新2.流行的DBMS:Oracle 关系型数据库MySQL数据库:快捷可靠,开源,免费SQLserver数据库:针对不同用户群体的五个特殊的版本DB2:应用于大型应用系统数据库系统:DBS 一帮有数据库,数据库管理系统及其开发工具,应用系统,数据库管理员和用户构成数据库的发展建立了三个阶段:网状数据库,此次数据库和关系型数据库
分别采用网状模型,层次模型,关系模型作为数据的组织方式
层次模型:树形结构
网状模型:图形结构
关系模型:简单二维表结构信息和数据:
信息;是指数据经过几十个处理后所获取的有用这是,信息是一某种数据形式表现的信息的三种世界:
现实世界:存在于热闹之外的客观世界
信息世界:信息世界就是现实在人们头脑中的反映,有称观念世界
数据世界:按照特定的数据结构,将数据存储在计算机中实体-联系模型:
实体:客观事务在信世界中称为实体,他是现实数据中任何可区分,识别的生物属性:描述实体或者联系的性质或特找那个的数据项
联系:反映生物内部或事务之间的关联集合常见的实体联系有3种:一对一一对多联系 多对多联系关系的的基本概念:关系:一个关系就是一张二维表,通常将一个没有重复行,重复列的二维表看成一个关系,每个关系都有一个关系名称元祖:二维表的每一行在关系中称为元祖 在SQLserver中 一个元祖对于表中的一个记录属性:二维表的每一列在关系中称为属性,每个属性都有一个属性名  属性值则是各个元祖属性的取值域:属性的一个取值范围称为域
关键字:关系中能唯一区分,确定不同元祖的属性或属性组合,称为该关系的一个关键字关系模式;
对关系的描述称为关系模式,其格式为:关系名(属性名1,属性名2,...属性名n)1.的基本特点:在关系模型中:关系具有如下的基本特点:
2.必须规范化,属性不可在分割
3.一关系中不允许查询系统的属性名
4.一关系中元祖的顺序可任意
5.一关系中的顺序的顺序可以任意关系运算:选择 投影 和连接1.选择:从关系模式中找出满足给定条件的元祖组成新的关系(从行的角度来进行的运算)
2.投影:从关系模式中指定若干顺序组成新的关系,从列的角度进行的运算
3.连接:笛卡尔积中选取属性间满足一定条件的元祖,组成性的关系关系的完整性约束:
实体完整性
参照完整性(引用完整性)
域完整性(用户定义完整性)
实体完整性:主属性值不能取空值如:学生信息表(姓名,性别,年龄,地址)中姓名不能为空
外键:主要是加强两个表中的联系
参照完整性:简单的来说就是主键域外键的关系
域完整性:限制了某些属性中出现的值,把属性限制在一个有限的集合中
投影:从关系模式中指定若干属性组成新的关系,从列的角度进行,运算关系模型的规范化:关系模式要满足的条件称为规范化学生,简称范式
关系模型规范化的目的的为了消除
1.异常少数据冗余
2.数据的完整性和存储效率
一般规范为3NF即可第一范式:1NF:如果关系R的所有属性均为简单属性,即每个属性都是不可再分的,则称R满足第一范式也就是:每个属性都是不可在分的简单来说:第一范式就是无重复的列
第二范式:如果关系R满足第一范式,且每一个非主键字段完全原来域主键 则称R满足第二范式
第三范式:3NF:如果关系R满足第二范式,且非主键字段之间不存在原来关系,则称R满足第三范式E-R图:也称实体联系图,原来描述现实世界的概念模型通常:       用矩形来表示实体 矩形内写明实体名用椭圆表示实体属性,椭圆内写明实体属名用菱形表示实体间的联系,在菱形内写明联系名  用线段连接起来

第二章:数据库的操作

数据控制语言:DCL:矩形安全性管理grant:授予权限
revoke:收回权限
deny:收回权限,与revoke权限相似,不同之处就是处收回权限外还禁止SQL语言:
create:常见数据库或者数据库对象
alter:对数据库或数据库对象进行修改
drop:删除数据库或数据库对象
select:从表或视图中检索数据
insert:向表中插入数据
update:修改关系表或视图中的数据
delete:从表或视图中删除数据一个数据库中包含三个外键:
1.基本数据文件(主数据文件) :一个数据库中有且仅有一个 ,其扩展名为.mdf
2.辅助数据文件:根据需要自由选择,当数据库很大时,可以选择多个,即0个,1个,...其扩展名为.ndf3.日志文件:英语恢复数据库所需要的事务日志信息,照烧一个。其扩展名为.ldf主初始化数据文件大小至少为3
1.创建数据库:使用SQL语句括号里面必须有以下的字段属性 不管主文件还是辅助文件,日志文件name='逻辑名',filename='文件的存放地址,绝对路径,相对路径',size=数据文件的初始大小,maxsize=数据文件的最大大小,filegrowth=文件的增长方式,主数据文件和辅助数据文件例如:
CREATE DATABASE CS
ON PRIMARY
-- 以下是声明主数据文件
(name='f1',
-- 声明文件的路径及文件的扩展名,注意要和名称保持一致
filename='E:\SQLserverFile\f1.mdf',
size=3mb,
-- 设置文件无限制增长
maxsize=unlimited,
filegrowth=3%
),
(
-- 以下是辅助数据文件
name='f2',
filename='E:\SQLserverFile\f2.ndf',
size=10mb,
maxsize=400mb,
filegrowth=6mb
)
-- 以下是声明日志文件
log ON(
name='f3',
filename='E:\SQLserverFile\f3.ldf',
size=1mb,
maxsize=unlimited,
filegrowth=2%
)
CREATE database 计算机科学与技术
on PRIMARY(
name='软件工程',
filename='E:\SQLserverFile\Database\计算机.mdf',
size=3mb,
maxsize=unlimited,
filegrowth=3mb
),
(
name='网络工程',
filename='E:\SQLserverFile\Database\网络.ndf',
size=6mb,
maxsize=600mb,
filegrowth=2%
)
log on(name='f3',
filename='E:\SQLserverFile\Database\软件.ldf',
size=1mb,
maxsize=unlimited,
filegrowth=2%
)修改数据库:
修改数据库名称:语法如下:
alter database 原数据库名
modify name=新数据库名-- 修改数据库的名字alter DATABASE tsgl
modify name=计算机科学与技术学院-- 添加一个辅助文件(add file)
-- 添加一个日志文件(add  log  file)-- 在计算机科学与技术学院数据库下添加辅助文件和日志文件
alter database 计算机科学与技术学院
add file(
name ='Root',
filename='E:\SQLserverFile\test1\CS.ndf',
size=3mb,
maxsize=unlimited,
filegrowth=2mb
)-- 添加日志文件
alter database 计算机科学与技术学院
add log FILE(
name='RootTest',
filename='E:\SQLserverFile\test1\CSS.ldf',
size=1mb,
maxsize=400mb,
filegrowth=4%)-- 删除数据库:
-- drop database 数据库名DROP database 计算机科学与技术学院

第三章:表的操作

表的基本概念:在数据库中,表是有数据按照一定的顺序和格式构成的数据集合,是数据库的主要对象,每一行代表一条记,每一列代表记录的一个字段在关系数据库中每一个关系都体现为一张表堆土具体的某一张表,在创建之前,需要确定表的下列特征:
表要包含的数据的类型
表的列数,每一列中的数据的类型和长度
那些列允许为空值:4.是否使用以及何处使用约束,默认设置和规则
那些是主键,那些是外键数据类型:
大整型:Bigint
常用的整型:int
小整型:smallint:长度为2字节
Bit:是位类型  长度为1字节, 只能存0和1
decimal 两者类型完全系统,提供了小鼠所需的实际存储空间
Money:存储的货币值有8字节组成,前4字节代表整数部分 ,后4字节代表小数部分
smallmoney与money数据类型相似,但范围比money小,由4个字节组成近似数字:float  RealDatatime:表示日期和时间类型  存储日期为1753.1.1  --9999.12.31字符串:char:定义形式为
char(n) 存储数据时,每个字符和符号占用一字节存储空间,n表示所有字符串所占的存储空间  取值1-8000,若不添加n的值系统默认
为1  如果定义了一个char类型,且允许该列为空,则该字段会被当做varchar来处理
varchar:定义形式为varchar(n) 同char类似,但是不同的varchar具有变动长度的特性text:用于存储文本数据unicode字符串:定义形式于为nchar(n)与char类似  二进制字符串:
Binary:定义形式为binary(n)  数据存储长度是固定的,为n+4个字节,当输入的二进制长度小于n时,余下部分会填充0 ,常用于存储图像等数据varbinary:定义形式为varbinary(n) 数据存储单位是变化的,为实际所输入的数据长度加上4字节
Image:用于存储照片或图画等举例:创建表:-- 先切换数据库
use 计算机科学与技术-- 1.创建表:
-- 语法如下:-- 创建表(学号,姓名,年龄,性别)create table 学生表
(学号 varchar(10) not NULL,
姓名 char(10) not NULL,
年龄 int null,
性别 char(5))对表的操作写法:
数据库名字.DBO.表名 这个也是可以的创建表之后,可以去更改最初创建表的时候定义的许多选项,这些选项包括:
添加,修改或删除列
可以添加或删除约束1.添加(列)属性:alter table 表名add 属性 数据类型(长度)[null notnull]2.修改数据类型:
alter table 表名
alter column 属性 数据类型3.删除列属性:
alter table 表
drop column 属性修改列名:
exec sp_rename '表名.列名','新列名'修改表名:exec sp_rename '原表名','新表名'-- 为学生表添加一个son列
alter table 学生表
add sno varchar(14)  not nullalter table 学生表
ADD age int  -- 修改表中姓名数据类型
alter table 学生表
alter column 姓名 varchar(20)-- 删除列
alter table 学生表
drop column sno-- 修改列名
exec sp_rename '学生表.姓名','name'-- 修改学生表为student
exec sp_rename '学生表','student'约束:
1.主键约束:primary key 唯一确定表中每一条记录的标识符2.外键约束 foreing key  用于建立和加强两个表数据主键的连接3.唯一约束:unique(可以为空)指定一个列或多个列的值具有唯一性4.检查约束:check设置基础条件,以限制输入值5.默认约束Default
插入操作中没有提供输入值时系统会自动加上指定值创建和删除约束:
1.创建约束的语法:alter table 表名
add constraint 约束名 约束类型 具体的约束说明2.删除约束:
alter table 表名
drop constraint 约束名举例:
-- 对学号添加主键约束primary KEY
alter table student
add constraint PK_学号 primary key (学号)-- 注意:一个表中只能有一个主键约束 如果多了就会报错-- 为空的列不能创建主键约束-- 检查约束
alter table student
add constraint CH_age check (年龄>18)-- 对姓名添加一个唯一约束
alter table DISTRIBUTEDadd constraint UN_name UNIQUE (name)-- 给性别添加默认约束为男
alter table student
add constraint DF_性别 default '男' for 性别对员工信息表添加如下约束:
alter table 员工信息表
add constraint CK_年龄 check (年龄>18 and 年龄 <25)2.
alter table 员工信息表
add constraint CK_部门 check(单位部门='软件测试' or 单位部门='前端')外键约束:加强两个表之间的联系例如 student表和employee表
create table 成绩表
(学号 varchar(10) not null,
成绩 int
)-- 给成绩表的学号创建一个外键约束,参考学生表和成绩表之间的关联alter table 成绩表
add constraint FK_学号 foreign key (学号)
references student(学号)create table 成绩表
(学号 varchar(10) not null,
成绩 int
)-- 给成绩表的学号创建一个外键约束,参考学生表和成绩表之间的关联alter table 成绩表
add constraint FK_学号 foreign key (学号)
references student(学号)注意:外键的长度一定要相同,不然就报错如果要创建外键约束,你们就要保证参与外键约束的列的数据类型要一致有用的列必须是主键约束或者唯一约束两个表的列名尽量保持一致删除约束:alter table 表名drop constraint 约束名
例如:
-- 删除默认约束
alter table student
drop constraint DF_性别注意:要删除约束:如果被引用,要删除则必须处理这些问题3.5创建表的同时创建约束举例:-- 创建三个表create table tsg1(
-- 这个就是在创建表的时候就声明主键
书号 char(20) primary key,
书名 char(20),
出版社 char(25),
类别 char(20),
作者 char(10),
出版时间 datetime,
价格 int check (价格>0)  --检查约束的语法
)-- 创建第二个表
create table dz
(
编号  char(20) primary key,
姓名 char(20),
单位 char(20) default '计算机科学与技术学院', --默认约束的写法
性别 char(15) check (性别='男' or 性别='女') unique --唯一约束
)-- 创建第三个表
create table jy
(书号 char(20) foreign key REFERENCES tsg1(书号),--书号设置为外键约束  外键约束的声明
编号 char(20) foreign key references dz(编号),
借阅日期 datetime,
还书日期 datetime,
还书标识 char(2),primary key(书号,编号)--联合主键的声明
)

第四章:T-SQL语言

基本概念:
1.标识符:数据库对象的名称即为其标识符
2.标识符的种类:SQLserver中标识符可以分为以下两种类型:1.常规标识符:符合标识符的格式标识2,分隔标识符包含在双引号或者中括号内常规标识符规则:第一个字符必须是下列字符之一:英文大小写字母 下划线或者数字数字符号注意:后续字符可以包括@符号,美元符号,数字符号,下划线标识符不能是保留字  不允许嵌入空格或其他特殊字符批处理:批处理是一个包含一个或多个T-SQL语句的组,从应用程序一次性地地发送到SQLserver进行执行,SQLserver将批处理的语句编译为一个执行单元,称为执行计划。执行计划中的语句每次执行一条注释:是程序代码中不被执行的文本字符串也称为备注
单行注释多行注释1.常量:也称为文字值或标量值,是在程序允许过程中值保持不变的量,他是来表示一个特定数值的符号2.字符串常量:括在单引号内并包含数字,字符
3.Unicode字符串:与普通字符串相似,但是前面有个N标识符
3.二进制常量:具有前缀0x并且是十六进制数字字符串
不使用引号引起
4.bit常量:使用数字0和1表示变量是指在程序运行过程中可以改变的量
局部变量是用户自定义的变量,他用declare语句声明的,注意范围在程序内部,局部变量的名称是自己定义的,以@开头局部变量语法如下:
declare @变量名字  变量类型...举例:-- 声明两个变量:
declare @name varchar(10) ,@age int-- 声明局部变量,后要给局部变量赋值,可以使用set或select语句,赋值语法格式如下:set @name=10   --set一次只能赋值一次,select一次可以赋值多个-- 赋值:
set @name='张三'
set @age=18-- SELECT
select @name='李四', @age=19输出语句:print
向客户端发挥一个用户自定义信息,即显示一个字符串,局部变量,全局变量的内容
语法:-- 声明两个变量:
declare @name varchar(10),@age int-- 声明局部变量,后要给局部变量赋值,可以使用set或select语句,赋值语法格式如下:set @name=10    --set一次只能赋值一次,select一次可以赋值多个-- 赋值:
set @name='李白',
set @age=18-- SELECT
select @name='李四', @age=19-- 输出:
print @name
print @age全局变量:是SQLserver系统内部事先定义号变量,不允许用户参与定义修改用户也不能建立全局变量
全局变量的名字以@@开头
常见的全局变量可以查询文档
print @@version运算符:+ - * / %取模运算分析:
-- 算数运算符
declare @a int, @b int ,@z int
set @a=10
set @b=4-- 加减乘除
set @z=@a+@b
print @z2.赋值运算符
3.位运算:是在两个表达之间执行为操作,这两个表达可以是任意两个整数类型的表达式& 位与逻辑运算符
| 位或逻辑运算符
^ 位或运算
运算规则与数学逻辑一样4.比较运算符5.逻辑运算符。其运算结构发挥的是布尔类型的值即FALSE或TRUE 两个结果
between:如果操作数在某个范围内,那么结果为TRUEin:如果操作数对于表达式列表中的一个,那么结果就为TRUE
like 如果曹组偶数与某种模式相匹配,那么结果为TRUE
not :对任何其他布尔运算符的结果取反
or:如果两个布尔值表达式中如何的一个为TRUE 那么结果为TRUE加号:是字符串连接运算符,可以用他将字符串连接起来:
举例如下:
declare @name varchar(10)
set @name='你好!'
print '计算机科学与技术学院'+@name一元运算符:+数值为正 -数值为负 ~逻辑飞 为反8.运算符的优先级
1.一元运算符
2.乘除 取模
3.+ 加 字符串连接运算符 -
4.比较运算符
5.逻辑运算符
6.赋值运算符说明:若表达式中含有相同优先级的运算符,则从左向右一次处理。还可以使用括号来提供运算符的优先级,在括号里面的优先级最高流程控制语句:语法如下
当流程控制语句必须执行一个包含两条或链条以上的语句块时,使用begin ...end语句
BEGIN{
-- 这里面是代码块
-- 说明begin和end语句必须车队使用。如何一条语句均不能单独使用-- 例如交换两个数字DECLARE @x int,@y int @t int
set @x=1
set @y=2set @z=@x
set @x=@y
set @y=@z
}
ENDPRINT @x
PRINT @y-- if ...else  如果条件为真,则执行条件表达式后面的T-SQL语句,当条件为假时,可以使用else关键字指定的SQL语句 语法如下:
declare @m int
set @m=12
if @m>0PRINT 'TRUE'
ELSE PRINT 'FALSE'-- 判断两个数的大小
declare @m int @n int
set @m=3
set @n=7
if @m>@nPRINT '成立'
ELSEPRINT '不成立'-- where:当条件为正的时候可以重复执行循环语句,如果想循环执行的元祖命令,则需要配合begin...end 一起使用
-- 语法如下:求1
到1-10之间的整数和DECLARE @x int,@y int
set @x=1
set @y=0
while @x   <10BEGINset @y=@y +@xset @x=@x+1END
PRINT @y循环结构while自居可以使用continue和Break命令控制循环中语句的执行,语法举例:case语句:工具表达式的真假来确定是否返回某个值,可在允许使用表达式的如何位置使用这个关键字 case语句进行多个分支的选择
DECLARE @grade int ,@msg VARCHAR(10)
set @msg=
CASE WHEN  @grade >=90 and @grade <=100 THEN   '优秀'WHEN @grade >=70 and @grade <90 then  '良好'WHEN @grade >=60 and @grade <70 then  '及格'WHEN @grade <60 THEN '不及格'ELSE '错误'
END
PRINT @msgWAITFOR延迟语句,可以将他后面的语句在英国指定的时间间隔之后执行,或在未来的某一个指定的时间执行

第五章:DML语句

1.查询数据,添加数据,修改数据源所谓查询,就是对已经存在于数据库中的数据按照特定的组合,条件或进行检索。初心功能是数据库有最基本也是最重要的功能查询语句: select ...from...-- 查询语句的语法如下:
SELECT 学号
FROM 成绩表SELECT 成绩
FROM 成绩表-- 查询三列的情况
SELECT 学号,name,性别
FROM student如果用户希望在初心返回结果中删除重复行,就可以在select自居中石油DISTINCT关键字
语法:
select DISTINCT 列名称 from 表名称例如:
-- 去除重复的信息
SELECT DISTINCT 学号
FROM * from 学生信息表top语句英语规定要返回的记录的数目
语法如下:select top *(列名) from table
top n用于指定初心结果返回的行数SELECT top 3
FROM 学生信息表
-- 这个语句读作查询前三行的信息-- 结合去重复的语句的使用
-- 去掉重复的数据,后面的数据会往前补
SELECT distinct top 3 学号
FROM 学生信息表使用别名查询:使用select语句初心数据时,可使用别名的方法工具需要对数据显示的标题进行修改1.在列的表达式中给出别名-- 例如:
SELECT 学号 'sno',成绩 'score'
FROM student2.使用=表达式-- 使用=号
SELECT 'score'=成绩 FROM student3.使用as关键字来连接列表达式和指定的别名-- 使用as关键字来指定
SELECT 学号 AS 'score',成绩 AS 'score'
FROM student计算列:在进行数据查询时,经常需要对查询到的数进再次计算例如:SELECT 学号,课程编号,成绩,'调整前的成绩'=成绩,
'调整后的成绩'=成绩-10
FROM student选择查询:一般查询都不是针对全表石油行的查询,只是从这个表中选出满足指定条件的内容,这就要用到where字句
语法如下:
select 要查询的列
from 要查询的表 where 要查询的条件1.比较搜索条件:例如:查询学号为2的学生信息select namefrom student where 学号=1例如:查询成绩及格的学生信息select name,成绩,班级from student where score>=602.逻辑运算搜索条件:and 两边要同时满足or 两边条件满足其中一个即可例如:查询学生住址为北京,成绩合格的学生select name,地址,成绩from studentwhere 住址='北京' and 成绩>=60例如:查询学生住址为北京,成绩合格的学生select name,地址,成绩from studentwhere 住址='北京' or 成绩>=603.范围叟座条件:范围搜索返回介于两个指定值之间的所有值,可范围包括范围和排他范围两种类型,用between,not between例如:查询成绩在60到70之间的学生信息select name,学号,班级from student where 成绩 between 60 and 704.列表搜索条件:in关键字使用户可以选择与列表中的任意值匹配的行例如:查询学生地址在北京,云南的学生select name,地址,学号from student where 地址 in('北京','云南')5.搜索条件中的字符匹配符:like关键字搜索与指定模式匹配的字符串,日期或时间值。模式包含要搜索的字符串,字符串中可以包含4种通配符% 替换0个或多个字符- 代替一个字符[] 代替指定范围内的单个字符,[]中可以是单个字符[^] 代表不在指定范围内的单个字符,[ ^]中可以是单个字符例如:where 姓名 like 'W%'where 姓名 like '_W%'where 姓名 like [a-A]-- 查询姓王的学生
SELECT name
FROM student WHERE name LIKE '王%'-- 查询出姓名是两个字的学生
SELECT name
FROM student WHERE name LIKE '王_'空值(null) 在数据库表示不确定的值 判断取值为空的语句格式为 where    列名: is   null判断取值部位空的语句格式为:where is not null-- 查询成绩为null的学生有哪些
SELECT *
FROM 学生成绩表
WHERE score IS NULL-- 查询成绩不为空的信息情况
SELECT
*FROM 学生成绩表 WHERE score is not NULL5.聚合函数:对异种族执行计算,并返回单个值。在SQLserver中有如下聚合函数
sum():计算列值的总和
avg():计算列的平均值
max():计算列的最大值
min():计算列值最小值
count(*):统计表值元祖的个数
count():统计本列值的个数,上数函数除了count(*)外,其他函数在计算过程中均忽略null值语法如下:select 聚合函数 from 表名一次聚合函数存放位置只能在select字句后面,-- 查询成绩不为空的信息情况
SELECT
*FROM 学生成绩表 WHERE score is not NULL-- 求成绩的总和:
SELECT sum(score) as '总成绩'
FROM 学生信息表-- 查询成绩的平均值
SELECT AVG(score) as '平均值'
FROM 学生信息表-- 求成绩的最大值
SELECT MAX(score) as '最高成绩'
FROM 学生信息表-- 求成绩的最低值
SELECT MIN(score) as '最小值'
FROM 学生信息表-- 统计学生总人数
SELECT COUNT(name) as '总人数'
FROM 学生信息表--    查询有成绩的学生的总人数
SELECT COUNT(DISTINCT name)
FROM 学生信息表数据的分组:使用group by 语句用于结合合计函数,工具一个或多个列的结果集进行分组
语法格式:select 列名1,列名2....from 表名  group by 要根据那个列来分组的列名举例:查询每个年级的总人数和班级数量select 年级,sum(人数) as 年级总人数,count(班级编号) as 班级数量from 班级信息group by 年级-- 例如:查询每门课的最高分和最低分
SELECT  name,成绩,MAX(成绩) as '最高分' ,MIN(成绩) AS '最小值'
FROM        成绩表
GROUP BY 成绩having通常与group by字句一起使用,相当于一个用于组的where字句,制定组的搜索条件,having字句可以包含聚合函数,但是where不可以举例:
select 学号,sum(成绩) from 成绩表
group by 学号
having sum(成绩) <600  这个语句读作查询按照学号进行分组当总成绩小于600的学生信息order by语句用于对指定的结果集进行排序
order by语句默认升序
降序排序可以使用desc关键字
select *from 成绩表 order by 成绩[desc]举例:-- 查看成绩表(升序 降序)
SELECT *
FROM 成绩表
ORDER BY 成绩-- 按照降序排列
SELECT *
FROM 成绩表
ORDER BY 成绩 DESCwhere字句可以使用的一些条件:比较运算符,逻辑运算符,范围运算符,列表运算符,字符匹配符select... from ...where... group by ... having ..order by表连接:在实际查询应用中,用户所需要的数据并不全在一张表中,可能存在多个表中,这个时候就需要使用多表初心
在数据库应用中,经常需要从多个相关的表中查询数,这就需要继续表连接使用内部连接:内部连接是比较常用的一种数据连接查询方式内部连接有一下两种语法形式:
方式一:-- 1.多表查询:初心学生的学号,姓名,性别,以及所在的班级名称和年级
SELECT 学生信息.姓名,学生信息.学号,学生信息.性别
班级信息.班级名称,班级信息.年级
FROM    学生信息,班级信息
WHERE   学生信息.班级编号=班级信息.班级编号方式二:-- 方式二:
SELECT  学生信息.姓名,学号,性别
班级信息.班级信息,年级
FROM        学生信息 inner join 班级信息
ON  学生信息.班级编号=班级信息.班级编号多表查询首先要在各个表之间之间进行连接。用户在进行基本连接操作时,可以遵循以下基本原则表连接:inner join连接一般用inner join 或join关键字指定内连接,又可分为等值连接,非等值连接1。等值连接:是在连接条件中石油比较运算符等于号来标胶连接的列值。其查询结果列称被连接表中的所有列2.非等值连接:是在连接条件中石油了除了单号外的其他比较运算符,来比较连接列的列值-- 案例:查询成绩大于40的学生个人情况,并按照成绩降序排列
SELECT G.name,年龄,班级 , s.name,性别
FROM 成绩表 G innner join 学生信息表 s
ON G.学号=s.学号
AND G.成绩>40
ORDER BY G.成绩 DESC内连接:只有匹配到相同的数据才会做输出使用外部连接:外部连接会返回from字句中提到的至少一个表或视图中的所有行外部连接分为左外部连接,右外连接和全外连接左外连接对连接条件左边的表不加限制,右外部连接对连接条件中右边的表不加限制,全外连接对两个表都不加限制,所有两个表中的行都会包括在结果集   注意:先书写的是左表后书写的是右表左外连接:使用left outer join 关键字对两个表进行连接,左外连接的初心结果中包含指定左表的所有行,而不仅仅是连接列所匹配的行,如果左表的某行在有表中没有找到匹配的行,则结果集中的右表的相对应的位置为null举例:查询出所有学生的学号,姓名,课程编号,成绩-- 查询出所有学生的学号,姓名,课程编号,成绩SELECT    学生信息.学号,姓名,成绩表.课程编号,成绩FROM   学生信息表  left OUTER JOIN 成绩表ON 学生信息.学号=成绩表.学号右外连接:right outer join 关键字对两个表进行连接,右外连接是左外连接的反向连接完全连接:使用full outer join 关键字对两个表进行连接。这种连接方式返回左表和右表中所有的行,当某行在一个表中没有匹配的行时,则另一个表与之对应的相应列的值为null,如果表之间有匹配的行,则这个结果集合包含表的数据值案例:查询出每个班的所有情况:select  班级信息.班级名称,年级,人数,课程信息.班主任,课程名称,开课系列from 班级信息 full outer join 课程信息on 班级信息.班级编号=课程信息.班级编号子查询在其他查询结果的基础上提供了一种有效的份上来表示where字句的条件
子查询是可以嵌套在   select insert update delete 语句中子查询的select查询总是使用圆括号括起来的子查询的分类:嵌套子查询 相关子查询1.嵌套子查询:在SQLserver中子查询是可以嵌套使用的,并且可以在一个查询中嵌套任意多个子查询,即一个子查询中还可以包含另一个子查询,这种查询方式称为嵌套子查询例:查询计算机系学生选修那些课程解:select  *from scwhere sno in(select 学号from studentwhere sdept='计算机系')
where字句后的条件要什么,子查询就查什么例:查询了修了'c02'课程且成绩高于此课程的平均成绩的学生的学号和成绩
select sno,grade
from sc
where cno='c02' and grade>(select avg(grade)from scwhere cno='c02'
)例:查询选修了高等数学课程的学生的学号,成绩select sno,gradefrom scwhere   cno in(select cnofrom coursewhere cname='高等数学')相关子查询:这样的子查询只返回一个值,然后将一列值与查询返回的值进行比较例:查询和ff在同一个班的学生的系先查询出ff学生所在的班级select S.学号,姓名,性别,C.班级名称,年级from    学生信息 as S ,班级信息 as Cwhere S.班级编号=C.班级编号and S.班级编号 in(select 班级编号from 学生信息where 姓名='ff')在查询基础创建新表:使用select....into 语句可以在查询的基础上创建新表语法为:select 选择列表into 新表名from 表名例:      在查询的基础上创建新的表select *into    学生信息2from   学生信息这个语句读作在学生信息的基础上创建学生信息2这个表5.添加数据:在SQLserver中可以在表里面插入数据1.使用insert 和values插入行语法如下:insert into 表 values(字段1,字段2,字段3.....字段n)例子:在学生表中插入一个新的学生信息insert into student(学号,姓名,班级,性别,系别)values('12222','吴邪','计算机1班','男','计算机科学与技术学院')insert into student(学号,姓名,班级,性别,系别)values('1122','解雨臣','计算机2班','男','计算机科学与技术学院')多条数据插入:INSERT into 成绩表(学号,成绩)
VALUES('002','120'),
('003','120'),
('004','120'),
('005','120')SELECT *FROM 成绩表2.使用insert和select插入行在insert语句中使用select字句可以将一个或多个表或视图中的值添加到另一个表中。使用select字句还可以同时插入多行通过select语句生成的结果集,在结合insert语句,可以把结果集插入到指定的表中,这种方法用于插入的数据不确定语法如下:例如:create table 新学生信息(学号 varchar(50),班级编号 varchar(50),姓名 varchar(50))insert into 新学生信息select 学号,班级编号,姓名 from 学生信息这个语句读作把查询到的信息数据放入新学生信息这个表中注意:新表中的所有列都要与原来表中相对于列的数据类型相同,一次可以直接从目的表中获取插入的数据到新表中使用where字句指定条件的insert select语句,将这些数据批量添加到目录例子:将成绩表中成绩大于70并且课程编号是1003的数据插入到成绩表2中create table 新成绩表(学号 varchar(50),课程编号 varchar(50),成绩 int)select *from 成绩表insert into 新成绩表select *from 成绩表where 成绩>70 and 课程编号='1003'修改数据:在SQLserver中可以进行表数据的修改语句:使用update 表名 set 列名=表达式set字句指定要更改的列和这些列的新值1.使用简单的update语句:例:update 成绩表set 成绩=90update 成绩表set 成绩=成绩+5带where字句的update语句例:假设将成绩为95并且在1002到1003之间课程编号的所有学生调动到学号是3的里面update 成绩表set 学号='3'whwer 成绩='95' and 课程编号 between '1002' and '1003'更新多列:使用逗号隔开即可例:在stu数据库中对成绩表进行重组和调整,原来编号在1003的课程1编号名称变为“晚上1003” 成绩为98update 成绩表set 课程编号='我是1003',成绩=98where 课程编号='1003'如果:条件不统一更改的值也不一样那么就分开来写例:更新课程编号为10001的行时,同时关系课程编号为1002的行,这个时候就要使用多个update语句update 成绩表set 成绩='89'where 课程编号='1001'update 成绩表set 成绩='88'where 课程编号='1002'例:将计算机系的全体学生的成绩加5分update scset grade=grade+5where sno in(select snofrom student where sdept='计算机系')删除数据:在SQLserver中使用delete语句删除数据可以删除一行或多行语法如下:delete from 表名 where 选择条件例:从成绩表中删除成绩大于90分的记录delete from 成绩表2where 成绩>70
注意:如果不书写where那么这个表里面的数据就会被全部删除删除固定行数据
例如:delete top(20) percent from 学生信息 这个语句读作删除前5行

第六章:视图


1.视图是基于某个查询结果的虚表,在SQLserver中可以创建标准视图,索引视图,分区视图
2.标准视图组合了一个或多个表中的数据,可以获得使用视图的大多数好处,包括将重点放在特点数据上及简化数据操作3.索引视图是被具体化了的视图。即他已经经过计算并存储,索引视图尤其适合于聚合许多行的查询,但是他们不太适用经常更新的基本数据库集4.分区视图在阳台或多台服务器水平连接一组成员表中的分区视图优点:着重于特点数据,简化数据操作,自定义数据,导入和导出数据,跨服务器组合分区数据使用create view语句来成绩视图,对应的语法如下例:成绩stu数据库中的表'班级信息'中所有记录的视图View班级信息create view 班级信息as select * from 班级信息
查看视图内容:
select *from 班级信息视图T-sql语句重命名视图
1.使用sp_rename修改视图的名称
例:
Exec_rename 'View_班级信息','View_班级信息2'修改列:
exec sp_rename 'View_班级信息2.人数','总人数' 这个语句读作把视图View_班级信息2下的人数列改为总人数注意:对于表的所有操作,在表中同样可以使用创建视图方式2:使用图形化工具创建:略管理视图:向视图中插入记录例:
insert into View_学生信息
values('2','12','aa','w','云南')
注意:在视图中的数据更改,原表中的数据夜壶随着更改修改视图中的数据:使用视图可以修改数据
1.修改视图:
语法: alter view 视图名
as
select statement例:alter view 创建表
as
select 学号,成绩 from 成绩表注意:alter既能修改数据也能修改内容视图中不符合要求1的数据或是错误的数据,可以使用update语句进行修改例:修改视图view_班级信息2中的人数80的班级编号改为80update View_班级信息2
set 班级编号 ='28'
where 总人数=80删除视图:
drop View  视图名称删除多个视图
drop view 视图1,视图2,视图3...视图n带有条件的删除
例:delete from view_班级信息2 where 人数=80在创建视图后,如果不需要该视图,或想清楚视图定义以及相关联的权限,可以删除该视图

第七章:索引

1.索引:索引是对数据库表中一个或多个列的值进行排序的结果,索引有助于更快的获取信息,是用来定位的对表中的列是否创建索引,以及创建何种索引,对于查询的响应速度会有很大的差别,创建索引的列就是立即响应,而不创建索引的列则需要很长时间去访问在数据库系统中创建索引主要有以下作用:加快数据检索,保证数据的一致性,实现表与表之间的参照完整性,在使用group by order by字句进行查询时,利用索引可以减少排序和分组的时间索引是否必须:创建索引需要占用数据空间并花费一定的时间
建立使用会减慢数据修改速度创建索引要消耗一定的系统性能,因此要考察对某列创建索引的必要性选择创建索引的数据列:定义有主键和外键的列
在指定范围中快速或频繁查询的列
连接中频繁使用的列
需要按排序顺序快速或频繁检索的列索引的类型:按照索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引
1.聚集索引:聚集索引确定表中数据的物理顺序,当以某列作为关键字举例聚集索引时,表中数据以该字段作为排序工具,即索引的顺序决定了表中行的存储顺序,因此每个表只能有一个聚集索引2.非聚集索引:非聚集索引并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序,索引仅仅记录指向表中行的位置的指针,执行指针本身就是有序的,通过这些指针可以在表中快速定位数据设计索引,应该考虑以下数据库准则
:1.应该表如果建有大量索引,会影响insert update delete语句的性能2.避免对经常更新的表进行过多的所有,并且索引应该保持较窄
3.使用多个使用可以提高更新而数据量大的查询性能
对小表进行使用索引可能不会产生优化效果若创建了主键约束或唯一约束时,系统将字段的为建有这些约束的列创建聚集索引
当删除主键约束或唯一约束时,这些列上创建的聚集索引也会被字段删除
若不指定索引类型,SQLserver将使用非聚集索引作为默认的索引类型当同一个表中距离聚集索引和非聚集索引时,应先建立聚集索引
若先建立非聚集索引,在建立聚集索引时,系统会字段将非聚集索引删除,然后重新建立非聚集索引创建索引:
方式一:在图形管理工具建立索引:略方式二:SQL语句创建索引
语法:create
.....index 索引名 on 表名 unique 为表创建唯一索引
clustered:表示创建聚集索引,聚集的逻辑顺序决定表中对应行的物理顺序
nonclustered:创建非聚集索引
column:索引所基于的列例:为student表建立非聚集索引
create nonclustered index index_人工
on student(学号)聚集索引;
create unique clustered index index_单位部门
on student(学号)删除索引:drop index 表名.索引名
例如:drop index student.sno例:删除员工信息表的索引
drop index 员工信息表.index_单位部门
drop index 员工信息表.index_性别

SQLserver数据库教程相关推荐

  1. jsp连接sqlServer数据库教程、jsp连接sqlServer数据库报ClassNotFoundException异常

    jsp连接sqlServer数据库教程.jsp连接sqlServer数据库报ClassNotFoundException异常 参考文章: (1)jsp连接sqlServer数据库教程.jsp连接sql ...

  2. Net Core 6.0 webApi+sqlServer数据库教程实战

    Net Core 6.0 webApi+sqlServer数据库教程实战 教程前言 安装net core 环境 构建wepApi项目 操作数据库 接口调用 相关快速扩展 总结 教程前言 本教程从构建项 ...

  3. 从零开始的java连接sqlserver数据库教程

    通过java连接sqlserver数据库教程 使用的数据库是SQL Server 2008,实现利用java对数据库进行操作. 需要做的准备: SQL Server 2008.JDBC驱动包(sqlj ...

  4. VS2022连接sqlserver数据库教程

    目录 连接前准备 windows身份认证 sqlserver身份认证 连接前准备 我们使用Visual Studio2022 连接Sqlserver数据库,我们先为我们的项目添加微软自带的连接数据库的 ...

  5. c语言 mysql_bind,C语言连接SQLSERVER数据库

    第一步:配置ODBC.在配置ODBC时有用户DSN.系统DSN.和文件DSN三种方法,为了稳妥起见,采用系统DSN. DSN的名字叫LocalServer,帐号:sa,密码123456 第二步:打开V ...

  6. html通过jsp连接sql数据库数据,jsp连接sql Server数据库教程(示例代码)

    jsp连接sqlServer数据库教程: 首先讲下我用的工具版本以供参考: jar包:jtds1.3.1.jar  下载地址:点击进入 数据库:SQL Server2012 服务器:Tomcat8.0 ...

  7. PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)

    场景 SqlServer数据库中数据库表已经建立完成后期要想维护PD文件时可以直接从数据库中直接导出生成. 首先电脑中需要安装PowerDesigner. PowerDesigner165安装婆姐汉花 ...

  8. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务 参考博客:http://blog.csdn.net/zhyl8157121/article/d ...

  9. Android连接SQLServer详细教程(数据库+服务器+客户端)

    本文为原创,如果转载请注明出处 http://blog.csdn.net/zhyl8157121/article/details/8169172 其实之前发过一篇这样的博文http://blog.cs ...

最新文章

  1. Android SpannableString 给TextView 设置颜色,删除线等
  2. HtmlUnit、httpclient、jsoup爬取网页信息并解析
  3. Java项目:学生信息管理系统(java+SSM+JSP+layui+maven+mysql)
  4. 嵌入式学习笔记--网络打流补充笔记(iperf3应用)
  5. 浅析企业网站排名低可能是哪些原因导致的呢?
  6. 【写实与风格化】技术概述
  7. Linux基础命令---文本过滤colrm
  8. 计算机考到贴吧的试题,2014年全国计算机二级VB上机考试试题七
  9. mysql 数据库日志管理工具_mysql mysqlbinlog日志管理工具使用教程
  10. vim配置c语言开发环境变量,gcc配置和vim编程
  11. python xampp mysql_让XAMPP支持Python及Django
  12. bzoj 1295: [SCOI2009]最长距离(SPFA)
  13. 个人收藏的一些资料(一)Installshield制作友好的更新
  14. mysql可以建立个人数据库吗_mysql怎么建立数据库?
  15. 网络通讯协议——TCP/IP协议
  16. 乐高叉车wedo教案_24乐高教育wedo编程摩天轮教案
  17. MXF Operational Pattern 1a (OP1a)
  18. pandox怎么用_神器Pandoc的安装与使用 | Flyaway's Blog
  19. 游戏术语[持续整理]
  20. 全程15分钟 详解如何为MacBook Pro 15寸 加装固态硬

热门文章

  1. Python实现蒙塔卡洛思想
  2. 常用的excel操作小技巧--自己用的,仅供记录
  3. 护眼灯对孩子眼睛好吗?盘点最好的儿童护眼灯品牌
  4. bash:xxxx: 权限不够解决办法
  5. 基于spec评论作品
  6. Android拦截黑名单(简易版)
  7. pdf文件流转图片流方法(PDF文档所有页全部转换为图片 )
  8. vue3结合ts开发,导入vue文件,页面报红色的波浪线
  9. 情人节简单浪漫烟花html的代码
  10. [内附完整源码和文档] 基于Android的手机音乐播放器的设计与实现