目录
一,Oracle的sql
1,SQL
结构化查询语言(Structured Query Language)简称SQL。是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询,更新和管理关系数据库系统的语言。
2,Oracle的SQL
DDL(Data Definition Language ) | 数据定义语言
| 数据库对象的创建,修改,删除的操作。主要对象有数据库,数据表,视图,索引。 |
DML(Data Manipulation Language ) | 数据操作语言 | 对数据库表中数据进行增加,删除,修改的操作 |
DCL(Data Control Language) | 数据控制语言
| 对数据库中对象权限进行权限设置和取消等操作。只有系统管理员才有权利执行对权限的操作,可以通过设置不同的权限提高数据库的安全性。 |
TCL(Transaction Control Language) | 事务控制语言
| 事务提交回滚 |
DQL(Data Query Language) | 数据库查询语言 | 对数据库表中数据进行查询,可以单表或夺标并且可以按不同的条件检索 |
3,常用的DDL
CREATE TABLE | 创建数据库表 |
CREATE INDEX | 创建数据库表的索引 |
DROP TABLE | 删除数据库表 |
DROP INDEX | 删除数据库表的索引 |
TRUNCATE | 删除表中的所有行 |
ALTER TABLE | 更改表结构,增加,修改,删除列 |
ALTER TABLE ADD CONSTRAINT | 在已有表上增加约束 |
4,常用的DML
INSERT | 添加数据到数据库中 |
UPDATE | 修改数据库中的数据 |
DELETE | 删除数据库中的数据 |
SELECT | 选择查询数据 |
5,常用的DCL
GRANT | 将权限或角色授予用户或其他角色 |
REVOKE | 从用户或数据库角色回收权限 |
LOCK | 对数据库的特定部分进行锁定 |
6,常用的TCL
COMMIT | 提交事务处理 |
ROLLBACK | 事务处理回退 |
SAVEPOINT | 设置保存点 |
二,常用的数据值类型
1,字符类型
数据类型 | 取值范围(字节) | 说明 |
VARCHAR2 | 0~4000 | 可变长度的字符串 |
NVARCHAR2 | 0~1000 | 用来存储Unicode字符集的变长字符型数据 |
CHAR | 0~2000 | 用于描述定长的字符型数据 |
NCHAR | 0~1000 | 用来存储Unicode字符集的定长字符型数据 |
LONG | 0~2GB | 用来存储边长的字符串 |
VARCHAR2 与 NVARCHAR2区别
VARCHAR2 最多可以可以存入4000个字母,或最多存入2000个汉字(数据库字符集编码是GBK时,varchar2最多能存放2000个汉字,数据库字符集编码是UTF-8时,那就最多只能存放1333个汉字)
NVARCHAR2(size),size最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。并且NVARCHAR2不受数据库字符集的影响。
2,数值类型
数据类型 | 取值范围(字节) | 说明 |
NUMBER[(P,[S])] | p最大值是38位(十进制) | P 表示精度,S表示小数点的位数 可以存储证书,浮点数等数值类型 |
FLOAT | 用来存储126位数据(二进制) | 存储的精度是按二进制计算的,精度范围为二进制的1~126,在转化为十进制时需要乘以0.30103 |
3,日期类型
数据类型 | 说明 |
DATE | 存储日期和时间,范围在公元前4712年1月1日到公园9999年12月31日 |
TIMESTAMP | 存储日期和时间,比DATE更精确,可以精确到小数秒,还能显示当前是上午还是下午 |
4,LOB类型
数据类型 | 取值范围(字节) | 说明 |
CLOB | 4GB | 存储字符集数据 |
BLOB | 4GB | 存储二进制数据库(图形,视频剪辑和声音文件) |
三,约束的使用
约束时保证数据库表数据完整性和一致性的手段,常用的有主键约束,外键约束,唯一约束,检查约束,非空约束。
1,主键约束
主键约束在每个表中只有一个但可以由多个列组成.
1)创建表时添加
CREATE TABLE table_name(
column_name1 datatype,
PRIMARY KEY(column_name1)
);
2)修改表时添加
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(column_name);
3)移除主键约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
2,外键约束
外键约束可以保证使用外键约束的数据库列与所引用的主键约束的数据列一致,一个表里可以存在多个。
1)创建表时添加
CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCE table_name (column_name) ON DELETE CASCADE;
constraint_name:外键约束的名字
FOREIGN KEY(column_name):指定外键约束的列表
REFERENCE :要引用的表名(列名)
ON DELETE CASCADE:设置级联删除,当主键的字段被删除时,外键所对应的字段也被同时删除。
2)修改表时添加
ALTER CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCE table_name (column_name) ON DELETE CASCADE;
3)移除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
3,CHECK约束
CHECK约束是检查约束,能够规定每一个列能够输入的值,以保证数据的正确性。
1)创建表时添加
CONSTRAINT constraint_name CHECK(CONDITION);
2)修改表时添加
ADD CONSTRAINT constraint_name CHECK(CONDITION);
3)移除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
4,UNIQUE约束
UNIQUE约束是唯一约束,可以设置在表中输入的字段值都是唯一的,这个约束和主键约束非常相似。不同的是同一个表中唯一约束可以由多个,而主键只能有一个。
1)创建表时添加
CONSTRAINT constraint_name UNIQUE(column_name);
2)修改表时添加
ADD CONSTRAINT constraint_name UNIQUE(column_name);
3)移除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
5,NOT NULL约束
NOT NULL约束就是非空约束,经常在创建表时添加非空约束以确保字段必须要输入值。
1)创建表时添加
column_name datatype [NOT NULL|NULL];
2)修改表时添加
ADD TABLE table_name MODIFY column NOT NULL;
3)移除约束
ADD TABLE table_name MODIFY column NULL;
四,常用的DDL
1,使用CREATE TABLE创建表
创建表时,设计数据表的结构,确定各个列的数据类型,数值,字符,日期还是图像等其他类型。
CREATE TABLE table_name(
column_name datatype [null|not null],
column_name datatype [null | not null],
...
[conatraint]
)
table_name:数据库表名称,数据库中唯一
column_name:表列名,表中唯一
datatype:存放数据的数据类型
[null|not null]:该字段是否为空
[conatraint]:为表中的列设置约束(主键,外键,检查等)
2,使用ALTER语句修改表
ALTER TABLE table_name ADD [ MODIFY |DROP COLUMN ] column_name ;
ADD:向表中添加列。
MODIFY :修改表中已存在的列信息。
DROP COLUMN :删除表中的列,需要加上 CASCADE CONSTRAINTS,把与该列有关的约束也一并删除。
3,使用DROP语句删除表
DROP TABLE table_name;
五,DML和DQL的使用
1,向表中添加数据
1)用INSERT添加表数据
INSERT INTO table_name(column_name1,column_name2,...)
VALUES(data1,data2,...);
column_name1:指定表中要添数据的列名,可以时1个到多个。默认不写是全部。
data1:列对应的数据值,跟列的参数格式一样。
2)通过其他数据表向表中添加数据
INSERT INTO table_name1(column_name1,column_name2,...)
SELECT column_name1,column_name2,... FROM table_name2;
table_name1:目标表的表名,要插入数据的表名。
table_name2:数据来源表。必须与插入数据表列和数据类型完全一致。
3)创建表的同时添加数据
CREATE TABLE table_name1 AS
SELECT column_name1,column_name2,... FROM table_name2;
table_name1:要创建的目标表的名称。
table_name2:创建目标表时数据的来源表,可以用*代表全字段。
2,用UPDATE修改表数据
UPDATE table_name
SET column_name1 = data1 , column_name2 = data1 ,...
[WHERE condition];
column_name1:要修改数据列的字段名,可以是一个或者多个。
data1:要赋予字段的新值,数据类型一致。
WHERE:条件,可以根据条件决定是否修改,如果省略了WHERE语句就代表修改表中该字段的所有值。
3,用DELETE删除表数据
DELETE FROM table_name [WHERE condition];
4,用SELECT查询表数据
SELECT column_name1,column_name2,... FROM table_name[WHERE condition];
六,其他数据操作语句
1,TRUNCATE语句
TRUNCATE语句与DELETE语句一样都时用来完成删除数据库表中数据的,但二者时由区别的,使用TRUNCATE语句删除表中的记录都是要把表中的记录全部删除,但速度比使用DELETE删除表中的数据更快。
TRUNCATE FROM table_name ;
2,MERGE语句
MERGE语句与UPDATE语句的功能类似,都是修改数据表中数据的。使用MERGE语句可以对数据表同时进行增加和修改的操作。
MERGE [INTO] table_name1
USING table_name2
ON {condition}
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
table_name1:修改或添加的表
table_name2:参照更新的表
condition:table_name1和table_name2之间的关系或条件
merge_update_clause:如果table_name2中的条件匹配就执行更新操作
merge_insert_clause:如果条件不匹配,就执行增加操作。
merge_update_clause和 merge_insert_clause都是可以省略的,但操作时只能省略一个,如果两个都省略,那么MERGE 语句就失去意义。
省略增加语句,首先分别查询table_name1和table_name2表中的全部数据,然后使用MERGE语句进行更新操作。如果更新的条件时两各表的ID相同,当满足条件时把table_name2满足条件的数据更新到table_name1对应的数据列中。
省略修改语句,首先分别查询table_name1和table_name2表中的全部数据,然后使用MERGE语句进行增加操作。如果新增的条件是两个表的ID不同,当满足条件时向table_name1增加在table_name2中的数据。
增加和修改同时进行,增加和修改同时进行是指当ON后面的条件满足时执行修改操作,不满足时执行增加的操作。首先也是分别查询table_name1和table_name2表中的全部数据,然后使用MERGE语句进行增加和更新操作。当满足条件时把table_name2满足条件的数据更新到table_name1对应的数据列中,当不满足条件时向table_name1增加在table_name2中的数据。