您的位置:首页 > 职场人生

“黑马程序员”视频学习笔记之数据库基础

2013-02-28 17:23 483 查看
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

创建数据库,创建表,设置主键

僧删改查 不仅可以手工完成,还可以用sql语句

(*)sql主要分为DDL(数据定义语句)(建删)、DML(数据操作语句)(更新等)两类。

常用字段类型:

  bit(可选值0,1)、datelime、int、varchar(字符串)、nvarchar(可能含有非英文的字符串);

!varchar、nvarchar和char(n)的区别:char(n)不足长度n的部分用空格填充 

!sql中字符串用单引号。

!sql中关键字大小写不敏感,但字符串值大小写敏感

主键设定有限定:大多数都可以,但不合理。

两种常用主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)

标识列:  实现字段自增避免并发问题,用标识列的字段在instrl的时候不用设定主键值。

          将字段的“是标识列”设置为“是”,一个表只能有一个标识列。

guid算法:是一种可以产生唯一标识的高效算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等计算出来,保证每次生成          

          的guid永远不会重复,公元3400年前不会相同。SQL中生成guid的函数是newid()

.net中生成guid的方法:Guid.NewGuid(),返回Guid类型。

(*)int自增优点:占用空间小、无需开发人员干预,易读。     缺点:效率低,数据导入导出很痛苦。

(*)guid   优点:效率高、数据导入导出方便。               缺点:占用空间大,不易读。

(*)业界主流倾向于guig

insert插入时表名后的列名可以省略,但不建议省略。

如插入行中有些字段值不确定,那么insert的时候不指定那些列即可

可以给字段设定默认值,如guid类型主键默认值设定为newid()就会自动生成。很少这么干。

【@】表的建立:

create table 表名(id int NOT NULL,列名 类型 非空,列名 类型)

【@】表的删除:

drop table 表名

【@】数据插入:

普通数据插入:insert into 表名(字符串列明1,列明2) values('字符串数据1',数据2)

插入guid主键:insert into 表名(id,字符串列明2,列明3) values(newid(),'字符串数据2',数据3)

    int 主键:将字段的“是标识列”设置为“是”,一个表只能有一个标识列。

【@】数据更新:

更新一个列:update 表名 set 列名1 = 数据1

更新多个列:update 表名 set 列名1 = 数据1,列名2 = 数据2

更新一部分:update 表名 set 列名1 = 数据1  where 条件(例:列名2=数据2), 

          //用where语句表示只有 (列名2 是 数据2) 的行才会更改,SQL中等于判断用单个=。

where中可使用逻辑运算符:or(相当于C#中的||,或者)、and(并且)、not(非)、<、>、>=、<=、!=(或<>)等  

【@】数据删除:

删除全部数据:delete from 表名

删除部分数据:delete form 表名 where 条件

【@】数据检索:

简单的数据检索:select*from 表名

只检索需要的列:select 字段名 from 表名

                select 列名,列名 from 表名

列别名:        select 字段名 as 别名

where条件检索 :select*from 表名 where 条件

检索不与任何表关联的数据:select 要查内容

】数据汇总:     select 函数(*或列名)from 表名 where 条件

                 SQL聚合函数:count 数量,max 最大,min 最小,avg 平均,sum 总和

       

】数据排序:     select*from 表名 order by 列名 asc            //asc升序;desc降序

                 select*from 表名 order by 列名 asc,列名2 desc //值1相等;按值2排序

                 //有判断条件时, where要在order by 之前

】通配符过滤:   模糊匹配 模糊查询

like:单字符匹配:select*from 表名 where 列名 like'字符串_字符串'                               

                 通配符为半角下划线“_”,即英文的。任意字符开头,剩余部分为“erry”   

     多字符匹配:select*from 表名 where 列名 like'字符串_字符串'  like'%字符串%' 

                 通配符为半角百分号“%”,

】空值处理:     空值即为NELL,表示不知道

查询不知道的数据:select*from 表名 where 列名 is null

                  select*from 表名 where 列名 is not null

】多职匹配:      select*from 表名 where 条件1 or 条件2 or 条件3

                  select*from 表名 where 列名  in (值1,值2,值3)

                  select*from 表名 where 条件1 and 条件2

   between:      select*from 表名 where 列名 between 值1 and 值2;//指定列中 值在值1与值2间的数据

】数据分组:      select 列名,函数 from 表名 group by 列名  //函数例如:count(*);前列名表示是否显示分组的根据

】having语句:    select 列名,函数 from 表名 group by 列名 having 函数  

               ! where中不能使用聚合函数,必须使用having,要位于group by之后,

                  是对分组后信息进行过滤,    

】限制结果集行数:select top3*from 表名 各种条件(排序 过滤语句)  //前三前      【分页】

     例:select top3*from 表名 where 编号列 notin (select top 5 编号列 from 表名 order by 工资列 desc)order by 工资列desc

     //工资从高到低排序检索 从第六名起三人的信息  

】row_number:    2005后增加

】去掉重复数据:   

                //distinct 去除重复项关键字; 消除完全重复的行

】联合结果集:    select 列名1 from 表名1 UNION select 列名1 from 表名2

                //基本原则:每个结果集必须有相同的列数,每个结果集的列必须类型相容。【两表有相应的列】【默认重复数据合并】

  Union all:     同上 union all 同上  【重复行不合并】

】数字函数:    abs():求绝对值

            ceiling():舍入到最大整数。【3.33舍入到4】

              floor():舍入到最小整数。

              round():四舍五入。 【round(数值,精确到位数)据我半径最近的数】

】字符串函数:  len():计算字符串长度。

   lower()、upper():准换小写、大写。

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

              rtrim():字符串右侧的空格去掉    【ltrim(rtrim(字符串));去两边】

  【取字符串中部分字符】substring(主字符串,子字符串在主字符串中的起始位置,子字符串的最大长度)

】日期函数:gerdate():取得当前日期

            dateadd(计量单位,增量,待计算日期):计算增加后日期。例:deteadd(day,3,date);三天后日期

            datediff(计量单位,开始日期,结束日期):计算两个日期间的差额。

            datepart(计量单位,date):返回一个日期的特定部分。      

                  

】类型转换函数: cast(表达式 as 数据类型);

                 convert(数据类型,表达式);

】空值处理函数:isnull:  select isnull(要判断是否为空的 列名,‘显示的字符串’)as 要显示的列名 from 表名 

              

*】case函数用法1:判断表达式值 执行不同事件

                  case 要判断的

                  when 值1 then 返回值

                  when 值2 then 返回值

                  else 默认返回值 end            //否则默认返回值

*】case函数用法2:条件范围判断

            例:  select name,

                 {

                  case 

                  when 收入<4000 then 低收入

                  when 收入>4000 then 高收入

                  else 一般般

                  and

                  } as 收入水平

                  from 表名 

【@】索引:   声明目录 经常进行查询的字段 

【@】表连接: 表1 as 别名1 join 表2 as 别名2 on 别名1.列名 = 别名2.列名

     jion

【@】子查询:将查询到得 当做表处理

 单值子查询:返回一行一列的值 

多行单列的子查询:

               

【【@】】SQL2005以后

把查询结果作为子查询

row_number() 内置行号 开窗函数 只能出现于select或order by子句中;

 用子查询来用 ----------------------
Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: