那些最能干的人,往往是那些即使在最绝望的环境里,仍不断传送成功意念的人。他们不但鼓舞自己,也振奋他人,不达成功,誓不休止。
——安东尼·罗宾
首先我学的是Oracle数据库,下面的相关知识都是在Oracle的基础上写的。
数据库分为两种 关系数据库 和对象数据库
关系数据库 就是我们常用的数据库,如:mysql、sqlserver、oracle、db2、sybase、sqlite、postgresql(常用于地理信息相关的)
他们都不适合存储图片和多媒体。
对象数据库不仅仅支持sql语言,如:nosql 、Redis等。
数据库系统:指在计算机系统中引入数据库后的系统,一般有数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成,常简称数据库。
说下几个关于数据库的名词
DB 数据库 DBA 数据库管理人员 DBMS 数据库管理系统
sql 结构化查询语言包含增删改查等语法 分为数据定义语言(DDL)、数据操作语言(DML)、数据管理语言(TML)、数据控制语言(DCL)、
数据查询语言(DQL)、游标控制语言(CCL)。
DDL:数据定义语言,让用户方便的对数据库中数据对象进行定义。如:创建、删除表格、定义索引(键)、规定表之间的链接、添加表间约束
create database :创建新数据库
alter database:修改数据库
create table:创建表
alter table:修改表
drop table:删除表
create index:创建索引(搜索键)
drop index:删除索引
create view:创建视图
DML: 数据操作语言,提供对数据库基本操作,如增删改查。
select 从数据库表中获取数据
insert into 向数据库表中插入数据
delete 从数据库表中删除数据
update 更新数据库表中的数据
truncate删除表里的数据,不删表。
数据库有3个关系范式 (定义了基本规则):
1NF:属性、字段不可拆分,原子性
如:个人信息
姓名 | 性别 | 电话 |
XXX | X | 138、672 |
这样是不行的 一个列(字段)不能有多个内容,得改为
姓名 | 性别 | 座机 | 手机 |
XXX | X | 138 | 672 |
2NF:在满足1NF的基础上,非主键字段都依赖于主键
如 :学生课表 (学号,课程名称作为主键)
学号 | 课程名称 | 姓名 | 年龄 | 成绩 | 学分 |
学号 | 姓名 | 年龄 |
课程名称 | 学分 |
学号 | 课程名称 | 成绩 |
3NF:在满足2NF的基础上,除主键外其他字段不存储依赖关系
如:还是学生表为例
学号 | 姓名 | 学校 | 学校地址 |
学号 | 姓名 | 学校 |
学校 | 学校地址 |
三大范式降低了数据的冗余(减少了存储空间),体现了数据的完整性、一致性。
数据库的物理结构是由数据库的操作系统文件所决定的,Oracle数据库物理结构由 数据文件、日志文件、控制文件组成。
Oracle的逻辑结构包括
表空间(多个数据文件)
段(功能使用、数据、索引、日志)
区(段空间不足,分配单位)
块(IO读写单位(8K、16K))
提一下 varchar 和 char 区别
他们都是用来存储字符串的,char有固定的长度,varchar属于可变长的数据类型
如 存储字符串 "abc" varchar(5)存储只要3字节,而char(5)存储要5字节。
varchar 节省存储空间,但存储效率较低
char 不节省存储空间,但效率低
varchar 和 nvarchar 区别
varchar 是按字节存储数据,比如"abcdef"、"哈哈哈"
nvarchar 是按字符存储数据,比如"abcdef"、"哈哈哈哈哈哈"
注:1、存储中文占的字节是根据编码方式而定,utf-8 是一个中文占3字节,一般数据库是一个中文占两字节
如果用nvarchar 存储英文字符,会浪费一半以上存储空间。
函数和过程的区别
函数的参数可以 In(输入),过程的参数可以In、out、InOut(可以传入传出)
函数只能在sql语句中执行,过程可独立运行
函数不会改变原始数据,过程会改变原始数据
函数有返回值,过程没有返回值
数据库连接两张表的方式
内连接(等值连接)、外连接(左连接、右连接、全连接)
左连接就是使左表中的数据全部显示出来,如果右表中没有与之匹配数据,就会显示NULL,右连接刚好相反。
全连接就是是左表和右表中的数据全部显示出来。
分析函数 : 会出现新的一列 ,做排名
row_number() 的排名显示:1、 2、 3、 4
rank() 的排名显示:1、 2、 2、 4
desen_rank() 的排名显示:1 、2 、2 、3
根据实际情况选择分析函数
写一些常用的字段 distinct(sal)(删除重复的)、round(sal,1)(四舍五入)、truncate(sal,1)(trunc)(截断)
nvl(sal,0) 表示若sal为空,则用0表示 、 max,min,avg,sum,count,
两个select语句之间用 union (并集,无重复内容) , union all(追加,有重复内容),minus(上面结果减掉下面的,上面有的下面没有)
intersect(交集,公共部分)
注:查询语句中有两个字段,其中一个字段是聚合函数,需要分组,用不是聚合函数的字段来分组,
例:select job,count(ename)from emp group by job;
这些只是数据库常用基础知识的一部分,更多的以后学会了会写出来。