关系型数据库基础

简介

数据库:计算机集中存放数据的地方。

对数据的集中控制(优点):

       1.降低数据存储的冗余度

       2.提高数据的一致性

       3.存储的数据可以共享

       4.可以建立数据库所遵循的标准

       5.便于维护数据的完整性

       6.实现数据的安全性

在数据库中,数据必须以结构化的格式来被组织和分类。

数据模型:层次模型;网状模型;惯性模型;对象模型

关系模型中把世界看作是由实体(Entity)和联系(Ralationship)组成的;实体所具有的某一特性称为属性;用关系模型来创建的数据库就是关系型数据库(Ralationship  Database),表(table)是其核心单元,表的内部分成列(column)和行(row)

主键(Primary key)

外键(Foreign key):用来表达表与表之间的关联关系;

关系类型:一对一;一对多;多对多;

结构化查询语言(SQL):一种用于管理关系型数据库,并与数据库中的数据进行通讯的计算机语言

        数据定义语言(DDL);

        数据查询语言(DQL);

        数据操作语言(DML);

        数据控制语言(DCL);

一些关系型数据库的软件工具:MySQL(Oracle), Oracle(Oracle), DB2(IBM),SQL Sever(Microsoft).

管理数据库和表

1.创建数据库:  create  database  数据库名

2.连接数据库:  use 数据库名

3.删除数据库:  drop database 数据库名

数据类型

整数型:tinyint , int , bigint

浮点型:float  , decimal(m,d) , numeric(m,c)

字符串类型:

       变长(存储):varchar

       定长(查询): char

二进制类型:tinyblob , blob ,  mediumblob , longblob

逻辑数据类型:boolean

日期类型:

       DATETIME : YYYY--MM--DD   HH : MM : SS

      YEAR : YYYY

      DATE : YYYY--MM--DD  

货币类型:Money

管理表

创建:create table 表名(

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

         ) ;

删除表:drop table 表名 ;

复制:select *into <目标表名>from <源表名> where 条件;

添加:alter  table <表名> add   内容 ;

索引

用来提供整个数据库操作速度的数据库对象;

create index <索引名>  on<表名> (<列名1><列名2>,....) ; 

删除: alter table <表名> drop index <索引名> ;

保证数据的完整性

完整性:可靠性+准确性

分类:

        1.实体完整性

保证每一行数据是有效的,与其他行相区别

        2.域完整性

保证一列的有效性

        3.引用完整性

保证引用编号是有效的

        4.自定义完整性

保证自定义规则

实现:

非空约束:not null

主键约束:primary key 可以是一到多个列,不能重复

唯一约束:unique

默认值:default

检查约束:check (MySQL暂不支持)

自动编号:auto_increment

外键约束:foreign key

alter table 外键所属表名(例如:t_student)

      add constraint (自定义名 例如:class_stu_ref)foreign key (外键名)  references  主键所属表名(例如:t_class)  (主键名) ;

DML语句

插入单行记录:insert into<表名> (<列名>)values (<值列表>) ;

更改已有数据:update <表名> set<新列值列名> where<过滤条件> ;

更新删除:update ... set 列值 = null where...

删除数据: delete ...from <表名> where <过滤条件>

清空表:truncate table <表名>

简单数据查询

投影操作(Projection)

select  列名 from 表名

' * ' :全部

distinct:排除重复

limit :返回限定行数

选择操作(Selection)

select  列明列表 from 表名  where 过滤条件;

运算符:' = ' 相等 ,' != '  ,' ^= ' , ' <> '  不相等 ,' > ', ' < ', ' >= ' , ' <= '

数据库中取模:mod函数

组合where条件: and 并且,or 或者

执行范围:between... and...

定义集合关系: in / not in

模糊查询:like

排序操作(Order by)

默认(自然)排序:从小到大 (asc)

倒序:从大到小 desc

聚合函数(统计)

count(计数)

    ' * ' 计算所有选择的行,包括null值

sum(求和)

avg(均值)

max / min 最大/最小

date_format(%Y年%M月%D日)

数据分组(group by)

having和where的区别:聚合函数的筛选用having

 

Select ...from...where...group by... having ...order by...

执行顺序:

      1.执行from

      2.where条件过滤

      3.group by 分组

      4.执行select 投影列

      5.having条件过滤

      6.order by 排序

子查询

相关子查询:依赖于外部查询,外部查询返回一行,子查询执行一次

非相关子查询:可单独运行,一般执行一次

运算符:exists,all,any

组合查询

 

select ColumnA,ColumnB,ColumnC from table A

union

select ColumnC,ColumnD,ColumnE from table B ;

(两表数据类型应匹配,列名数量应相等;组合后显示列名默认为第一个查询的列名)

union:默认去掉重复数据

union all:默认显示全部数据结果

intersect:求交集(仅Oracle支持)

except / minus 差分(仅Oracle支持)

联接

表联接(横向联接):将多个表联接在一起实现查询效果

分类:

        1.内联接(inner)join

     select 列名1,列名2,from  表1,表2  on 匹配条件

jion 表3  on 匹配条件

....

简化:select (表1列1) ,(表2列2) from 表1,表2...

where 匹配条件

        2.外联接(outer)join

左外联:left join

右外联:right join

全外联:full jion (MySQL不支持)

        select 列名1,列名2,from 表1   left join  表2 on 匹配条件

        3.自联接(特殊方式联接):主键外键在一张表里

       select a.列名, b.列名 from 表a   left join 表 b
 on 匹配条件;

交叉联接(笛卡尔乘积):cross join

返回得到结果集合中数据行数等于两个列表中行数的乘积......