MSSQL Server基础知识点梳理

数据库 1921 0 2013-02-26

MSSQL Server基础知识点梳理

注意:这是我学MSSQL Server的一些学习笔记,知识点繁多,有点琐碎,不过对于0基础的人看看还是不无裨益的

 

数据库:Database DB 

1 用于帮助我们安全的存储数据(需要凭证)

2 当我们需要数据,数据库可以帮我们快速准确的找到数据

 

数据库管理员:DBA

表:相当于货架,用于对数据进行分类,我们的货物就相当于数据

数据库中可以包含多个表,一个表中可以有很多数据

 

关系型数据库:所谓关系就是表

现在主流的数据库是关系数据库系统 不面向对象

 

DBMS(DataBase Management System,数据库管理系统)帮我们操作数据库,存数据,取数据,修改数据等

 

平时我们说的“数据库”可能有两种意义:

1)DBMS 比如:MSSQLSERVER ORACLE

2)存放一堆数据表的一个仓库

 

常见数据库:

Oracle 功能最强大的数据库可以在多种操作系统上运行

MSSQLServer 使用最广泛的数据库(微软的操作简单)中小型企业用的数据库

授权方式:①连接数 ②按服务器的cpu数  只能在Windows上运行

MYSQL:开源的数据免费的,可以多个平台上运行 php/jsp

Access:就一个文件,部署时不需要复杂的安装

SQLite:轻量级数据库,很小,一般用于嵌入式开发

SQLServerCE:用于WindonsPhone嵌入式开发

 

SQL:是一种关系数据的查询语言

MSSQLServer:在我们的机器上是以服务的形式存在的查服务运行→Services.msc

装好SQLServer后的服务,SQLServerMSSQLSERVER)就是我们的数据库服务

 

服务器名称:ip地址\数据库的实例名

Ip:如果连的是本机可以是下面几项:

1)127.0.0.1

2)localhost(其实就是127.0.0.1)

3). 一个点代表本机

 

实例名:我们一台机器上可以装多个数据库,那么怎么区分这些数据库?

当你在装第一个数据库的时候,一般情况下这个数据库为默认实例名,就是不用写实例名。如果括号中是MSSQLSERVER字样,就代表默认实例名,在连接时,只需要写ip地址就可以了,不需要指定数据库,如果不是,就需要在ip地址后面加\实例名,指明你要连接哪个数据库

Windows身份验证:就是用你登录Windows的账户去登录数据库

SQLServer 身份验证:就是使用设置好的用户名和密码进行登录。超级管理员:sa(装好数据库之后,sa是被禁用的)

 

如果.能连接上,但ip连接不上,检查以下几项:

1) 检查 SQL Server Browser服务是否已启动

2)开始→程序→MSSQL Server2008→SQL Server配置管理器,确定TCP/IP已启动

 

当发现Windows身份验证能登录,但sa登录不上

1)检查sa是否启用

2)在数据库服务器上右键→属性→安全性→SQL Server和Windows身份验证模式

 

创建一个数据库,至少生成了两个文件:

.mdf主文件 .ldf日志文件

一般情况下,一个系统要创建一个数据库

 

表是由行和列组成的,一个表一般表示一个实体或一个对象的集合

列:又叫做字段或属性用来描述实体的,列用来表示实体的特征

 

数据类型:

Char定长的字符如char(10)长度为10的定长字符,如果存入的数据不足10位,则用空格补齐。如:邮编可以用这种类型  10表示char的长度

Varchar可变的字符型如:varchar(10)这个字段最多可以存10个字符,如果不足10个字符也不会补空格,如果超过10个字符就出错。  10表示最大长度

在不加n的类型中,一个英文字母占一个单位长度,一个中文或中文符号占两个单位长度。

Nchar/Nvarchar 使用了Unicode(双字节码)编码。如:Nchar(10)中文和汉字总共可以写10个。(英文可以写10个,汉字也可以写10个,数字也可以写10个)

 

主键:在一个表,一般我们都会有一个字段,这个字段首先不能为空,并且必须是唯一的,那么这个字段就可以唯一的确定一条记录。

 

主键的设置:

1)选取业务主键

2)逻辑主键

设置主键的方法:

右键表,打开表设计器

 

 外键:

为什么要设置外键

造成了数据冗余

修改时容易造成漏改;

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

