一.资料库简介

资料库是数据管理的重要技术,也是计算机的重要分支.常用的资料库有:Oracle,Mysql,DB2

DBMS(Database Management System)

资料库管理系统是一种操纵和管理资料库的大型软体,用于建立、使用和维护资料库,简称 DBMS。

大部分 DBMS 提供数据定义语言DDL(Data Definition Language)和数据操作语言 DML(Data Manipulation Language),供用户定义资料库的模式结构与许可权约束,实现对数据的追加、删除等操作。

根据存储模型可将资料库划分为关系型资料库和非关系型数据.。简单来说,关系模型指的就是二维表格模型,而一个关系型资料库就是由二维表及其之间的联系所组成的一个数据组织。标准数据查询语言 SQL 就是一种基于关系资料库的语言,这种语言执行对关系资料库中数据的检索和操作。

Oracle Database,又名 Oracle RDBMS,或简称 Oracle。是甲骨文公司的一款关系资料库管理系统。

SQL 语言

SQL(Structured Query Language)为资料库的语言,它是结构化查询语言,是一个通用的、功能极强的关系型资料库语言。它包含三部分:

命令分类操作:

Select篇

表(Table)

1)、表是从属于用户的 ,查询表(用户名.表名),当前用户查询自己的表时,用户名.

可以省略,其他用户查询别的用户表,不能省略,同时必须存在许可权。

2)、表是逻辑表(概念表),不是物理表

块(8k) --->区(连续块)-->段(连续区) -->表(多个段) ,数据段不全是表,表一定是数据段。还有其他段:如索引段

2、表结构

表由表名、栏位(名称+类型+约束)、记录 组成(栏位就相当于类中的各种属性)。与 java 相对应:

二、Scott 用户表

Scott用户的4张表

? dept:部门表

? emp:雇员表

? salgrade:工资等级表

? bonus:奖金表

oracle 命令不区分大小写(SELECT 与 select), 存储数据|内容 区分大小写

  1. 查看表结构 ,例如:desc emp

  1. 用户表说明

三、三范式

在设计资料库时,存在行业的标准,这个标准也称为条件,即范式 Normal Form。一般遵循三个条件即可,也就是」三范式」(3NF)

? 1NF:是指资料库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,

即实体中的某个属性不能有多个值或者不能有重复的属性

? 2NF:满足第二范式必须先满足第一范式,第二范式要求资料库表中的每个实例或行必须可以被唯一地区分。

为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如 emp 表中加上了员

工编号(empno)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。

这个唯一属性列被称为主关键字或主键、主码。同时要求实体的属性完全依赖于主关键字。

即第二范式就是非主属性非部分依赖于主键

? 3NF:必须先满足第二范式。3NF 要求一个资料库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(deptno)、部门名称、地址等信息。那么员工信息表(emp)中列出部门编号后就不能再将部门名称、部门地址等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范

式(3NF)也应该构建它,否则就会有大量的数据冗余。即第三范式就是属性不依赖

于其它非主属性。

简而言之,最终的目的避免数据重复冗余,1NF列不可再分,最小原子(避免重复);2NF ?主键依赖 (确定唯一);3NF消除传递依赖(建立主外键关联拆分表)

主键:确定一条记录的唯一性,主键不能重复

外键列:可能是概念程序员自己控制,主外键约束

主外键约束:外键的值必须是主键的值,null,外键可重复

四、SELECT

注意:命令不区分大小写

Sql中的注释用:--

DQL 查询语句

1.select *|栏位名1,栏位名2... from 表名; (|代表或者)

select * from 表名 查询该表中的所有数据

例如:

select * from dept;

select * from emp;

查询所有员工的姓名

select 栏位名 from 表名;

select ename from emp;

查询所有员工的姓名,员工编号,上级编号

查询的数据: ename,empno,mgr

数据来源: emp雇员表

查询的条件:

select ename, empno, mgr from emp;

查询所有员工的部门编号

查询的数据: deptno

来源: dept|emp

select deptno from dept;

select deptno from emp;

所有有员工存在的部门的部门编号

查询的数据: deptno

来源: emp

去重 distinct

select distinct deptno from emp;

select distinct ename,deptno from emp;

表达式 结果栏位的名字为表达式的名字 值为表达式计算的结果-->计算器

select 1+1 from emp;

select distinct 123*456 from emp;

别名 select 栏位1 as 别名,栏位2 as 别名, 栏位3 别名.. from 表名 ;

别名如果是英文默认大写,如果想要原样使用|中文带空格,在别名的前后""

select distinct 123+456 as "get Sum" from dept;

select distinct 123+456 "求 和" from dept d;

代表字元串 ""原样输出 结果栏位名和值原样字元串输出

select 哈哈 "123" from emp;

表达式|字元串都是伪列:不是表中真是存在的栏位

字元串的拼接 ||

select a-||-b from dual;

查询所有员工的姓名添加同一前缀 尚学堂

select 尚学堂||ename "学生姓名" from emp;

虚表: oracle中不是真是存在的表,其中没有任何数据 dual

select sysdate from dual;


推荐阅读:
相关文章