OracleSQL数据库开发文化总结:基础篇

  1.数据库概述

(1) 用自定义文件格式保存数据的劣势。

(2) DBMS(DataBase Management
System,数据库管理网)和数据库,平时开腔到”数据库”可能有半点栽意义:MSSQL
Server,Oracle等某种DBMS;存放一堆放数据库的一个分类(CateLog)。

(3)
不同品牌的DBMS有和好差之风味:MYSQL,MSSQLServer,DB2,Oracle,Access,Sybase等。对于开发人员来讲,大同小异。

(4)
除了Access,SQLServerCE等文件型数据库之外,大部分数据库都需要数据库服务器才能够运作。学习,开发时凡连连本机的数据库,上线运行时是数据库运行于单身的服务器。

  1. 数据库被的定义

(1)
CataLog(类)(又让数据库DataBase,表空间TableSpace),不同类的数量以拖欠放不同的数据库中。

1) 便于对一一CataLog进行个性化管理

2) 避免命名冲突

3) 安全性更胜似

(2)
Table(表);不同类型的资料放置不同的”格子”中,将这种区域叫做”表”,不同之表根据放的数目不同进行空中的优化,找起来也便于。

(3) 列(Column),字段(Field)。

  1. 主键(Primarykey)

(1)
主键就是数据行的唯一标示,不见面再度的排才会当主键,一个阐明可以没有主键,但是会老麻烦处理,因此没有异样理由表都会设定主键。

(2)
主键有少数种植选用策略;业务主键和逻辑主键。业务主键是动有工作意义的字段做主键,比如身份证号,银行账号等。逻辑主键是采取无外业务意义的字段做主键,因为很为难保证工作主键不会见重新(身份证号重复),不见面扭转(账号升位),因此推荐用逻辑主键。

(3) 逻辑主键:完全受程序看的,业务员不见面扣押的数量。

  1. SQL Server管理

(1) SQL
Server的星星种植证明办法:用户名验证和Windows验证,开发时用Windows验证就执行了。

(2)
常用字段类型:bit(可挑选值0,1),datetime,int,varchar,nvarchar(可能包含中文用nvarchar)。

(3)
varchar(),nvarchar().char(n)的分别:char(n)相差长度n的有些用空格填充。Var:
variable:可变的。

  1. 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
table,drop table,alter
table等属于DDL,select,insert,Update,delete等属于DML。

  1. 主键选择

(1) SQL
Server中点滴栽常用之主键数据类型:int(或bigint)+标识列(又如自动增长字段);uniqueidentifier(又如Guid)。

(2)
用标识列实现字段于添可以免起等题材,不用开发人员控制自动增长,用标识列的字段在insert的早晚不要指定主键的值,将字段的”是标识列”设置也”是”,一个申明只能发出一个标识列。

(3)
Guid算法是一模一样栽可以有唯一标示的速算法,它以网卡MAC地址,纳秒级时间,芯片ID码算出来的,这样保证每次转的GUID永远不见面又,无论是和一个电脑上或差之计算机,SQL
Server中生成GUID的函数newid(),.NET中生成GUID的艺术:Guid.NewGuid(),返回值是GUID类型。

例如:SQL Server:select newID()

         C#代码中 :Guid id=Guid.NewGuid();

(4)
(*)int自添字段的优点:占用空间少,无需开发人员干预,易读。缺点:效率不如,数据导入导出的早晚特别痛苦。

(5) (*)Guid的亮点:效率高,数据导入导出方便,缺点:占用空间非常,不易读。

  1. 数码插入

(1) insert语句可以大概表名后底列名,但是非推荐。Insert into Person2
values(‘lucy’,’38’)

(2) 如果插入的行中有些字段的价未确定,那么insert的当儿不点名那些列即可。

(3)
给字段可以装默认值,如果Guid类型主键的默认值设定为newid()就会见自动生成,很少这样提到:
insert into person3(ID,Name,Age) values(newid(),’tom’,30)

  1. 数更新

(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中得以动用的外逻辑运算符是:or,and,not,<,>,>=,<=,!=(或<
>)等。

  1. 多少删除

(1) 删除表中的全数额:delete from T_Person。

(2) delete只是剔除数据,表还在,和drop table不同。

(3) delete也足以带来where子句来删除一部分数目:delete from T_Person where
FAge>30。

  1. 数据检索

(1) 简单的数据检索:select * from T_Employee。

(2) 只摸需要的排列:select FName from T_Employee。

(3) 列别名:select FNumber as 编号,FName as 姓名 from T_Employee。

(4) 还可以搜索不与其他说明关联的数:select 1+1,select newId(),select
getDate()。

  1. 数码集中

(1)
SQL聚合函数:max(最深价值),min(最小值),avg(平均值),sum(和),count(数量)。

  1. 数码排序

(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. 通配符过滤(模糊匹配)

(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. 空值处理

(1)
数据库被,一个排如果无点名值,那么值就吧null,这个null和C#倍受的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 null,is not null来进展空值判断。

 select * from T_Employee where FName is null

 select * from T_Employee where FName is not null

  1. 大抵值相当

(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. 数组分组

(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。

  1. Having子句

(1) 在where中不能够使用聚合函数,必须以Having,Having要放在Group
by之后。

   select Fage,Count(*) as 人数 from T_Employee Group by FAge Having
Count(*)>1

(2)
注意Having中不克无克运用呢参数分组的排,Having不可知代替where,作用不平等,Having是对准组开展过滤。

  1. 范围结果集行数

(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. 失掉Oracle丢数据再次

(1) select FDepartment from T_Employee——>select distinct FDepartment
from T_Employee

(2)
distinct是指向全结果集进行数据再度处理的,而无是对准某一个排,因此下的讲话并无见面独自保留Fdepartment进行重复值处理。

   select distinct FDepartment,FSubcompany from T_Employee

相关文章