在上面的两个表中,我们在tStu表中用tTea表的主键来作为一个字段,这样就建立了一个外键。tid作为主键的表叫做父表或主表,tid作为外键的表叫做子表。

这两个表中的tid字段一旦确立了主外键关系,就有如下要求:

1)向子表插入数据时,tid字段中的值必须在主表中已经存在;

2)删除主表的数据时,要先保证子表已经没有任何一条数据中的外键是该主表中数据值

建立外键的方法:在子表的设计器上右键→关系,就可以添加一个关系

 

SQL语句:

SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言

T-SQLMSSQL的语句

SQL语句中字符串用单引号。

SQL语句是大小写不敏感的

 

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

Create 新建 Drop 删除 Alter 修改(对于数据库,表的操作)

Insert 插入 Update 修改 Delete 删除 (对于表中的数据的操作)

 

--在sql查询分析器中是注释的意思

Use数据库名 用写代码的方式切换数据库为当前数据库

 

创建数据库

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

注意:主文件名要写成名字_data.mdf  日志名字要写成  名字_log.ldf

主文件最小要3MB

 

删除数据库:Drop Database 数据库名称;

创建表的基本语法:

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

删除表:Drop Table 表名

注意,删除表的时候一定用(use)要先把此表所在的数据设置为当前数据库

 

Select语句的基本语法:

查询:Select * from 表名 *查询所有列,可以用列名代替

Where+条件,用于过滤数据

关系运算符:<,>,>=,<=,=,!=(或<>)

逻辑运算符:and(相当于c#中的&&) or(相当于c#中的||)

Insert 插入数据

语法:

Insert into 表名(列名1,列名2……列名n)

Values(值1,值2……值n)

默认情况下,不允许对自动增长列赋值

省略表名后的(列名值)values后()里的值必须把所以列名下的值都填上

 

Update 数据更新

语法:

Update 表名 set 要更新的字段1=值1,要更新的字段2=值2,……

Where 条件

注意:一定要加where 条件,不加将全部更新,很可怕

 

Delete 删除表数据

Delete from 表名

Where+条件

注意:写删除时一定要想着where

 

Truncate table 表名

把数据清空,并把表复位,也就是说自动增长列从初始值开始

 

写代码添加约束:

alter table

add constraint 约束名缩写_表名健名(添加该约束的字段)

 

主键约束(PK) primary key constraint 唯一且不为空

唯一约束 (UQ)unique constraint 唯一,允许为空,但只能出现一次

默认约束 (DF)default constraint 默认值

检查约束 (CK)check constraint 范围以及格式限制

外键约束 (FK)foreign key constraint 表关系

 

主键约束

alter table 表名

add constraint PK_表名 primary key(添加该约束的字段)

 

唯一约束:

设计→索引/键→添加→改类型为唯一健,改名字为  UQ

alter table 表名

add constraint UQ_表名 unique(添加该约束的字段)

 

添加默认约束:

设计→选定要设默认约束的行→常规(默认值或绑定)

alter table 表名or

add constraint DF_表名 default ('默认约束字符')for (添加该约束的字段)

 

添加检查约束:

设计→选定要设默认约束的行→右键(CHECK约束)→添加→常规(表达式)

alter table 表名

add constraint CK_表名 check(添加该约束的条件)

外键约束

在子表的设计器上右键→关系→常规(表和列关系) 

alter table 表名

add constraint FK_子表名 foreign key(添加子表该约束的字段)references 父表(添加父表该约束的字段)

 

删除约束:

alter table 表名

drop 约束名缩写_表名 

 

列名可以通过as或 空格 或列名=字段名来重命名

 

selectprint都可以进行输出显示,他们的区别,select在结果,print在消息,select可以调用函数,可以进行运算,print只能显示文本

 

Top+数字表示获得前n条数据,也可以按百分比取,当按百分比取不是整数时,向上取整

Distinct 去除重复数据

如果加了distinct是先进行排序(按拼音顺序),再去重复行,再显示

MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量)--对null值不计算

Select max(sage)  from tStu where sage between 20 and 40

(between…and…相当于>=20 and <=40)

Select * form tStu where sAge=( Select min(sage) from tStu where sage between 20 and 40)  子查询

 

Max min 可以找日期的最大最小值

Select max(birthday)  as ‘年龄最小是学生的出生日期’ from tStu

 

