注意:这是我学MSSQL Server的一些学习笔记,知识点繁多,有点琐碎,不过对于0基础的人看看还是不无裨益的
数据库:Database
DB
1 用于帮助我们安全的存储数据(需要凭证)
2 当我们需要数据,数据库可以帮我们快速准确的找到数据
数据库管理员:DBA
表:相当于货架,用于对数据进行分类,我们的货物就相当于数据
数据库中可以包含多个表,一个表中可以有很多数据
关系型数据库:所谓关系就是表
现在主流的数据库是关系数据库系统 不面向对象
DBMS(DataBase Management System,数据库管理系统)帮我们操作数据库,存数据,取数据,修改数据等
平时我们说的“数据库”可能有两种意义:
1)DBMS 比如:MSSQLSERVER ORACLE
2)存放一堆数据表的一个仓库
常见数据库:
Oracle 功能最强大的数据库可以在多种操作系统上运行
MSSQLServer 使用最广泛的数据库(微软的操作简单)中小型企业用的数据库
授权方式:①连接数
②按服务器的cpu数
MYSQL:开源的数据免费的,可以多个平台上运行 php/jsp
Access:就一个文件,部署时不需要复杂的安装
SQLite:轻量级数据库,很小,一般用于嵌入式开发
SQLServerCE:用于WindonsPhone嵌入式开发
SQL:是一种关系数据的查询语言
MSSQLServer:在我们的机器上是以服务的形式存在的查服务运行→Services.msc
装好SQLServer后的服务,SQLServer(MSSQLSERVER)就是我们的数据库服务
服务器名称: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位,则用空格补齐。如:邮编可以用这种类型
Varchar可变的字符型如:varchar(10)这个字段最多可以存10个字符,如果不足10个字符也不会补空格,如果超过10个字符就出错。
在不加n的类型中,一个英文字母占一个单位长度,一个中文或中文符号占两个单位长度。
Nchar/Nvarchar 使用了Unicode(双字节码)编码。如:Nchar(10)中文和汉字总共可以写10个。(英文可以写10个,汉字也可以写10个,数字也可以写10个)
主键:在一个表,一般我们都会有一个字段,这个字段首先不能为空,并且必须是唯一的,那么这个字段就可以唯一的确定一条记录。
主键的设置:
1)选取业务主键
2)逻辑主键
设置主键的方法:
右键表,打开表设计器
为什么要设置外键
造成了数据冗余
修改时容易造成漏改;
在上面的两个表中,我们在tStu表中用tTea表的主键来作为一个字段,这样就建立了一个外键。tid作为主键的表叫做父表或主表,tid作为外键的表叫做子表。
这两个表中的tid字段一旦确立了主外键关系,就有如下要求:
1)向子表插入数据时,tid字段中的值必须在主表中已经存在;
2)删除主表的数据时,要先保证子表已经没有任何一条数据中的外键是该主表中数据值
建立外键的方法:在子表的设计器上右键→关系,就可以添加一个关系
SQL语句:
SQL
T-SQL:MSSQL的语句
SQL语句中字符串用单引号。
SQL语句是大小写不敏感的
Create 新建 Drop 删除 Alter 修改(对于数据库,表的操作)
Insert 插入 Update 修改 Delete 删除 (对于表中的数据的操作)
--在sql查询分析器中是注释的意思
Use数据库名 用写代码的方式切换数据库为当前数据库
创建数据库
注意:主文件名要写成名字_data.mdf
主文件最小要3MB
删除数据库:Drop Database
数据库名称;
创建表的基本语法:
删除表: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(添加该约束的字段)
唯一约束:
设计→索引/键→添加→改类型为唯一健,改名字为
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或 空格 或列名=字段名来重命名
select和print都可以进行输出显示,他们的区别,select在结果,print在消息,select可以调用函数,可以进行运算,print只能显示文本
Top+数字表示获得前n条数据,也可以按百分比取,当按百分比取不是整数时,向上取整
Distinct 去除重复数据
如果加了distinct是先进行排序(按拼音顺序),再去重复行,再显示
MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量)--对null值不计算
Select max(sage)
(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)
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
注意:判断一个值是否为空,为空用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('
LEFT()、RIGHT()
Stuff
Substring
Dateadd
DATEDIFF ( datepart , startdate , enddate )
SQL里,+ ,无论是什么类型,只要是数字就能加
如果两边都是字符串,+ 表示相连
类型转换
两种方法:
1)CAST ( expression AS
data_type)
2)CONVERT ( data_type,
expression)
注意:日期类型的转换,要用convert 因为后面有类型的选择
CONVERT ( data_type, expression,[style])
select convert(varchar(20),getdate(),102)
Style的格式,查sql帮助。
空值的处理
isnull(表达式,值) :如果表达式不为空则返回表达式,为空返回值。
在进行聚合函数运算时,如果哪列值为null,则不参与运算
------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------ 详细请查看:http://edu.csdn.net/heima上一篇:MSSQL数据库的字段类型总结
下一篇:完全彻底的卸载MySQL
讨论数量:0