sql sever 基础知识及详细笔记
时间:2022-03-15 04:33
第六章:程序数据集散地:数据库
6.1:当今最常用的数据库
sql server:是微软公司的产品
oracle:是甲骨文公司的产品
DB2:数据核心又称DB2通用服务器
Mysql:是一种开发源代码的关系型数据库管理系统
6.2:数据库的基本概念
6.2.1:实体和记录
实体:就是客观存在的事物
记录:每一行对应的实体,在数据库中,通常叫做记录
6.2.2:数据库和数据库表
数据表:不同类型组织在一起,形成了数据库表,也可以说表示实体的集合,用来存储数据。
数据库:并不是简单地存储这些实体的,还有实体的关系,这种关系要数据库来表示,关系是数据库的一部分
6.2.3:数据库管理系统和数据库系统
数据库管理系统:是系统软件,由一个相互关联的数据集合和一组访问数据构成。这个数据集合称为数据库,包含了很多有用信息,数据库管理系统是基本目标是提供一个有效的存储数据的环境,维护数据库。访问数据库信息。
数据库系统:是一个实际可运行的系统,可以对系统数据存储,维护,信用!
6.2.4:数据冗余和数据库完整性
数据冗余:数据重复现象
数据完整性:指数据库数据的准确性
6.3:登录sql server数据库
新建数据库连接:文件----连接对象资源管理器
服务器下拉框选择已经连接的服务器
选择身份验证方式
6.3.2:新建数据库登录名
安全性—登录名----新建登录名
输入密码,登录名-指定数据库
赋予操作限权
6.4:创建和管理sql server数据库
6.5.1:创建数据库
数据库文件
事物日志文件
文件组
步骤:选择新建数据库---输入名字—设置参数
6.5.3:数据库的管理和维护
分离和附加数据库
分离:右击数据库---任务 ---分离
附加:数据库右击—附加----然后添加
备份和还原:
备份:任务---备份----填写数据
还原:数据库右击—还原---目标数据库---设置位置
收缩数据库:
属性—选项----自动收缩
第七章:用表组织数据
7.1:表相关的基本概念
7.1.1:数据的完整性
检验每行数据是否符合要求
检验每列数据是否符合要求
1:实体完整性:
实体完整性:要求每行数据都反应不同的实体,不能存在相同的数据行 通过索引,唯一约束,主键约束或标识列可以实现实体完整性
域完整性:域完整性指给指定列输入有效性。
引用完整性约束:在输入或删除时,引用完整性约束保持表之间的定义关系
自定义完整性约束:用户自定义完整性来定义的规则
7.1.2:主键和外键
主键:如果在存储了很多行时,如何判断表中没有重复的数据行,这时需要的列,这个列的值用来标识表中的每一行,用于强制表实体完整性,这样的列就是主键。
一个表只能一个主键,并且不允许为空
外键:外键就是用来和主键建立引用关系,相对主表,就是从表的列,这个值要求与主键想对应,外键用来引用完整性,一个表可以有多个外键。
7.2:创建数据库
7.2.1:在数据库中创建表
步骤:单机数据库的表节点—奖显示数据表
7.2.2:数据类型
二进制数据类型 |
用来储存非字符的数据 |
Binary。Varbinary。image |
固定长度二进制 可变长度二进制 储存图像 |
文本数据类型 |
字符数据包括任意字母,符号或数字 |
Char,varchar,nchar,nvarchar,text,ntext |
固定长度非unicode字符 可变长度非unicode字符 固定长度unicode字符 可变长度unicode字符 储存长文本信息 储存可变长度的文本
|
日期和时间数据类型 |
用于储存日期 |
Datetime |
日期 |
数字数据类型 |
数字,正数,负数,分数 |
Int,smallint,tinyint,bigint,float,real |
整数,浮点型 |
货币数据类型 |
储存货币值 |
Money |
金钱 |
Bit数据类型 |
是/否 |
Bit |
布尔类型 |
7.3:完善表的设计结构
7.3.1:书否允许为空
数据库书否允许为空是一项约束,如果该列为空,则输入这行的时候,这一项可以不输入
7.3.2:建立主键
选择列---右击---然后设置主键(有个钥匙说明成功)
默认值:在不输入的情况下,指点的值!!
7.3.3标识列:
添加了标识列,就可以实现自增,要有种子和标识增量
7.5:建立表间的关系
7.5.1:如何建立标间的关系
在设计表的时候,可以添加关系(右键)
单击表和列最右侧,弹出建立关系,及主键对话框,
选择表,主键列对应的外键列,单击确定,并保存结构,这样就确立了关系
7.6:建立检查约束
Check约束:用来控制输入的值得范围的,(如果输入不在范围就报错)
7.8:删除数据库
右击数据库表,右击删除(如果有建立的关系,一定要先删除从表的数据,在删主表的数据)
第八章:用sql语句操作数据
8.1:Sql简介
8.1.1:Sql做什么
数据需要一套指令集,能够识别指令,执行相应的操作并微程序提供数据。
Sql语言:是针对数据库的一门语言,他可以创建数据库,数据表,可以进行增 删 改 插,可以创建视图,存储过程
8.1.2:sql组成
DML 用来插入,修改,删除,数据库,(关键词:insert,update,delete)
DDL:用来建立数据库,数据库对象和定义其列,以create完成指令,如create table(建表)
DQL用来查询数据库的,如SELECt(查询关键词)
DCL用来控制数据库组件许可
8.1.4:SQL中的运算符
+ |
加 |
- |
减 |
* |
乘 |
/ |
取商 |
% |
取余 |
= |
赋值运算符,等于 |
= |
比较运算符 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
<> |
不等于 |
And |
并且 |
Or |
或者 |
Not |
逻辑运算符 不是 |
8.2:使用T-Sql插入数据
8.2.1:使用Insert插入数据
语法:insert 【into】 表名 (列名) values(列值)
8..2.2:一次插入多行数据(不是真正意义上的插入,是在其他表赋值)
Insert select(必须先创建表)
语法:insert into 新表名(列名) select 列名(旧表中的列)1,2,3 from 旧表
Select into (会自动创建表)
Select 旧表的列1,列2,列3 into 新表 from 旧表
插入标识列: select identity(数据类型,种子,增长量) as 别名 into 新表 from 旧表
通过Union 插入多条数据
Insert 表名(列名)
Select 列值 union
Select 列值 union
Select 列值 union
最后一个不要union
8.3:使用更新数据
Update 表名 set 列名=值 [where 条件]
8.4:使用删除数据
1:使用DELETE删除数据
语法:DELETE 【from】 表名 【where 条件】
2:使用truncate + table +表名 彻底删除
第九章:数据查询基础
T-Sql查询基础
数据在接收查询请求时,可以理解为逐行判断,判断是否符合查询条件,如果符合,就抽取出来,形成一个类似于表的结构,这就是记录集
9.1.2:使用select查询
语法:select 列名(或者*全部) from 表名 where +条件 order by +列名(asc/desc)
查询所有:select * from 表名
查询部分列:select 列名1,列名2,from 表名 where +条件
在查询中取别名:select 列 as +别名 列的别名
在查询中取别名:select 表 as +别名 表的别名
查询空值:select 列名 from 表 where 列名(另一个) is null
查询中使用常量:select 姓名=Sname ,地址=address as 学校 from 表名
查询返回的行数:select top 5 name,address from 表 where sex=0
查询排序
9.2.1:如何使用order by
Order by+列名 desc /asc
在查询中使用函数
9.3.1:字符串函数
Charindex |
查找指定字符串其始位置 |
Select charindex (‘值’,字符串,1)返回数字 |
Len |
返回字符串长度 |
Select len (字符串) |
Ltrim |
清除左空格 |
Select trim (字符串) |
Ritrim |
清除右空格 |
Select ritrim (字符串 |
Right |
重右边截取字符串 |
Select right(字符串,3)(3表示截取长度) |
Replace |
替换一个字符串的字符 |
Selct replace (字符串,替换额字符,替换为那个字符) |
Stuff |
在字符串中删除一定长度,在该文置插入另一个 |
Select stuff(之前的很字符串,替换的坐标,替换的长度,替换为什么) |
|
|
|
9.3.2:日期函数
Getedate() |
取得当前系统时间 |
Select getdate() |
Dateadd()
Datediff |
将制定的值添加到日期的指定日期后面 |
Select date (mm,4,日期 返回:)相当于月份增加4,最后返回日期 |
Datename |
两个日期指定位置的差 |
Select datediff(mm,日期一,当前日期) |
dateprat |
日期以字符串的形式显示 |
Select datename(dw,日期。返回日期的形式(dw,表示周)) |
|
日期中指定的部分显示出来 |
Select datepart (day,日期),返回 日 |
9.3.3:数学函数
Rand |
返回0~1的随机数 |
Select rand() |
Abs |
取绝对值 |
Select abs(数值) |
Celing |
向上取整 |
|
Floor |
向下取整 |
|
Power |
去表达式的幂值 |
Select power(5,2) 五的二次方 |
Round |
将表达式四舍五入 |
|
Sign |
正数取1,负数取-1,0取0 |
Select sign (-23)返回-1 |
Sqrt |
取浮点的平方根 |
Select sort(9) 返回3 |
第十章:模糊查询和聚合函数
10.1:模糊查询
10,1.1:通配符
_ |
输入一个字符 |
A like ‘C_’ cs/cd 都符合 |
% |
输入任意长度 |
B like ‘o%’ const/coke 都符合 |
[ ] |
括号中表示范围值 |
C like ‘9wo[1-2]’ 9wo1/9wo2 f符合 |
[^ ] |
不在 括号里面 |
D like ‘9w0[^1-2]’ 9w03/9wo7符合 |
[01] |
表示值是0或者1 |
C like ‘[01]’, |
10.1.2:使用like 进行模糊查询
例:select * from student where sname like ‘张%’ 表示后面任意
例:select * from student where sname like ‘%张%’ 只要有张字符就合法
Select * from student where sex like ‘[01]’, 表示性别可以选择0 或者 1
In来进行匹配
Select * from student where gradeId in (“0” , ”1”), 表示gradeId的值是0或则1都符合条件
10.1.3:使用between and 在某个范围找
Select * from scroe where score (not) between 60 and 80
使用in在列举值中查询
例:select sname as 学生姓名,from student where address in (’北京’,’上海’,’广州’) order by address
10.2:T-sql中的聚合函数
(group by)用于对列进行分组,前面必须先select 后面有列(此列),才能使用 group by 加此列
Having也是相当于where条件关键词:但having用于使用了聚合函数的表达式进行加条件 having +用于聚合函数使用的表达式(条件)
Sum函数
SUM(列名) 返回一个值,返回的是此列名的所有值的和
AVG()函数
AVG(列名) 返回的是此列的所有的值的平均值
MAX() 和 MIN()函数
max返回此列所有值得最大值,min返回此列所有值得最小值
第十一章:连接查询和分组查询
11.1:分组查询
11.1.1:使用group分组查询
分组查询就是把列进行不同值得分组,然后在分组的基础上分开查询! 分组查询一般结合着聚合函数一起使用!
例子(语法):select couseID ,(第二个分组列) AVG(Score) as 别名 from 表名 group by couseID,(第二个分组列)
注意:如果是多分列的话,直接在couseID后面和group by 后面的cousrID加列就行了
如果使用了group by 关键词查询,在select 后面指定的列是有限的,允许:
要分组的列
值得表达式 :如聚合函数
11.1.2:使用having进行分组后筛选
Having和where条件类似,不过having条件只能用于group by 分组过后进行加条件
顺序:(where group by having)
11.2:多表连接查询
11.2.1:多表连接查询分类
内连接查询
内连接查询一般用于两个表有朱外键关系的表,(更具表中的共同的列匹配)
语法1:select 列,列 from 表名,表名 where 表.列名=表.列名(两个列有朱外键关系)
语法2:select 列,列 from 表名 inner join 表名 on表.列名=表.列名(两个列有朱外键关系)
(如果是多个表,直接在列后面加,或者在后面加inner join on 条件)
外连接查询
外连接查询至少返回表中的所有记录,根据匹配的有选择的返回另一章表的记录
(一般,如果主表中有的记录可能没有,也会以null的形式返回,一主表为中心,返回主表那么多条数据)
左外链接:
语法:select 列,列 from 表名 left join 表名 on表.列名=表.列名(两个列有朱外键关系)
右外链接:
语法:select 列,列 from 表名 right join 表名 on表.列名=表.列名(两个列有朱外键关系)
(一般以from后面的表为主表)外连接查询,以主表为中心,返回主表那么多条数据你,即使有的数据可能没有,以null显示
如果要给列的值另去别名(例如要把性别为0或1变成男或女)
u Case when 列 =值 then ‘别名值’ when 列 =值 then ‘别名值’ end
第十四章:使用ADO.NET访问数据库
14.1:ADO.NET概述
ADO.Framwork组件:NET.Framework数据库提供 程序专门的数据处理及快速地只进,只能访问数据设计的组件.使用它可以连接数据源,执行命令和检索结果,直接对数据源进行操作,.
DataSet:是专门为独立任何数据源的数据访问而设计的.使用它,可以不必直接和数据源打交道,大批量的独立操作,也可以将数据绑定在空件上.
ADO.Framwork数据提供包含量访问各种数据库的对象,它是和数据类型有关的,目前有四种类型的数据提供程序:
导入命名空间:Using system.Data.SqlClient 才能使用数据库相关的东西
Connetion |
建立数据源的连接功能 |
Commend |
对数据库执行命令(比如sql语句) |
DataReader |
从数据源中读取只进且只读的数据源 |
DateAdpter |
用数据源填充DateSet并解析更新 |
14.2:使用Connetion对象
导入命名空间:using System Data.sqlclient
Connection对象::是NET.Framwork数据提供程序核心对象之一,它的作用是建立应用程序与数据库的连接
Connection对象的常用属性和方法
属性 |
说明 |
ConnectionString |
设置/获取应用程序连接数据库的连接字符串 |
方法 |
说明 |
Void open() |
使用connectionString属性打开数据库连接 |
Viod Close() |
关闭数据库连接 |
建立数据库与应用程序建立联系三步走:
- 定义连接字符串(不同的数据库连接,格式不同)
- Data Source =服务名;Initial CataLog=数据库; user id =用户名; pwd=密码
- 创建Connection对象 使用定义好的字符串创建Connection对象.
- 打开与数据库的连接:调用Connection对象的Open() 方法打开数据库连接. Connection.open();
14.3:异常处理
Try-catch-finally:
Try:一般把容易出现问题的代码的语句放在try结构里面.
Catch:可以补货异常,在catch(exaption e) ------输出e.message
Finally:一定会执行的代码,一般把关闭数据库连接的代码放在里面
14.4:使用Commend对象
例子:SqlCommend commend=new sqlcommend(string sql, sqlconnection conn);
Commend对象的主要属性和方法
|
|
属性 |
说明 |
Connection |
Commend对象使用数据库连接 |
CommandText |
执行sql语句 |
方法 |
说明 |
IntExcuteNonQuery() |
执行不返回的语句,如增,删,改 |
sqlDataReader ExcuteReader() |
执行sql语句,返回dataReader对象,用于查询 |
Object ExcuteScalar() |
返回单个值,,如执行count(*),返回首行的第一列 |
第十五章:使用ADO.NET查询操作数据
15.1:String和StringBuffer
创建:SringBuffer stb=new StringBuffer();
例子: Stb.Append(“hello”)---------stb.Append(“world”)
可以节省空间,应为在后面用AppendLine追加字符串的时候不会从新创建空间
String Buffer常用的属性和方法
属性 |
说明 |
Capacity |
获取或设置可包含在当前对象所分配的内存中的最大字符个数 |
Lenth |
获取当前对象长度 |
方法 |
说明 |
String Budffer AppendFroma(string fromat,object arg0,object arg1) |
添加特点格式的字符串 |
StringBuffer Insert (int index,string Value |
在指定的位置插入指定的字符串 |
String Buffer Append (string value) |
在尾部追加字符串 |
Remove (int startInedx,int length) |
移除指定字符串 |
To.String() |
Z转化为字符串格式的字符 |
15.2:查询数据
Commend对象:ExcuteReader()方法,返回的是dataReader对象,通过DataReader就可以从据库读取多条数据了.
ADO.NET的DataReader对象可以从数据库中检索,只读,只进的数据流,每次从数据源中提取一条记录!
SqlDataReader reader =c ommend.ExcuteReader();
DataReader对象的主要属性和方法
属性 |
说明 |
HasRows |
判断是否读到记录,reader.HasRows这个会返回一个布尔类型的值 |
FieldCount |
当前的行数 |
方法 |
说明 |
Bool Read() |
Reader.reader() 读取数据库中的记录,返回true/false |
Void Colse() |
关闭DataReader对象 |
DataReader对象的用法
创建一个DataReader对象需要调用Commend对象的ExcuteReader() 方法,返回值是一个DataReader对象,可以调用Reader()方法读取一行记录
步骤:
- 创建Commend对象
- 调用Commend的对象ExecuteReader方法返回一个DataReader对象.假设已创建一个Commend对象,名为commend,
- 调用Datareader的Reader()方法逐行读取结果集的记录,若能读取到数据,则返回true,否则返回false----- dataReader.Reader();
- 读取当前行的某一列的数据. 象数组一样,用方括号一样来读取一列的值,如(Type) Reader[“StudentName”];
例:(string)dataReader[“StudentName”];
- 关闭DataReader对象,调用它的Close()方法.
DataReader.Close()
Return comm.ExcuteReader(CommendBEhavior.CloseConnection)
如果在()里面加了CommendBEhavior.CloseConnection如果关闭了这个reader.Close() , conn.Close()也将关闭了
15.3:更新数据
EXcuteNonQuery() 此方法是用来进行增,删,改 用comm. EXcuteNonQuery()方法,
15.3:commend对象的ExcuteNonQuery()方法用于执行指定的sql语句,如update,dalete,它返回的是受影响的记录行数,现在使用Commend对象的ExcuteNonquery();
步骤:
- 创建Connection对象Conn.
- 编写要执行的sql语句.
- 创建Commend对象
- 执行ExcuteNonquery() 注意:完成操作后不要忘记忘记关闭了conn对象.
- 根据ExcuteNonquery() 方法的返回值进行后续的处理,如果返回值小于或等于0,说明没有记录影响!!