in (值1,值2,…值n)

Select * from tStu where sname in (‘张三’,’李四’,’王五’)

 

模糊查询

通配符:% 可以表示0个或多个任意字符

注意:如果要使用通配符进行查询,就不要=(精确匹配)要用like

找出所以姓张的学生

Select * from tStu where sname like ‘张%’

 

通配符:_可以表示1个字符

通配符:[]只匹配一个字符,并且这个字符必须是[]范围内的 [0-9] [a-z] [abc] [^9]

 

空值处理

SQL 里的null表示不知道,所以select 1+null   显示的结果是null

注意:判断一个值是否为空,为空用is 不能用= 不为空用 is not null

 

order by +排序的字段名

多重排序,用逗号隔开

 

 

分组

Group by+分组字段 程序会对这个字段先进行排序,然后对这个字段值相同的项分别进行聚合函数的运算

如果语句中有分组语句,那么select后只能有group by后的字段和聚合函数

执行顺序:先找出符合条件的数据(where)然后对数据进行分组字段的排序,再分别对分组字段相同的数据进行计算聚合函数

Select classid, count(*) as ‘班级人数’from Stu group by Classid

Selsect classid as ‘班级名称’,avg(age) as ‘平均年龄’ from Stu group by Classid

Group by子句必须放到where语句的之后 ,where是对数据先筛选,再用group by进行分组,having 是对分组后的数据再次进行筛选

1)Selsect classid as ‘班级名称’,avg(age) as ‘平均年龄’

Where sex=’男’

from Stu group by Classid

 

2)Selsect classid as ‘班级名称’,avg(age) as ‘平均年龄’ from Stu group by Classid

Having age>20

 

3)Selsect classid as ‘班级名称’,avg(age) as ‘平均年龄’

Where sex=’男’

from Stu group by Classid

having age>20

 

简单的结果集联合:union

select tName,tSex from teacher union

select sName,sSex from student

union(排序,去重,联合)、union all(仅仅联合)

进行联合时需要注意:

1)每个结果集必须有相同的列数

2)每个结果集的列必须类型相容

 

Select * into 新表名 from 旧表名

把现有表的数据插入到新表(新表不存在)该语句会自动创建一个和原有表结构相同的新表

注意:只能复制表的结构,数据类型,约束不能复制

 

把现有表的数据复制到一个已存在的表

Insert into 已存在的表名 select * from 原表名

 

对于自动增长列,一定要先把控制它打开了,再insert into

Set identity_insert 复制到的表 on

 

Charindex 查找第一个参数在第二个参数中的位置,第三个参数为查找的起始位置

下标从1开始,返回0说明没有找到,里面的参数可以由表中的字段直接代替

Replace 替换 第一个参数中,用第三个参数替换第二个参数

LEN() :计算字符串长度(字符的个数。)

datalength();计算字符串所占用的字节数,不属于字符串函数。

LOWER() 、UPPER () :转小写、大写

LTRIM():字符串左侧的空格去掉

RTRIM () :字符串右侧的空格去掉

LTRIM(RTRIM('         bb        '))

LEFT()、RIGHT()  截取取字符串

 

Stuff

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

Substring

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

Dateadd

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

 

DATEDIFF ( datepart , startdate , enddate )

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理
黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

SQL里,+ ,无论是什么类型,只要是数字就能加

如果两边都是字符串,+ 表示相连

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

 

类型转换

两种方法:

1)CAST ( expression AS data_type)    (待转换的数据/字段 AS 目标类型)

2)CONVERT ( data_type, expression)   (目标类型,待转换的数据/字段)

注意:日期类型的转换,要用convert 因为后面有类型的选择

CONVERT ( data_type, expression,[style])

select convert(varchar(20),getdate(),102)

Style的格式,查sql帮助。

 

空值的处理

isnull(表达式,值) :如果表达式不为空则返回表达式,为空返回值。

在进行聚合函数运算时,如果哪列值为null,则不参与运算

黑马程序员鈥斺擬SSQL <wbr>Server基础知识点梳理

------- Windows Phone 7手机开发.Net培训、期待与您交流! ------   详细请查看:http://edu.csdn.net/heima

上一篇:MSSQL数据库的字段类型总结

下一篇:完全彻底的卸载MySQL

讨论数量:0

请先登录再发表讨论。 2024-04-18

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链