黑马程序员_笔记九

来源:互联网 发布:乌鲁木齐 网络订花 编辑:程序博客网 时间:2024/06/04 17:49

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 

数据库一
平时我们谈到的数据库有两种含义:(1)MSSQLSERVER、Oracle等某种DBMS(数据库管理系统,DataBase ManageMent System)。(2)存放一堆数据的一个分类(catalog)。
除了Access和SQL ServerCE等文件型数据库,其它的大部分数据库都需要在数据库服务器上运行,学习开发的时候连接的是本机的服务器,上线运行时,数据库是运行在单独的服务器上。
数据库中的概念:
Catalog(分类)(又叫数据库DataBase、表空间TableSpace),不同类的数据应该放在不同的数据库中;Table(表),不同类型的资料放在不同的格子中,将这种区域叫做‘表’(Table),不同的表根据放的数据不同进行空间的优化,找起来也方便;列(Column);字段(Field)。
主键(Primary Key):一行中唯一的标识符,不会重复的列才能当主键,一个表可以没有主键,但是非常难以处理,因此没有特殊理由表都要设定主键。
主键主要有两种:(1)业务主键:是使用有业务意义的字段做主键,比如身份证号、银行账号等(2)逻辑主键:使用没有任何意义的字段做主键。由于很难保证业务主键不会重复,因此建议使用逻辑主键。
SQL Server的两种验证方式:Windows身份验证和SQL  Server身份验证。
创建Table的步骤是:创建数据库_>创建Table_>设置主键。
SQL Server中的bit数据类型相当于C#中的bool类型,只不过bit类型的值只有0和1。
char(10)数据类型是长度为10的字符串,如果字符串的长度不够10,则剩下的用空格填充。
varchar(10)可变长度为10的字符串类型,字符串的最长长度是10,不可以存放中文。
nvarchar(10)可变长度为10的字符串类型,字符串的最长长度是10,可以存放中文。
SQL语句中字符串用单引号引起来,SQL中也是不分大小写的。
SQL主要分DDL(数据定义语言)和DML(数组操作语言)两种,DDL主要包括CREATE和DROP,DML主要包括INSERT、DELETE、UPDATE和SELECT。
两种常见的数据类型:int(bigint)和uniqueidentifier(又称Guid)
int自增字段做主键:优点:占用空间小,无需开发人员干预。缺点:效率低。
Guid主键的优点:效率高,数据导入导出方便,缺点是占用空间大,不易读。
SQL语句
(1)创建表
create Table 表名(字段名1 数据类型 是否为空或是不是主键,字段名2 数据类型 是否为空或是不是主键,...,字段名n 数据类型 是否为空或是不是主键,)
(2)删除表
drop Table 表名
(3)插入语句
insert into 表名(字段名1,字段名2,...,字段名n) values(值1,值2,...,值n)
insert into 表名 values(值1,值2,...,值n)
(4)删除语句
delete from 表名(可以配合where语句来删除指定的数据)
注意:delete语句只是删除表中的数据,而drop语句则是删除整个表的。
(5)更新语句
update 表名 set 列名1=值,列名2=值,...列名n=值 where ...
(6)查询语句
select 列名1,列名2,...,列名n from 表名 where ...
select * from 表名(查询出一个表中的所有数据)
select 列名 列名 from 表名 (查询出一个表中的某两列的数据)
select * from 表名 where 条件(查询出满足一定条件的所有数据)
select 列名1 as 别名 列名2 as 别名 from 表名
(从一个表中查询出某两列并且给这两列的列名另赋新值)
数据汇总(SQL聚合函数):MAX(求最大值)、MIN(求最小值)、AVG(求平均值)、COUNT(求数目)、SUM(求和)
例子:select MAX(Fsalary)from  表名(从一个表中查询出最高工资)
select count(*) from 表名 (查询出这个表中的数据条数)
数据排序语句:order by
(1)order by语句要放在select语句的末尾,可以取ASC(升序)和DESC(降序)两个值。
例子:select * from 表名 order by 列名1 ASC(查询出表中的所有数据,并且按照列名1升序排列)
(2)order by语句要饭在where语句之后
例子:select * from 表名 where Fage>25 order by Fsalary DESC(从表中查询出所有Fage>25的数据行,并且按照Fsalary降序排列)
(3)select * from 表名 order by 列1 ASC,列2  DESC(从表中查询出所有的语句,首先按照列1升序排列,若列1有相同的再按照列2降序排列)
通配符过滤:
(1)使用关键字like
(2)单字符通配符为半角下划线‘_’
(3)多字符通配符为半角百分号‘%’
例子:select * from 表名 where 列名1 like '_erry'(从表中查询出所有列名1的值为以任何一个字符开头其后紧跟erry的所有数据行)
select * from 表名 where 列名1 like '%err%'(查询出一个表中的列名1的值包含err字符串的所有数据行)
数据库中的null表示“不知道”,表示没有指定值,不能做任何的算数运算,因此
select * from 表名 where 字段名=(!=)null是错误的,但是如果想检索空值列的数据,方法是使用is/is not,例如:select * from 表名 where 列名1 is(is not) null。
注意:null("不知道")+任何值,仍然是不知道 
分组语句:group by
(1)group by必须放在where之后
(2)没有出现在group by字句中列是不是出现在select之后的,聚合函数除外。
例子:select Fage,COUNT(*) from 表名 where Fage>25 Group by Fage
(查询出表中的Fage大于25的Fage和数据行数,并且按照Fage分组)
Having语句:
(1)Having后可以使用聚合函数,但是where不能使用。
(2)Having位于group by之后。
(3)Having中不能使用未参数分组的列即只有出现在select之后的列才能出现在Having之后。
例子:select FAGE,Count(*) AS 人数 from FEmployee Group By FAGE Having Count(*)>1
(按照FAGE分组,查询出表FEmployee中的所有数据条数大于1的列FAGE和数据条数,并给数据条数这一列起了一个“人数”的别名)
多值匹配:select * from 表名 where 列名1 in(值1,值2,...,值n)(查询出表中的所有列名1为值1至值n中的任何一个值的数据行)
Having和Where的区别?
答:Having是对分组后的数据进行分组,Where是对原始数据进行分组。
限制结果集行数的语句:Top
例子:select top 5 * from 表名 order by 字段名 ASC(查询出表中字段名前五的数据行)
去掉数据重复的语句:Distinct
例子:select Distinct 字段1 from 表名(查询出表中的所有字段1,并且合并相同的字段1)
select Distinct 字段1,字段2 from 表名(查询出表中的所有的字段1和字段2,并且合并字段1和字段2完全相同的数据行)
联合结果集语句:UNION/UNION ALL
基本的原则每个结果集要有相同的列数,并且对应列的数据类型要相兼容。
模型:select 列1,列2 from 表名1
UNION
select 列1,列2 from 表名2
UNION和UNION ALL的区别
UNION会自动合并两个结果集中的相同的数据行,UNION ALL会完全显示两个结果集中的数据行,不会合并相同的数据行
一个技巧:
select 最高工资 MAX(Fsalary) from 表1
UNION
select 最低工资 MIN(Fsalary) from 表1
输出两行,结果为
最高工资 值
最低工资 值

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

原创粉丝点击