您的位置:首页 > 博客中心 > 数据库 >

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()

关闭数据库连接

建立数据库与应用程序建立联系三步走:

  1. 定义连接字符串(不同的数据库连接,格式不同)
  2. Data  Source =服务名;Initial  CataLog=数据库;  user  id  =用户名; pwd=密码
  3. 创建Connection对象    使用定义好的字符串创建Connection对象.
  4. 打开与数据库的连接:调用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()方法读取一行记录

步骤:

  1. 创建Commend对象
  2. 调用Commend的对象ExecuteReader方法返回一个DataReader对象.假设已创建一个Commend对象,名为commend,
  3. 调用Datareader的Reader()方法逐行读取结果集的记录,若能读取到数据,则返回true,否则返回false----- dataReader.Reader();
  4. 读取当前行的某一列的数据.    象数组一样,用方括号一样来读取一列的值,如(Type) Reader[“StudentName”];

例:(string)dataReader[“StudentName”];

  1. 关闭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();

步骤:

  1. 创建Connection对象Conn.
  2. 编写要执行的sql语句.
  3. 创建Commend对象
  4. 执行ExcuteNonquery()  注意:完成操作后不要忘记忘记关闭了conn对象.
  5. 根据ExcuteNonquery()  方法的返回值进行后续的处理,如果返回值小于或等于0,说明没有记录影响!!

 

热门排行

今日推荐

热门手游