目录
1.1字符类型 (CHAR,NCHAR,VARCHAR2,VARCHAR,NVARCHAR2)
1.2数值类型 (NUMBER,FLOAT,INTEGER,BINARY_FLOAT,BINARY_DOUBLE)
2.6.【ADD CONSTRAINT 约束名 PRIMARY KEY (列名);】 CONSTRAINT 约束名 可不可以省略
2.9.select ,having ,group by 的执行顺序
3.4. Hierarchical Query(了解树形结构查询)
1.DB数据类
1.1字符类型 (CHAR,NCHAR,VARCHAR2,VARCHAR,NVARCHAR2)
char,varchar,varchar2,nchar……区别_To Begin,Begin -CSDN博客
1.2数值类型 (NUMBER,FLOAT,INTEGER,BINARY_FLOAT,BINARY_DOUBLE)
ORACLE数值类型详解--NUMBER、BINARY_FLOAT、BINARY_DOUBLE、BINARY_INTEGER、FLOAT_haiross的专栏-CSDN博客
---
---
---
1.3.日期类型
・DATE,
・TIMESTAMP,
・TIMESTAMP WITH TIME ZONE,
・TIMESTAMP WITH LOCAL TIME ZONE,
・INTERVAL YEAR TO MONTH,
・INTERVAL DAY TO SECOND
ORACLE日期数据类型_gaosaixing的博客-CSDN博客_oracle 日期类型
1.4.LOB类型 (Large Object)
ORACLE (BLOB、CLOB、NCLOB、BFILE)_weixin_30820077的博客-CSDN博客
----
2.DDL
2.1.表空间
---
oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。
---
---
---
创建表时,指定表空间
---
2.1.1 扩展表空间大小
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;
Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
手工改变已存在数据文件的大小 (使用【RESIZE】关键字)
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'
RESIZE 100M;
2.1.2.创建表空间,可以无限扩容
create tablespace SIRM2
datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 1024M --存储地址 初始大小1G
autoextend on next 10M maxsize unlimited --每次扩展10M,无限制扩展
2.2.触发器
创建触发器
---
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;
----
---
2.3.索引
Oracle存储索引的数据结构是B*树
Oracle索引(Index)介绍使用 - 十月围城小童鞋 - 博客园 (cnblogs.com)
B树索引是一个典型的树结构,其包含的组件主要是:
1) 叶子节点(Leaf node):包含条目直接指向表里的数据行。
2) 分支节点(Branch node):包含的条目指向索引里其他的分支节点或者是叶子节点。
3) 根节点(Root node):一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。
----
---
Oracle-index索引解读_小工匠-CSDN博客
---
---
---
2.4.Synonym 同义词
– 其实就是一个别名
– 创建同义词
create synonym stu for tb_stu;
select * from tb_stu;
select * from stu;
==
2.5.创建主键
- 主键约束(Primary Key Constraint):使用PRIMARY KEY关键字来定义表的主键约束。主键约束可以在创建表时添加到列上,或者可以作为ALTER TABLE语句的一部分来添加。
示例DDL语句:
CREATE TABLE 表名 ( 列名 数据类型 PRIMARY KEY, ... );
- CREATE TABLE时添加主键:可以通过在创建表时将PRIMARY KEY关键字添加到列定义之后来指定主键。
示例DDL语句:
CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, ... PRIMARY KEY (列名1, 列名2, ...) );
- ALTER TABLE添加主键:可以通过ALTER TABLE语句将主键约束添加到已存在的表中。
示例DDL语句:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名);
请注意,主键约束必须是唯一且非空的,一个表只能有一个主键。
2.6.【ADD CONSTRAINT 约束名 PRIMARY KEY (列名);】 CONSTRAINT 约束名 可不可以省略
在创建主键约束时,可以省略约束名,如下所示:
ALTER TABLE 表名 ADD PRIMARY KEY (列名);
如果省略约束名,数据库系统将自动生成一个随机的约束名。但是,建议为约束指定一个有意义的名字,以便于后续的管理和维护。
xx
2.7.truncate table 是什么意思
TRUNCATE TABLE
是一种 SQL 命令,用于快速删除表中的所有数据,同时保留表的结构。执行
TRUNCATE TABLE
后,表内的所有行都将被删除,但表结构、索引、约束等信息仍然保留。相较于DELETE
命令,TRUNCATE TABLE
更快,因为它是直接删除表中的数据页,而不是逐行删除。语法如下:
TRUNCATE TABLE 表名;
需要注意的是,执行
TRUNCATE TABLE
时无法恢复被删除的数据,因此在执行之前请确保数据备份或确定无需保留该表中的数据。此外,TRUNCATE TABLE
命令通常需要相应的权限才能执行。
xx
2.8.什么是唯一索引, 如何建立唯一索引
唯一索引是一种数据库索引,它的作用是确保在索引列中的值是唯一的,即每个索引键只能对应一个数据行。
唯一索引可以用于加快数据的查询速度,同时还可以起到数据完整性和约束的作用。当尝试向唯一索引列插入重复值时,数据库将会阻止此操作,并抛出错误。
在大多数数据库系统中,可以通过以下方式来创建唯一索引:
CREATE UNIQUE INDEX 索引名 ON 表名 (列名);
其中,
索引名
是索引的名称,表名
是要创建索引的表名,列名
是要创建索引的列名。例如,要为名为
users
的表的username
列创建唯一索引,可以执行以下命令:CREATE UNIQUE INDEX idx_username ON users (username);
需要注意的是,唯一索引要求索引列的值是唯一的,因此在创建唯一索引之前,应该确保索引列中的数据是唯一的。否则,创建唯一索引时将会失败。
xx
2.9.select ,having ,group by 的执行顺序
SELECT语句的执行顺序通常如下:
- FROM子句:指定要查询的表或视图。
- WHERE子句:筛选满足条件的行。
- GROUP BY子句:按指定的列对结果进行分组。
- HAVING子句:筛选满足条件的分组。
- SELECT子句:选择要显示的列或计算的表达式。
- ORDER BY子句:按指定的列进行排序。
- LIMIT/OFFSET子句:限制结果集的大小。
需要注意的是,有些数据库系统在执行顺序上可能会有细微的差异,但一般遵循以上的基本执行顺序。在执行SELECT查询时,GROUP BY子句和HAVING子句是结合使用的,用于对分组后的结果进行条件过滤。
具体来说,HAVING子句是在GROUP BY子句之后执行的,它对按分组进行聚合的结果进行筛选。在执行过程中,首先根据GROUP BY子句中指定的列进行分组,然后根据HAVING子句中的条件筛选出符合条件的分组。最后,根据SELECT子句中的列或表达式,生成最终的查询结果集。
以下是一个示例查询,展示了SELECT语句中HAVING和GROUP BY的执行顺序:
SELECT column1, SUM(column2) FROM table WHERE condition GROUP BY column1 HAVING condition
在这个例子中,首先根据WHERE子句的条件进行筛选,然后按照GROUP BY子句中的列进行分组。接着,在分组的基础上,使用HAVING子句的条件进行过滤。最后,根据SELECT子句中指定的列或表达式,生成最终的结果集。
xx
2.10.XXX
xx
2.11.XXX
xx
2.12.XXX
xx
===
3.DML
3.1.MERGE
Oracle数据库MERGE语句_周末未至-CSDN博客
---
MERGE INTO 表名
USING 表名/视图/子查询 ON 连接条件
-- 当匹配得上连接条件时
WHEN MATCHED THEN
更新、删除操作
-- 当匹配不上连接条件时
WHEN NOT MATCHED THEN
更新、删除、插入操作
---
例子:
-- 60号部门员工奖金表
CREATE TABLE dept60_bonuses
(
employee_id NUMBER,
bonus_amt NUMBER
);
INSERT INTO dept60_bonuses
VALUES
(103, 0);
INSERT INTO dept60_bonuses
VALUES
(104, 100);
INSERT INTO dept60_bonuses
VALUES
(105, 0);
-- 提交事务
COMMIT;
SELECT employee_id, last_name, salary
FROM hr.employees
WHERE department_id = 60;
---
MERGE INTO dept60_bonuses b
在这里定义了表,后面的 UPDATE ,Insert 操作中,就不用写表名了。
MERGE INTO dept60_bonuses b
USING (
SELECT employee_id, salary, department_id
FROM hr.employees
WHERE department_id = 60
) e
ON (b.employee_id = e.employee_id)
-- 当符合关联条件时
WHEN MATCHED THEN
-- 将奖金为0的员工的奖金调整为其工资的20%
UPDATE
SET b.bonus_amt = e.salary * 0.2
WHERE b.bonus_amt = 0
-- 删除工资大于7500的员工奖金记录
DELETE
WHERE (e.salary > 7500)
-- 当不符合连接条件时
WHEN NOT MATCHED THEN
-- 将不在部门为60号的,且不在dept60_bonuses表的用工信息插入,并将其奖金设置为其工资的10%
INSERT
(b.employee_id, b.bonus_amt)
VALUES
(e.employee_id, e.salary * 0.1)
WHERE (e.salary < 7500)
---
3.2.JOIN
1. inner join(等值连接) 只返回两个表中联结字段相等的行
2. left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
3. right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
17MyCat - 分片join(join 的概述)_阿甘兄-CSDN博客
---
---
符号连接 (+)
SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b
SELECT a.*, b.* from a = b(+)就是一个左连接,等同于select a.*, b.* from a left join b
Oracle 外连接
(1)左外连接 (左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3.3Join的分类
1、内联接
(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。
2、外联接
外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
3、交叉联接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
3.4. Hierarchical Query(了解树形结构查询)
hierarchical [ˌhaɪəˈrɑːkɪkl] 等级制的; 按等级划分的; 等级制度的;
Hierarchical query-层次查询之START WITH CONNECT BY用法 - 新一 - 博客园 (cnblogs.com)
3.5.Sort (了解ORDER语法。ROWID的用法)
・order by
・rowid
---
ORACLE中的rowid用法 - struggle&小白 - 博客园 (cnblogs.com)
4.事物
4.1.事物开启,提交,设定回归点。
xxx
4.2.锁
・共享锁(SHARE) ,
・共享行排他(SHARE ROW EXCLUSIVE) ,
・排他(EXCLUSIVE),
・行共享 (ROW SHARE),
・行排他(ROW EXCLUSIVE
ーーー