数据库重要知识点总结

首先感谢博客园,创建了这个专属于开发者的知识共享平台,需要强调的是我并不是一个大牛级别的人物,只是一个初入园子还未见过世面的IT小菜鸟,本着一颗向园内大牛们学习的心,加入了这个圈子,借此机会,对自己日常所学进行实时整理,还望各位大神多多指教。

我的邮箱是:[email protected]

以下是近期对SQL Server数据库所学知识的相关总结,希望可以在一些地方帮助初入门者,对于相关的基础名词我就不一一介绍了,就从SQL语言操作说起吧。

1.数据库入门之SQL语句总结

首先先对几个数据库中的数据类型进行下了解:

nchar ----------------存储数据类型为宽字节字符数组,最多4000字节

nvarchar-------------存储数据类型为宽字节字符串,最多4000字节

char------------------存储数据类型为多字节字符数组,最多8000字节

varchar--------------存储数据类型为多字节字符串,最多8000字节

举个例子:

用char(10)和varchar(10)分别对”hello”字符串进行存储,char(10)中该字符串所占字节数为10个,varchar(10)中所占字节数为6个。

如果有超大文本存储,此时选用text,ntext类型

1.1SQL语句之定义功能

此项包括对基本表、索引和视图的定义和撤销。针对于表,我们可以对其进行创建、删除以及修改,而针对于视图、索引,我们可以创建和删除。

1.1.1创建、修改、删除表

创建:

create  table  表名

{

<列名>  <数据类型>  <约束条件>

}

如:

create table studentinfo

(

number int primary key,    --主键,唯一标识,不许重不许空

name varchar(10) unique,   --唯一约束,除主键外唯一标识,可重可空

sex varchar(5) check(sex=‘男‘ or sex=‘女‘),--检查约束,保证值在一定范围内

age int default(18)         --默认约束

)

create table studentcourse

(

number int foreign key references studentinfo(number),--外键

course varchar(20)

)

修改:

如:

alter  table 表名

{

add <新列名> <数据类型> <约束条件>

drop<约束条件>

alter  column  <列名>  <数据类型>

}

删除:

drop  table  表名

如:

drop  table  studentinfo

1.1.2创建、删除视图

创建:

Create view 视图名 as

(语句块)

删除:

Drop view 视图名

需要注意的是视图是由一个或多个表导出的虚拟的表

基于一个表:

如:

create view myview as

(select * from student)

select * from myview

update myview set ssex=‘女‘ where s#=‘01‘

insert into myview values(‘09‘,‘aa‘,‘1994-07-09‘,‘男‘)

delete from myview where s#=‘09‘

update myview set ssex=‘男‘ where s#=‘01‘

基于多个表:

如:

create view view1 as

select s.*,sc.score,sc.c# from student s inner join

sc on s.s#=sc.s#

select * from view1

注意:这里值得说明的是不论针对一个表还是多表,只要加了聚合函数的视图将不能增删改,只有针对原表的视图才可以进行增删改。

1.1.2创建、删除索引

一般情况下超大型数据库会选择为数据库添加索引,分为聚集索引和非聚集索引。

创建:

Create  index  索引名  on  表名(列名)

删除:

Drop  index  索引名

1.2SQL语句之查询功能

语句格式(包括语句顺序):

Select  [all | distinct] 列名

From 表名/视图名

[where  条件表达式]

[group by 列名][having  条件表达式]

[order by  列名][asc | desc]

1.2.1单表查询

(1)查询列

Select  列名(多列用“,”隔开,所有列用“*”)  from  表名

(2)查询行

A.消除重复行

Select  distinct  列名  from  表名

B.比较大小:=,>,>=,!=,!>,!<等

Select  sname from student where  cname=’english’

C.确定范围:between…and…,not  between…and…

Select   sname,sage from student where sage between 20 and 23

D.确定集合:in,not in

Select sname  from  student where sdept  in  (‘IS’,’MA’,’CS’)

E.模糊查询:like

Select  s#,sname from student where sname like ‘刘%’

注意:若为’%刘%’,则查询名字中有刘这个字的

F.涉及空值的:isnull

Select  *,isnull(ssex,’未知’)  from  student

