您当前位置: 圣才学习网首页 >> IT类 >> SqlServer专题

SQL数据库基础知识总结

扫码手机阅读
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
评论(0
来源:网络 作者:未知
1.数据库概述
(1) 用自定义文件格式保存数据的劣势。
(2) DBMSDataBase Management System,数据库管理系统)和数据库,平时谈到数据库可能有两种含义:MSSQL ServerOracle等某种DBMS;存放一堆数据库的一个分类(CateLog)。
(3) 不同品牌的DBMS有自己不同的特点:MYSQLMSSQLServerDB2OracleAccessSybase等。对于开发人员来讲,大同小异。
(4) 除了AccessSQLServerCE等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习,开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。
数据库中的概念
(1) CataLog(类)(又叫数据库DataBase,表空间TableSpace),不同类的数据因该放到不同的数据库中。
1) 便于对各个CataLog进行个性化管理
2) 避免命名冲突
3) 安全性更高
(2) Table(表);不同类型的资料放到不同的格子中,将这种区域叫做,不同的表根据放的数据不同进行空间的优化,找起来也方便。
(3) 列(Column),字段(Field)。
主键(Primarykey)
(1) 主键就是数据行的唯一标示,不会重复的列才能当主键,一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都会设定主键。
(2) 主键有两种选用策略;业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号,银行账号等。逻辑主键是使用没有任何业务意义的字段做主键,因为很难保证业务主键不会重复(身份证号重复),不会变化(账号升位),因此推荐用逻辑主键。
(3) 逻辑主键:完全给程序看的,业务员不会看的数据。
SQL Server管理
(1) SQL Server的两种验证方式:用户名验证和Windows验证,开发时用Windows验证就行了。
(2) 常用字段类型:bit(可选值0,1)datetimeintvarcharnvarchar(可能含有中文用nvarchar)
(3) varchar(),nvarchar().char(n)的区别:char(n)不足长度n的部分用空格填充。Var variable:可变的。
SQL语句入门
(1) SQL语句是和DBMS”交谈专用的语句,不同DBMS都认SQL语法。
(2) SQL语句中字符串用单引号。
(3) SQL语句是大小写不敏感的,不敏感指的是SQL关键字,字符串值还是大小写敏感。
(4) 创建表,删除表不仅可以手工完成,还可以执行SQL语句来完成,在自动化部署,数据导入中用的很多。
创建表: create table T_Person              删除表:drop table T_Person
               (
                     ID int not null,
              Name nvarchar(50),
              Age int null
)
(5) 执行简单的Insert语句:      insert into T_Person(ID,Name,Age) values(1,’Jim’,39)
(6) *(熟悉)SQL主要分DDL(数据定义语言)DML(数据操作语言)两类,create tabledrop tablealter table等属于DDLselectinsertUpdatedelete等属于DML
主键选择
(1) SQL Server中两种常用的主键数据类型:int(bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid)。
(2) 用标识列实现字段自增可以避免并发等问题,不用开发人员控制自动增长,用标识列的字段在insert的时候不用指定主键的值,将字段的是标识列设置为,一个表只能有一个标识列。
(3) Guid算法是一种可以产生唯一标示的高效算法,它使用网卡MAC地址,纳秒级时间,芯片ID码算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机,SQL Server中生成GUID的函数newid().NET中生成GUID的方法:Guid.NewGuid(),返回值是GUID类型。
例如:SQL Serverselect newID()
         C#代码中Guid id=Guid.NewGuid();
