- 了解数据库
- DMS、关系型数据库和非关系型数据库、SQL语言、表
- 表
- 三范式、表和表之间的关系
- SELECT
- SELECT、去重、伪列、别名、字符串、||、dual(虚表)、nvl(null处理)
一、了解数据库
数据库(DataBase)是按照数据结构来组织、储存和管理数据的仓库。随着市场发展出现了各种的数据库,从最简单的储存有各种数据的表格到进行海量数据存储的大型数据库系统在各个方面得到了广泛的应用。数据库已经成为了数据管理的重要技术
常用的数据库有:MySQL、Oracle、DB2等。数据库又分为小型、中型、大型数数据库
分类 | 产品 | 特点 |
---|---|---|
小型 | access、foxbase | 负载小、用户大概100人以内;成本千元内、对安全性要求不高 |
中型 | sqlServler、MySQL | 负载量、日访问量在5000-10000;成本在万元内,满足日常安全要求 |
大型 | syBase、DB2、Oracle | 海量负载、可以处理海量数据,安全性高,相对较贵 |
1、DBMS
DBMS(Database Management System)数据管理系统,是一种操纵和管理数据库的大型软件。大部分DBMS提供了数据定义语言DDL和数据操纵语言DML,供用户定义数据库和操作数据库。
2、关系型数据库和非关系型数据库
-
关系型数据库
关系型数据库指的是二维表格,关系型数据库就是多个二维表格之间联系所组成的一个数据组织。适合储存复杂的数据。
-
非关系型数据库
非关系型数据库指的是键值对形式存在的数据,适用于简单的存储。
3、SQL语言
SQL语言为数据库查询语言,一种介于关系代数与关系演算之间的结构化查询语言。是一个通用的、功能极强的关系型数据库语言,包含三部分:
分类 | 命令 |
---|---|
DDL | create:创建、drop:删除、alter:修改、rename:重命名、truncate:截断 |
DML | insert:插入、delete:删除、update:更新、select:查询 |
DCL | grant:授权、revoke:回收权力、commit:提交事务、rollback:回滚事务 |
4、表
表是逻辑概念,并不是在物理储存上是一个表。
4.1、表结构
表由表名、字段(名称+类型+约束)、记录组成。与JAVA相对应
DB | JAVA |
---|---|
表名 | 类名 |
字段 | 属性 |
字段类型 | 数据类型 |
字段约束 | 方法 |
记录 | 对象 |
4.2、字段类型
- number(长度[,精度]):number(5)或者number(5,2)
- char(定长长度):char(3)
- 定长,不够补空,不能超出
- varcahr2(变长长度):varchar2(5)
- 写几个是几个,不能超出
- date 时间
4.3、字段约束
- 主键约束:唯一+非空
- 外键约束
- 非空约束
- 唯一约束
- 默认约束
- 检查约束
二、表
1、三范式
在设计数据库的时候存在一些行业标准,这个标准也称谓条件、范式。一般遵循三个就可以,也就是三范式(3NF)。
1.1、1NF
一范式(1NF),每一列都是不可分割的基本数据项,一列中不能有多个重复的值。
1.2、2NF
二范式(2NF),是在一范式的基础上建立起来的,二范式要求数据库表中的每个实例必须被唯一的区分,这个唯一的属性列就是主键。二范式的非主属性依赖于主键。
1.3、3NF
三范式(3NF),实在二范式的基础上建立起来的,要求一个数据表中不包含已在其它表中的非主键关键字信息。三范式就是属性不依赖于其它非主属性。
2、表和表之间的关系
2.1、一对一
一条记录对应另一个表中的另一条记录,例如:用户→身份证
2.2、一对多
一条记录对应另一个表中的多条记录,例如:用户→手机号
2.2、多对多
多条记录对应另一个表中的多条记录,例如:店铺→商品
3、主从表
- 主表:被关联依赖的表
- 从表:关联主表的表
例如上图:student表的pro字段设置为外键,指向province表的id字段,那么,province表就是主表,student就是从表。
三、SELECT
SELECT DISTINCT (*|字段名1,字段名2...) from 表
Tips:不区分大小写
1、SELECT
1.1、查询一个表中的所有信息
-- 查询员工所有信息
select * from emp;
运行结果 |
---|
1.2、查询一个表中的指定字段信息
-- 查询指定字段信息(ENAME字段)
select ename from emp;
运行结果 |
---|
1.3、查询多个字段信息
-- 查询多个字段信息(ENAME,SAL,MGR)
select ename,sal,mgr from emp;
运行结果 |
---|
2、distinct(去除重复信息)
-- 查询所有部分编号
select distinct deptno from emp;
运行结果 |
---|
Tips:去重只能对结果集中完全重复的去重
3、伪列
伪列就是一个不存在的列
-- 伪列
select 1+1 from emp;
运行结果 |
---|
4、别名
别名就是给结果起一个别的名字
-- 别名
select ename 姓名,sal as "工资" from emp;
运行结果 |
---|
5、字符串
''
是字符串,""
是原样输出。字符串可以当作伪列使用。
-- 字符串
select '啊哈哈' from emp;
运行结果 |
---|
6、||(连接符号)
和java编程语言不同的是,在SQL语句中连接符号不是+号,而是||
-- 添加指定前缀
select '啊哈哈-'||ename as 姓名 from emp;
运行结果 |
---|
7、dual(虚表)
dual虚表,和伪列一样,一个不存在的表。
-- 虚表
select 1+1 from dual;
运行结果 |
---|
8、nvl(处理null)
nvl(参数1,参数2):如果参数1为指定字段,如果参数1为null,返回参数2的值
-- 查询员工姓名和奖金信息,如果员工的奖金为null,则返回100
select ename 姓名,comm 原奖金,nvl(comm,100)新奖金 from emp;
运行结果 |
---|