注:ssex项若为空,则将其置为“未知”

G.多重条件查询:and,or

Select   sname,sage from student where sage >= 20 and ssex=’男’

H.聚合函数:count,sum,max,min,avg等

Select  avg(score)  from sc where c#=’01’

I.查询表中前几条:top

Select top 2 * from student

J.条件:

select 列名 case when 条件

then 语句块

when条件

then语句块

else语句块

end

from 表名

如:

按照出生日期来算,当前月日< 出生年月的月日则,年龄减一

select *,datediff(yy,birth,getdate()),

case when month(getdate())<month(birth)

then datediff(yy,birth,getdate())-1

when day(getdate())<day(birth)

then datediff(yy,birth,getdate())-1

else datediff(yy,birth,getdate())

end

from teacherinfo

K.类型转换

Select cast()

Select cast(‘12’ as int)  +1

Select convert(int, ‘12’)+1       //convert类型转换有风格选项

1.2.2多表查询

多表查询中,有以下5种查询方式:内连,左连,右连,笛卡尔积,嵌套

A.取两表的交集,内连  inner join

select * from student inner join SC on student.S#=sc.s#

B.以左表为主,左连  left join

select * from student left join SC on student.S#=sc.s#

C.以右表为主,右连  right join

select * from student right join SC on student.S#=sc.s#

D.将两表行乘积,即笛卡尔积

select * from student,sc where student.S#=sc.s#

E.嵌套查询

如:查询"01"课程比"02"课程成绩高的学生的信息及课程分数

select * from