(4) (*)int自增字段的优点:占用空间少,无需开发人员干预,易读。缺点:效率低,数据导入导出的时候很痛苦。
(5) (*)Guid的优点:效率高,数据导入导出方便,缺点:占用空间大,不易读。
数据插入
(1) insert语句可以省略表名后的列名,但是不推荐。Insert into Person2 values(‘lucy’,’38’)
(2) 如果插入的行中有些字段的值不确定,那么insert的时候不指定那些列即可。
(3) 给字段可以设置默认值,如果Guid类型主键的默认值设定为newid()就会自动生成,很少这样干: insert into person3(ID,Name,Age) values(newid(),’tom’,30)
数据更新
(1) 更新一个列:update T_Person set Age=30
(2) 更新多个列:update T_Person set Age=30,Name=’Tom’
(3) 更新一部分数据:update T_Person set Age=30 where Name=’Tom’,用where语句表示只更新Name’Tom’的行,注意SQL中等于判断用单个=,而不是==
(4) where中还可以使用复杂的逻辑判断:
update T_Person set Age=30 where Name=’Tom’ or Age<25. or相当于C#中的||(或者)
(5) where中可以使用的其他逻辑运算符是:orandnot<>>=<=!=(< >)等。
数据删除
(1) 删除表中的全部数据:delete from T_Person
(2) delete只是删除数据,表还在,和drop table不同。
(3) delete也可以带where子句来删除一部分数据:delete from T_Person where FAge>30
数据检索
(1) 简单的数据检索:select * from T_Employee
(2) 只检索需要的列:select FName from T_Employee
(3) 列别名:select FNumber as 编号,FName as 姓名 from T_Employee
(4) 还可以检索不与任何表关联的数据:select 1+1select newId()select getDate()
数据汇总
(1) SQL聚合函数:max(最大值)min(最小值)avg(平均值)sum()count(数量)
数据排序
(1) order by子句位于select语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排序,ASC)还是降序(从大到小排序,DESC)
(2) 按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序
  select * from T_Employee order by FAge Desc,FSalary Desc
(3) order by子句要放到where子句之后:
  select * from T_Employee where FAge>23 order by FAge Desc,FSalary Desc
通配符过滤(模糊匹配)
(1) 通配符过滤使用Like
(2) 单字符匹配的通配符为半角下划线”_”,它匹配单个出现的字符,以任意字符开头,剩余部分为”erry”
  select * from T_Employee where FName like ‘_erry’
(3) 多字符匹配的通配符为半角百分号”%”,它匹配任意次数(零或者多个)出现的任意字符,”K%”匹配以K开头,任意长度的字符串。检索姓名中包含”n”的员工的信息:
  select * from T_Employee where FName like ‘%n%’
空值处理
(1) 数据库中,一个列如果没有指定值,那么值就为null,这个nullC#中的null不一样,数据库中的null表示不知道,而不是表示没有,因此select null+1结果是null,因为不知道1的结果还是不知道
(2) select * from T_Employee where FName=null    and     select * from T_Employee where FName!=null。都没有任何返回结果,因为数据库不知道
(3) SQL中使用is nullis not null来进行空值判断。
 select * from T_Employee where FName is null
 select * from T_Employee where FName is not null
多值匹配
(1) select FAge,FNumber,FName from T_Employee where FAge in(34,23,35)
(2) 范围值:
1) select * from T_Emploee where FAge>=23 and FAge<=27
2) select * from T_Employee where Fage Between 23 and 27
数组分组
(1) 按照年龄进行分组统计各个年龄段的人数:
   select FAge,Count(*) from T_Employee Group by Fage
(2) Group by子句必须放在where语句的后面
(3) 没有出现在Group by子句中的列是不能放到select语句后的列名列表中的(聚合函数除外)。
  1) 错误:select FAge,FSalary from T_Employee group by Fage
  2) 正确:select Fage,Avg(FSalary) from T_Employee group by Fage
Having子句
(1) where中不能使用聚合函数,必须使用HavingHaving要位于Group by之后。
   select Fage,Count(*) as 人数 from T_Employee Group by FAge Having Count(*)>1
(2) 注意Having中不能不能使用为参数分组的列,Having不能代替where,作用不一样,Having是对组进行过滤。
限制结果集行数
(1) select top 5 * from T_Employee order by FSalary Desc
(2) (*)检索按照工资从高到低排序检索从第六名开始一共三个人的信息
  select top 3 * from T_Employee where FNumber not in (select top 5 FNumber from T_Employee order by Fsalary desc) order by FSalary Desc
(3) SQL Server2005后增加了Row_Number函数简化实现
去掉数据重复
(1) select FDepartment from T_Employee——>select distinct FDepartment from T_Employee
(2) distinct是对整个结果集进行数据重复处理的,而不是针对某一个列,因此下面的语句并不会只保留Fdepartment进行重复值处理。
   select distinct FDepartment,FSubcompany from T_Employee
 

小编工资已与此挂钩!一一分钱!求打赏↓ ↓ ↓

如果你喜欢本文章,请赐赏:

已赐赏的人
最新评论(共0条)评论一句