黑马程序员—学习笔记之SQL数据库概述、SQLServer的使用
2011-11-29 10:02
369 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
一、数据库概述
(一)平时谈到“数据库”的两种含义
1.MYSQL、MSSQLServer、Oracle等某种DBMS(DateBase Management System,数据库管理系统)
2.存放一堆数据表的一个分类(Catalog)
(二)不同品牌DBMS特点:
1.MYSQL:运行速度快,数据存储完整性不高
2.MSSQLServer:与.net结合的非常好
3.DB2、Oracle:大型数据库,安全性、处理速度、处理变化量非常大的程序
4.Access:可以当文件来用,不需要安装服务器
(三)MSSQLServer
1.SQLServer包括两种
a)MSSQLServer:MicroSoft SQL Server,由微软公司开发的
b)Sybase:与微软一同合作的开发的DBMS
c)两者是在同一个基础上开发出来的两个分支
(四)数据库运行
绝大部分的数据库都需要数据库服务器才能运行,Access、SQLServerCE除外。学习和开发是连接本机数据库,上线运行时数据库运行在单独的服务器上。
二、数据库中的概念
(一)Catalog(分类)(又叫数据库DateBase<MSSQLServer中说法>、表空间TableSpace<Oracle中的说法>),将不同的数据放在不同的数据库里
1.作用
a)便于对各个Catalog进行个性化管理
b)避免命名冲突
c)安全性更高
(二)Table(表)
不同类型的数据放在不同的表中。不同的表根据放的数据的不同进行空间的优化。
(三)Column(列)或Field(字段)
(四)PrimaryKey(主键)
主键是数据行的唯一标识。不会重复的列才能当主键。表可以没有主键,但会变得非常难处理。因此没有特殊理由都要设定主键。
1.主键的两种选用策略:
a)业务主键:使用有业务意义的字段做主键。如身份证号、工号。
b)逻辑主键:使用没有任何业务意义的字段做主键。完全给程序看的,业务人员不会看的。如流水号。很难保证业务主键不会重复、不会变化(如账号升位),因此,推荐使用逻辑主键。逻辑主键通常要隐藏。
(五)ForeignKey(外键)
外键是该表是另一个表之间联接的字段(外键必须为另一个表中的主键),其用途是保证数据的完整性。
三、SQLServer的管理
(一)常用字段类型:bit(可选值0、1)、datetime、int、varchar(按字节存储)、nvarchar(按字符存储、汉字用nvarchar)
1.char和varchar区别:char为定长,不足部分用空格补足
2.varchar和nvarchar的区别:varchar按字节存储,nvarchar按字符存储。如varchar(20)可以存储10个汉字,而nvarchar(20)可以存储20个汉字(一个汉字两个字节)。
二、SQL语句入门
(一)SQL语句
SQL语句是和DBMS“交谈”专用的语句,不同的DBMS都认SQL语法
1.特点
a)SQL语句中表示字符串用单引号
b)SQL语句是大小写不敏感的。不敏感是指SQL关键字,字符串指还是大小写敏感。
c)创建表、删除表可以手工完成,也用SQL语句完成
2.分类
1.DDL(数据库定义语言,Data Definition Language):对表进行定义
CREATE TABLE --创建表
DROP TABLE --删除表
ALTER TABLE --修改表
2.DML(数据库操作语言,Data Manipulation Language):对数据进行操作,不影响表结构
SELECT --检索数据
DELETE --删除数据
INSERT --插入数据
UPDATE --更新数据
3.DCL(数据库控制语言,Data Control Language):用于设置或修改数据库用户权限
GRANT --授予权限
REMOVE --撤销权限
DENY --拒绝权限
(二)主键选择
1.SQLServer中常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)
a)标识列:用标识列实现自增可以避免并发等问题。将字段的“是标识列”设置为“是”,一个表只能有一个标识列。
b)Guid算法:一种可以产生唯一标识的高效算法。使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证无论是同一台计算机还是不同计算机每次产生的GUID不会重复。 SQLServer中生成Guid的函数newid(),.Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。
2.两种类型对比
a)int自增字段优点:占用空间小、无需开发人员干预、易读;缺点:效率低、数据导入导出很痛苦
b)Guid优点:效率高、数据导入导出方便;缺点:占用空间大、不易读
c)业界主流倾向于使用Guid
(三)数据插入(Insert)
1.Insert语句可以省略表名后的列名,如insert into Person1(Number,Name,Age,NickName) values(011,"张三",20,"小二")
可以省略为insert into Person1 values(011,"张三",20,"小二"),但不推荐
2.如果插入的行中有些字段不确定,那么Insert的时候不指定这些列即可
3.可以给字段默认值,如果Guid类型主键的默认值设定为newid(),就会自动生成。(一般不这样做)
4.可以只执行选中的SQL语句
(四)数据更新(Update)
1.更新一个列:UPDATE T_Person set Age=30;
2.更新多个列:UPDATE T_Person set Age=Age+1,Name='Lucy';
3.更新一部分数据:用Where语句。
4.Where中可以使用的其他逻辑运算符:or、and、not、<、>、<=、>=、!=(或<>)等
(五)数据删除(Delete)
1.删除表中全部数据:DELETE FROM T_Person。Delete只删除数据,表还在,和Drop Table不同
2.删除表中部分数据:使用Where语句。如DELETE FROM T_Person WHERE Age>20
(六)数据检索(Select)
1.检索表中全部数据:SELECT * FROM T_Employee
2.只检索需要的列:SELECT FNumber,FAge FROM T_Employee
3.按条件检索:使用Where语句。如SELECT FNumber,FAge FROM T_Employee WHERE FAge>20
4.列别名:SELECT FName as 姓名,FAge as 年龄 FROM T_Employee
5.检索不与任何表关联的数据:SELECT 1+1;SELECT Newid();SELECT getdate()
(七)聚合函数:MAX()、MIN()、AVG()、SUM()、COUNT()
大于20岁年龄的平均工资:SELECT AVG(FSalary) WHERE FAge>20;最高和最低工资:SELECT MAX(FSalary),MIN(FSalary)
(八)数据排序(ORDER BY)
1.升序:ASC(可省略,但不推荐。程序不是越少越好,而是越好读越好)
2.降序:DESC
3.先按年龄升序排列,再按工资降序排列:SELECT * FROM T_Employee ORDER BY Fage ASC,FSalary DESC
4.ORDER BY子句位于SELECT语句的末尾,放到WHERE子句之后。
(九)通配符过滤
1.通配符过滤使用LIKE
2.单字符通配符:半角下划线“_”,如SELECT * FROM T_Employee WHERE FName LIKE ‘_eery’
3.多字符通配符:半角百分号“%”
(十)空值处理
1.数据库中,一个列如果没有指定值,那么其值为null,数据库中null表示不知道是什么值,而不是表示没有。因此,SELECT NULL+1返回值为NULL。而C#中给变量赋值为null表示不指向任何字段。
a)SELECT * FROM T_Employee WHERE FName = null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FNameis null;
b)SELECT * FROM T_Employee WHERE FName != null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FName is not null;
2.SQL中使用is null、is not null进行空值判断:如SELECT * FROM T_Employee WHERE FName is null;SELECT * FROM T_Employee WHERE FName is not null;
(十一)多值匹配
1.关键字IN:SELECT * FROM T_Employee WHERE FAge in (20,23,25)
2.关键字BETWEEN ...AND...
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
一、数据库概述
(一)平时谈到“数据库”的两种含义
1.MYSQL、MSSQLServer、Oracle等某种DBMS(DateBase Management System,数据库管理系统)
2.存放一堆数据表的一个分类(Catalog)
(二)不同品牌DBMS特点:
1.MYSQL:运行速度快,数据存储完整性不高
2.MSSQLServer:与.net结合的非常好
3.DB2、Oracle:大型数据库,安全性、处理速度、处理变化量非常大的程序
4.Access:可以当文件来用,不需要安装服务器
(三)MSSQLServer
1.SQLServer包括两种
a)MSSQLServer:MicroSoft SQL Server,由微软公司开发的
b)Sybase:与微软一同合作的开发的DBMS
c)两者是在同一个基础上开发出来的两个分支
(四)数据库运行
绝大部分的数据库都需要数据库服务器才能运行,Access、SQLServerCE除外。学习和开发是连接本机数据库,上线运行时数据库运行在单独的服务器上。
二、数据库中的概念
(一)Catalog(分类)(又叫数据库DateBase<MSSQLServer中说法>、表空间TableSpace<Oracle中的说法>),将不同的数据放在不同的数据库里
1.作用
a)便于对各个Catalog进行个性化管理
b)避免命名冲突
c)安全性更高
(二)Table(表)
不同类型的数据放在不同的表中。不同的表根据放的数据的不同进行空间的优化。
(三)Column(列)或Field(字段)
(四)PrimaryKey(主键)
主键是数据行的唯一标识。不会重复的列才能当主键。表可以没有主键,但会变得非常难处理。因此没有特殊理由都要设定主键。
1.主键的两种选用策略:
a)业务主键:使用有业务意义的字段做主键。如身份证号、工号。
b)逻辑主键:使用没有任何业务意义的字段做主键。完全给程序看的,业务人员不会看的。如流水号。很难保证业务主键不会重复、不会变化(如账号升位),因此,推荐使用逻辑主键。逻辑主键通常要隐藏。
(五)ForeignKey(外键)
外键是该表是另一个表之间联接的字段(外键必须为另一个表中的主键),其用途是保证数据的完整性。
三、SQLServer的管理
(一)常用字段类型:bit(可选值0、1)、datetime、int、varchar(按字节存储)、nvarchar(按字符存储、汉字用nvarchar)
1.char和varchar区别:char为定长,不足部分用空格补足
2.varchar和nvarchar的区别:varchar按字节存储,nvarchar按字符存储。如varchar(20)可以存储10个汉字,而nvarchar(20)可以存储20个汉字(一个汉字两个字节)。
二、SQL语句入门
(一)SQL语句
SQL语句是和DBMS“交谈”专用的语句,不同的DBMS都认SQL语法
1.特点
a)SQL语句中表示字符串用单引号
b)SQL语句是大小写不敏感的。不敏感是指SQL关键字,字符串指还是大小写敏感。
c)创建表、删除表可以手工完成,也用SQL语句完成
2.分类
1.DDL(数据库定义语言,Data Definition Language):对表进行定义
CREATE TABLE --创建表
DROP TABLE --删除表
ALTER TABLE --修改表
2.DML(数据库操作语言,Data Manipulation Language):对数据进行操作,不影响表结构
SELECT --检索数据
DELETE --删除数据
INSERT --插入数据
UPDATE --更新数据
3.DCL(数据库控制语言,Data Control Language):用于设置或修改数据库用户权限
GRANT --授予权限
REMOVE --撤销权限
DENY --拒绝权限
(二)主键选择
1.SQLServer中常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)
a)标识列:用标识列实现自增可以避免并发等问题。将字段的“是标识列”设置为“是”,一个表只能有一个标识列。
b)Guid算法:一种可以产生唯一标识的高效算法。使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证无论是同一台计算机还是不同计算机每次产生的GUID不会重复。 SQLServer中生成Guid的函数newid(),.Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。
2.两种类型对比
a)int自增字段优点:占用空间小、无需开发人员干预、易读;缺点:效率低、数据导入导出很痛苦
b)Guid优点:效率高、数据导入导出方便;缺点:占用空间大、不易读
c)业界主流倾向于使用Guid
(三)数据插入(Insert)
1.Insert语句可以省略表名后的列名,如insert into Person1(Number,Name,Age,NickName) values(011,"张三",20,"小二")
可以省略为insert into Person1 values(011,"张三",20,"小二"),但不推荐
2.如果插入的行中有些字段不确定,那么Insert的时候不指定这些列即可
3.可以给字段默认值,如果Guid类型主键的默认值设定为newid(),就会自动生成。(一般不这样做)
4.可以只执行选中的SQL语句
(四)数据更新(Update)
1.更新一个列:UPDATE T_Person set Age=30;
2.更新多个列:UPDATE T_Person set Age=Age+1,Name='Lucy';
3.更新一部分数据:用Where语句。
4.Where中可以使用的其他逻辑运算符:or、and、not、<、>、<=、>=、!=(或<>)等
(五)数据删除(Delete)
1.删除表中全部数据:DELETE FROM T_Person。Delete只删除数据,表还在,和Drop Table不同
2.删除表中部分数据:使用Where语句。如DELETE FROM T_Person WHERE Age>20
(六)数据检索(Select)
1.检索表中全部数据:SELECT * FROM T_Employee
2.只检索需要的列:SELECT FNumber,FAge FROM T_Employee
3.按条件检索:使用Where语句。如SELECT FNumber,FAge FROM T_Employee WHERE FAge>20
4.列别名:SELECT FName as 姓名,FAge as 年龄 FROM T_Employee
5.检索不与任何表关联的数据:SELECT 1+1;SELECT Newid();SELECT getdate()
(七)聚合函数:MAX()、MIN()、AVG()、SUM()、COUNT()
大于20岁年龄的平均工资:SELECT AVG(FSalary) WHERE FAge>20;最高和最低工资:SELECT MAX(FSalary),MIN(FSalary)
(八)数据排序(ORDER BY)
1.升序:ASC(可省略,但不推荐。程序不是越少越好,而是越好读越好)
2.降序:DESC
3.先按年龄升序排列,再按工资降序排列:SELECT * FROM T_Employee ORDER BY Fage ASC,FSalary DESC
4.ORDER BY子句位于SELECT语句的末尾,放到WHERE子句之后。
(九)通配符过滤
1.通配符过滤使用LIKE
2.单字符通配符:半角下划线“_”,如SELECT * FROM T_Employee WHERE FName LIKE ‘_eery’
3.多字符通配符:半角百分号“%”
(十)空值处理
1.数据库中,一个列如果没有指定值,那么其值为null,数据库中null表示不知道是什么值,而不是表示没有。因此,SELECT NULL+1返回值为NULL。而C#中给变量赋值为null表示不指向任何字段。
a)SELECT * FROM T_Employee WHERE FName = null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FNameis null;
b)SELECT * FROM T_Employee WHERE FName != null;没有返回数据,应该用SELECT * FROM T_Employee WHERE FName is not null;
2.SQL中使用is null、is not null进行空值判断:如SELECT * FROM T_Employee WHERE FName is null;SELECT * FROM T_Employee WHERE FName is not null;
(十一)多值匹配
1.关键字IN:SELECT * FROM T_Employee WHERE FAge in (20,23,25)
2.关键字BETWEEN ...AND...
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员_C#基础知识学习笔记:变量的使用和命名规则
- 黑马程序员----C 语言学习笔记之结构体数组,指针,嵌套的使用
- Spring Boot学习笔记-SQL数据库使用
- [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题
- 黑马程序员---struts2学习笔记之八(ognl原理及使用)
- 黑马程序员之存储过程学习笔记:存储过程的基本使用
- Android(java)学习笔记89:泛型概述和基本使用
- [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)
- 黑马程序员-学习笔记-JFrame的使用
- 黑马程序员之SQL 学习笔记:T-SQL语句的使用和编写
- 黑马程序员之ASP.NET学习笔记:AJAX解决什么问题?如何使用AJAX?
- 黑马程序员java学习笔记——基础常识及java概述
- Android(java)学习笔记91:泛型接口的概述和使用
- 黑马程序员-学习笔记java基础-语言概述
- 黑马程序员之SQL 学习笔记:SQL中group by 和having的使用
- 黑马程序员—C学习笔记—typedef的使用以及细节
- Android(java)学习笔记79:java中InetAddress类概述和使用
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之16-使用文件——黑马 IOS 技术博客
- 黑马程序员——OC学习笔记 类与对象的使用
- 黑马程序员----Objective-C学习笔记之点语法的介绍和使用