Oracle数据库是相对于其他数据库来说比较难的一个。Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司推出的一款关系数据库管理系统。Oracle数据库系统是目前世界上流行的关系数据库管理系统,拥有可移植性好、使用方便、功能强等优点,在各类大、中、小、微机环境中都适用。Oracle是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。下面我们来具体的学习一下:
首先我们来看什么是Oracle数据,他的组成都有哪些?
Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例则是管理数据库文件 的内存结构。此外,数据库是由后台进程组成。数据库和实例是紧密相连的,所以我们一般说的Oracle数据库,通常指的就是实例和数据库。
Oracle 11G如何安装
https://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html这是一个Oracle11g的下载链接,大家可以根据自己的电脑系统下载不同的安装包。大家这里需要注意,会下载一个文件一和文件二。
如图,下载好后,选中2个压缩包,解压到一个文件夹就可以了,这点非常重要。选择setup.exe 安装就行。
数据库的创建
安装完成后我们在CMD命令窗口中执行sqlplus命令,来打开终端,此时他会提示我们输入用户名和密码,这个时候用户可以输入sys,密码则是你在安装的时候设置的密码。
接下来我们创建一个用户:
CREATE USER user1 IDENTIFIED BY 1234;
我们给user1用户来授权:
GRANT CONNECT,RESOURCE,DBA TO user1;
上面我们创建了一个用户,并且授予了登录和DBA的权限,下面我们用user1来进行登录看看:
CONNECT user1@orcl;
会提示你输入密码,登录成功。注意,user1用户仅存在于orcl数据库中,因此,必须在CONNECT命令中明确指定用户名为user1@orcl。
Oracle创建数据库有三种方式:
- 用oracle dbca来创建
- 手工创建数据库(这个是比较复杂的)
- 使用oracle managed Field来创建
带着问题去学习
常用的查询方面的有:
- Select 演示如何查询单个表中的数据。
排序方面有:
- Order By 按升序或降序对查询的结果集进行排序。
过滤方面有:
- Distinct 介绍如何消除查询输出中的重复行。
- Where 演示如何为查询返回结果集中的行记录指定过滤条件。
- And 组合两个或两个以上的布尔表达式,如果所有表达式都为true,则返回true。
- Or 组合两个或两个以上的布尔表达式,如果其中一个表达式为true,则返回true。
- Fetch 演示如何使用行限制子句限制查询返回的行数。
- in 演示如何使用行限制子句限制查询返回的行数。
- Between 基于一系列值(区间值)过滤数据。
- Like 根据特定模式执行匹配。
链接表方面有:
- Inner join 演示如何从表中查询具有与其他表匹配的行记录。
- Left join 介绍左连接概念,并学习如何使用它选择左表中具有,但右表中不具有的行记录。
- Right join 解释右连接概念,并演示如何从右表查询具有,但左表中不具有的行记录。
- Cross join –介绍如何从多个表中构建笛卡尔乘积。
- Self join 演示如何将表连接到自身以查询分层数据或比较同一个表中的行记录。
分组方面有:
- Group By 演示如何将行分组为子组,并为每个分组应用聚合函数。
- Having 演示如何过滤分组中的行记录。
子查询方面有:
- 子查询 - 介绍子查询的概念以及如何使用子查询来执行高级数据选择技术。
- 相关子查询 - 了解相关的子查询,它是一个依赖于外部查询返回的值的子查询。
- EXISTS和NOT EXISTS - 检查子查询返回的行是否存在。
- ANY,SOME和ALL - 将值与列表或子查询进行比较。
设置操作符
- UNION - 演示如何将两个查询的结果合并为一个结果。
- INTERSECT - 演示如何实现两个独立查询的结果的交集。
- MINUS - 学习如何从一个结果集中减去另一个结果(也就是求差集)。
修改数据
- INSERT - 学习如何在表中插入一行。
- INSERT INTO SELECT - 从查询结果中将数据插入到表中。
- INSERT ALL - 讨论多重插入语句,将多行插入到一个或多个表中。
- UPDATE - 演示如何更新表的存在的数据值。
- DELETE - 演示如何从表中删除一行或多行。
- MERGE - 使用单个语句逐步完成插入,更新和删除操作。
数据定义:
- CREATE TABLE - 演示如何在数据库中创建新表。
- IDENTITY列 - 了解如何使用IDENTITY子句来定义表的标识列。
- ALTER TABLE - 演示如何改变表的结构。
- ALTER TABLE ADD列 - 显示如何将一个或多个列添加到现有表
- ALTER TABLE MODIFY列 - 演示如何更改表中现有列的定义。
- DROP COLUMN - 了解如何使用各种语句从表中删除一列或多列。
- DROP TABLE - 演示如何从数据库中删除表。
- TRUNCATE TABLE - 更快,更有效地删除表中的所有数据。
- RENAME TABLE - 学习如何重命名表和处理其依赖对象的过程。
数据类型:
- Oracle数据类型 - 内置Oracle数据类型的概述。
- NUMBER - 介绍数字数据类型,并展示如何使用它为表定义数字列。
- FLOAT - 通过实例来解释Oracle中的浮点数据类型。
- CHAR - 了解固定长度的字符串类型。
- NCHAR - 演示如何存储固定长度的Unicode字符数据,并解释CHAR和NCHAR数据类型之间的区别
- VARCHAR2 - 向您介绍可变长度字符,并向您展示如何在表中定义可变长度字符列。
- NVARCHAR2 - 了解如何在数据库中存储可变长度的Unicode字符。
- DATE - 讨论日期和时间数据类型,并说明如何有效地处理日期时间数据。
- TIMESTAMP - 介绍如何以小数秒精度存储日期和时间。
- INTERVAL - 介绍区间数据类型,主要用来存储时间段。
- TIMESTAMP WITH TIME ZONE - 了解如何使用时区数据存储日期时间。
约束:
- 主键 - 解释主键概念,并演示如何使用主键约束来管理表的主键。
- 外键 - 解释介绍外键概念,并演示如何使用外键约束来强制表之间的关系。
- NOT NULL约束 - 演示如何确保列不接受NULL值。
- UNIQUE约束 - 讨论如何确保存储在一列或一组列中的数据在整个表内的行之间是唯一的。
- CHECK约束 - 在将数据存储到表中之前添加用于检查数据的逻辑的过程。
创建表空间
创建临时表空间
CREATE TEMPORARY TABLESPACE ttf_temp
TEMPFILE 'F:\oracledata\ttf_temp.dbf'
SIZE 50m
AUTOEXTEND on
NEXT 50m MAXSIZE 40960m
EXTENT MANAGEMENT LOCAL;
创建数据表空间
CREATE TEMPORARY TABLESPACE ttf_data LOGGING
DATAFILE 'F:\oracledata\ttf_data.dbf'
SIZE 50m
AUTOEXTEND on
NEXT 50m MAXSIZE 40960m
EXTENT MANAGEMENT LOCAL;
创建用户并指定表空间
CREATE USER USER1 IDENTIFIED BY 1234
DEFAULT TABLESPACE ttf_data
TEMPORARY TABLESPACE ttf_temp;
//给用户授予权限
GRANT CONNECT,RESOURCE,DBA to user1
创建表
创建表的一般语法格式如下:
CREATE TABLE <table_name> (
<column_name_1> <data_type_1>,
<column_name_2> <data_type_2>,
<column_name_N> <data_type_N>
);
====================================
示例如下:
CREATE TABLE authors (
id number(38),
name varchar2(100),
birth_date date,
gender varchar2(30)
);
创建表并且指定主键等约束:
//创建一个学生表
CREATE TABLE STU(
STUID NUMBER(10) PRIMARY KEY, //申明为主键
STUNAME VARCHAR2(20) NOT NULL , //不为null
STUSEX VARCHAR2(2) DEFAULT '男' CHECK(STUSEX IN('男','女'))
);
//创建一个课程表
CREATE TABLE COURSE(
COURSEID NUMBER(10) PRIMARY KEY,
COURSENAME VARCHAR2(20) NOT NULL,
COURSETYPE VARCHAR2(4)
);
//创建一个学生和课程的关联表
CREATE TABLE STU_COURSE(
ID NUMBER(10) PRIMARY KEY,
STUID NUMBER(10) REFERENCES STU(STUID), //外键
COURSEID NUMBER(10),
CONSTRAINT FF_COURSEid FOREIGN KEY(COURSEID) REFERENCES COURSE(COURSEID)
ON DELETE CASCADE //级联删除
)
添加数据--Insert
//插入的格式一般为
INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...)
INSERT INTO STU(id,name) VALUES(1,'张三');
//多表多行插入
INSERT [ALL] [condition_insert_clause]
[insert_into_clause values_clause] (subquery)
INSERT ALL
INTO stu(sid,sname) VALUES(ssid,ssname)
INTO tea(tid,tname) VALUES(ttid,ttname)
SELECT ssid,ssname,ttid,ttname,state FROM stu_tea WHERE state != 0
//有条件的INSERT
INSERT [ALL | FIRST]
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
......
[ELSE] [insert_into_clause values_clause]
Subquery;
INSERT ALL
WHEN id > 5 THEN INTO stu(sid,sname) VALUES(ssid,ssname)
WHEN id < 5 THEN INTO tea(tid,tname) VALUES(ttid,ttname)
ELSE INTO tt(sid,tid) VALUES(ssid,ttid)
SELECT ssid,ssname,ttid,ttname FROM stu_tea;
//旋转Insert(pivoting Insert)
create table sales_source_data (
employee_id number(6),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);
insert into sales_source_data values (176,6,2000,3000,4000,5000,6000);
create table sales_info (
employee_id number(6),
week number(2),
sales number(8,2)
);
看上面的表结构,现在将要sales_source_data表中的数据转换到sales_info表中,这种情况就需要使用旋转Insert
示例如下:
insert all
into sales_info values(employee_id,week_id,sales_mon)
into sales_info values(employee_id,week_id,sales_tue)
into sales_info values(employee_id,week_id,sales_wed)
into sales_info values(employee_id,week_id,sales_thur)
into sales_info values(employee_id,week_id,sales_fri)
select employee_id,week_id,sales_mon,sales_tue,
sales_wed,sales_thur,sales_fri
from sales_source_data;
从该例子可以看出,所谓旋转Insert是无条件 insert all 的一种特殊应用,但这种应用被oracle官方,赋予了一个pivoting insert的名称,即旋转insert
更新数据 -- Update
UPDATE 表名称 SET 列名称 = 新值 <WHERE 条件>
UPDATE stu SET sid = 1,sname = '张三' WHERE state = 0
文档未完,持续更新中
以上部分内容来自网络,有问题可以在下面评论,技术问题可以私聊我。