关系型数据库基础
简介
数据库:计算机集中存放数据的地方。
对数据的集中控制(优点):
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
返回得到结果集合中数据行数等于两个列表中行数的乘积......