(select *,(select score from sc where c#=‘01‘ and student.s#=sc.s#) sc01,

(select score from sc where c#=‘02‘ and student.s#=sc.s#) sc02 from student) a

where sc01>sc02

嵌套查询中有带in谓词的子查询,比较运算符的子查询,带有any或or的谓词子查询,exists谓词子查询,还有集合查询的union,这里就不一一举例了。

1.3SQL语句之操作功能

此项内容主要包括数据的插入、修改及删除。

插入:

Insert  into  表名  values(值,值)

如:

insert into studentinfo values(5,‘ee‘,‘男‘,35)

insert into studentinfo(number, age) values(6,60)

修改:

Update  表名  set  列名= 值

如:

update studentinfo set age=60 where number=6

update studentinfo set name=‘gg‘,sex=‘女‘ where number=6

删除:

Delete  from  表名

delete from studentinfo where number=6;

2.数据库入门之建表规范

若表与表的关系为n:n时,创建的第三个表的主键为两个表的组合主键;若关系为1:n时,则把1的主键放到n里

第一范式:

表的任一属性不可拆分,也就是说每一个表中的一列属性下不允许再分出几个属性

第二范式:

候选键(非主键)对组合主键部分依赖不允许

如:(学号,课程号)[组合主键](成绩,学生姓名)

成绩依赖于组合主键,而学生姓名只依赖于学号,产生了部分依赖,不符合第二范式

第三范式:

不允许有传递依赖。

举个例子:

(学号)((姓名,年龄,学校,学校地址)

学生姓名,年龄,在哪一所学校都依赖于学号,而学校地址是不依赖于学生的学号的,无论学生学号是多少,学校就在那里,而学校地址依赖于学校是哪所,产生了传递依赖,所以不符合第三范式。

2.数据库入门之存储过程

说道存储过程,我认为可以这样去理解,在SQL语句中,为了避免多次进行相同的操作,将这样相同操作的语句进行一次封装的过程,相当于函数的作用吧。

那么在说存储过程前,就先来看一些语法规则吧:

定义变量:(局部变量用1个@,全局变量用2个@)

Declare   @变量名   变量的类型,@变量名   变量的类型

如:

declare @sum int,@i int

变量赋值:

Set:只能给一个变量进行赋值;select:可以给多个变量进行赋值

如:

select @sum=1,@i=9

打印变量:

Print  @变量名

条件:

If    条件

Begin    语句块

End

Else

Begin     语句块

End

如:

declare @number int,@size int

select @number=100,@size=200

if @number<50

begin

print @number

end

else

begin

print @size

end

循环:(循环语句中只有while,死循环即为while  1=1)

While    条件

Begin    语句块

End

如:

declare @sum int ,@i int

select @sum=1,@i=9

while @i>0

begin

set @sum=(@sum+1)*2

set @[email protected]

end

print @sum

下面我们就来看看存储过程吧

创建存储过程:

Create  procedure  存储过程名   @变量名   变量类型,@变量名   变量类型

As

Begin

语句块

End

如:

alter procedure monkey @sum int , @i int , @value int output

as

begin

--declare @sum int,@i int

--select @sum=1,@i=9

while @i>0

begin

set @sum=(@sum+1)*2

set @[email protected]

end

--print @sum

--return @sum

set @[email protected]

end

--print的

execute monkey 1,9                                    //执行存储过程的语句

--return的

declare @sum int

execute @sum=monkey 1,9                           //执行存储过程的语句

print @sum

--output的

declare @sum int

execute monkey 1,9,@sum output              //执行存储过程的语句

print @sum

删除存储过程:

Drop   procedure   存储过程名

3.数据库入门之触发器,游标,临时表,复制表

3.1触发器

触发器是一种特殊的存储过程,当指定的事件发生时,自动调用,用白话的理解就是比如说有学生表还有选课表,那么学号为一号的同学删除时,选课表中还存有一号同学的选课信息等需要一同删除,而触发器则能完成这一功能。

触发器的种类有3种:插入、修改、删除触发器。在创建触发器时同时会创建两个表,inserted和deleted表

删除:

Create   trigger   触发器名

On   表名

After   delete

As

Begin

语句块

End

如:

create trigger mytrigger

on student

after delete

as

begin

declare @s# varchar(3)

set @s#=(select s# from deleted)

delete from sc where s#[email protected]#

end

delete from student where s#=‘01‘

插入:

Create   trigger   触发器名

On   表名

After   insert

As

Begin

语句块

End

如:

create trigger myinsert

on student

after insert

as

begin

declare @s# varchar(3)

set @s#=(select s# from inserted)

insert into SC values(@s# , ‘01‘ , 80)

insert into SC values(@s# , ‘02‘ , 90)

insert into SC values(@s# , ‘03‘ , 99)

end

insert into student values(‘01‘ , ‘赵雷‘ , ‘1990-01-01‘ , ‘男‘)

修改:

Create   trigger   触发器名

On   表名

After  update

As

Begin

语句块

End

如:

create trigger myupdate

on student

after update

as

begin

declare @s#old varchar(3),@s#new varchar(3)

select @s#old=s# from deleted

select @s#new=s# from inserted

update sc set s#[email protected]#new where s#[email protected]#old

end

update student set s#=‘01‘ where s#=‘11‘

3.2游标

游标即为处理数据的一种方法,对结果集进行一行或多行的浏览,可以把它想象成为指针来用。

游标的创建需要经历5个步骤:定义游标,打开游标,遍历数据,关闭游标,释放内存。

如:

--定义游标,打开游标,遍历游标,关闭游标,释放内存

declare @s# varchar(10),@sname varchar(50)

--定义游标

declare mycursor cursor for

select s#,sname from student

--打开游标

open mycursor

--遍历游标

fetch next from mycursor into @s#,@sname

while @@FETCH_STATUS=0       //fetch函数的返回值,为0时有值

begin

print @s#+‘---------‘[email protected]

fetch next from mycursor into @s#,@sname

end

--关闭游标

close mycursor

--释放内存

deallocate mycursor

3.3创建临时表

Create  table  #临时表名---------------创建

Drop   table   #临时表名---------------删除

3.4复制表

不存在的表:

Select  *  into  新起的一个不存在的表名   from   已有的表名

如:

Select   *   into   aaa    from    student

存在的表:

Insert  into   表名(存在的表名)  内容

如:

Insert   into   aaa    select   *   from   student

以上是我认为初学数据库时应该会用到的一些知识点,仅供大家参考,如果有说的不对的地方,还望多多指教。

时间: 2024-10-06 17:52:30

数据库重要知识点总结的相关文章

【数据库】数据库面试知识点汇总

转自:https://www.cnblogs.com/wenxiaofei/p/9853682.html 数据库面试知识点汇总 一.基本概念 1.主键.外键.超键.候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没有冗余元素的超键. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Nul

数据库相关知识点(秋招整理)

数据库 1.   数据库事务的 4 个特性是:原子性.一致性.持续性.隔离性 1)   原子性:事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行. 2)   一致性:事务前后,数据库的状态都满足所有的完整性约束. 3)   隔离性:并发执行的事务是隔离的,一个不影响一个.如果有两个事务,运行在相同的时间内,执行相同的功能,同一时间仅有一个请求用于同一数据.设置数据库的隔离级别,可以达到不同的隔离效果. 4)   持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保

数据库小知识点

元组是关系数据库中的基本概念,关系是一张表, 表中的每行(即数据库中的每条记录)就是一个元组 ,每列就是一个属性. 在二维表里,元组也称为记录. 要删除表A中数据,使用TRUNCATE TABLE A.运行结果是表A中的约束依然存在! 删除表的语句为:DROP TABLE table_name; 而DELETE和TRUNCATE TABLE都是删除表中的数据的语句,它们的不同之处在于: 1.TRUNCATE TABLE比DELETE的速度快: 2.TRUNCATE TABLE 是删除表的所有行,

数据库原理 知识点总结

名词积累: 数据库(Database):存放和提供数据的"库房" 数据(Data):数据库中存储的基本对象. 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件. 数据库系统(Database System):包含数据库.DBMS.应用系统.数据库管理员(DBA) 主键(Primary Key):用于唯一的标识表中的某一条记录的属性或属性的集合. 外键(Foreign Key):用于与还有一张表关联,外键为还有一张表的主键 超键(Super Key):超键是能唯一区分

(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsoft Naive Bayes 算法.Microsoft 时序算法,后续还补充了二篇结果预测篇.Microsoft 时序算法——结果预算+下期彩票预测篇,看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每篇文章都有它自己的应用场景介绍,有兴趣的同学可以参阅.本篇我们总结微软挖掘算法系列中一款比较重要的算法:Microsoft关联规则分析算法,根

数据库精华知识点总结(1)—数据库的三层模式和二级映像,E-R(实体联系图)图,关系模型

Data base: 长期存储在计算机内,有组织的,可共享的大量数据集合.基本特征:永久存储,可共享,有一定的物理和逻辑结构. Data base manage system(DBMS):用户和os之间的一层数据管理软件. 1.提供数据操纵语言DML对数据库增删改查 2.数据库的建立和维护 3.提供数据控制功能:在数据库建立,运行和维护时,DBMS管理数据的安全性,完整性,并发控制和故障的系统恢复,(也就是数据库的事务管理和运行管理) 4.与其它软件系统通信 Data base system(D

Oracle数据库基础知识点汇总

1.数据库 database 2.主键 ,表的唯一性标识的一列,主键的值永远不能重.primary key 主键的类型:单一主键:一列构成的:复合主键:多个列组合起来充当主键.多采用流水号,单一列当做主键 3.三大规则 :实体完整性约束:主键  :PK 参照完整性约束:外键 :A表的主键出现在B表,在B中就被成为外键,简称FK,此时A为主表,B从表 从表外键的值需要参照主表主键进行填充,或者从表外键的值为空,如果外键的值在主建中不存在,禁止填充 自定义约束:唯一性约束 unique(对NULL无

数据库理论知识点

SQL语言包括:数据定义.数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵:Select ,insert,update,delete, 数据控制:grant,revoke 完整性约束:实体完整性.参照完整性.用户定义完整性 什么是第三范式: 1NF:每个属性是不可分的. 2NF:若关系R是1NF,且每个非主属性都完全函数依赖于R的

数据库常用知识点

最近在写一些接口,总结一下目前想到的一些需要注意的点,说的并不是sqlserver与其他数据库语句的区别,只是想到了就写下来了,老规矩之后想到了在添加进去 null null在数据库中表示没有对这列数据赋值   查询数据库中null值,是不能使用" =null "或者" ="" "(需要提一点的适null的长度是null,""的长度是0),而是使用is null/  is not null 分页 sqlserver(不支持li