Oracle中的语句

一、 DQL 语句

DQL(Data Query Language)语句:数据查询语言,主要是对数据进行查询操作。
常用关键字有 SELECT、FROM、WHERE 等。

二、 DDL 语句

DDL(Data Definition Language)语句: 数据定义语言,主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。
常用的语句关键字有 CREATE、DROP、ALTER 等。

三、 DML 语句

DML(Data Manipulation Language)语句: 数据操纵语言,主要是对数据进行增加、删除、修改操作。

常用的语句关键字有 INSERT、DELETE、 UPDATE等。

四、 DCL 语句

DCL(Data Control Language)语句: 数据控制语言,主要是用来设置/更改数据库用户权限。
常用关键字有 GRANT、REVOKE 等。

DDL语句

创建表

语法:CREATE TABLE 表名 (列名1 数据类型(精度),列名2 数据类型(精度),…)

字段之间用逗号隔开

建表时,里面至少有一列

1
CREATE TABLE C;--报错

已经创建的表不能重复创建(在一个用户下)

1
2
SELECT * FROM A;
CREATE TABLE A(SNAME CHAR(10));

同一个用户下,表名不能重复;

同一个表中,列名不能重复

1
CREATE TABLE C(ENAME CHAR(10),ENAME NUMBER(10));--报错

1.复制表

(不会复制约束)

语法:CREATE TABLE 表名 AS SELECT 想要复制的字段 FROM 被复制的表名 (WHERE 条件)

1
CREATE TABLE EMPA AS SELECT * FROM EMP;

删除表

语法:DROP TABLE 表名;

已经删除的表不能再被删除

1
DROP TABLE EMPA ;

表只能一张一张的删

1
2
DROP TABLE EMPA,EMPB;--不能同时删除多张表
DROP TABLE EMPA EMPB;--不能同时删除多张表

1.删除表内容

语法:TRUNCATE TABLE 表名;

DELETE FROM 表名;

区别:DELETE–删除所有记录,表结构还在,写日志,可以恢复的,速度.

TRUNCATE–删除所有记录,表机构还在,不写日志,无法找回删除的记录,速度.

只能删除表内全部数据

1
TRUNCATE TABLE EMPA;

修改表

1.ADD增加字段

语法:ALTER TABLE 表名 ADD(字段1 数据类型,字段2 数据类型,…..)

注意:

  1. 如果表内有同名字段,则不能再增加。
  2. 列名(表名)可以为中文(不建议)。
  3. 如果只添加一个字段,可以省略括号(不建议)
1
2
SELECT * FROM EMPA;
ALTER TABLE EMPA ADD(姓名 CHAR(10));--课后练习,创建表或者增加列的时候,名字能不能为中文,数字,特殊符号

2.MODIFY修改数据类型

语法:ALTER TABLE 表名 MODIFY(字段1 要被修改成的数据类型,字段2 要被修改成的数据类型,…..)

1.列内有数据时,不可以修改成不同类别的数据类型,但是同类的可以修改;

1
2
ALTER TABLE EMPB MODIFY(ENAME CHAR(10));
ALTER TABLE EMPB MODIFY(ENAME NUMBER(10));--报错

2.列内没有数据时,可以修改成任意的数据类型,任意总长度

1
ALTER TABLE EMPA MODIFY(EMPNO DATE);

3.列内有数据时,能够修改数据总长度(精度),能变得更长,不能变得更短(回不去了),可变长数据类型除外(只要不比内部数据短就行)。

1
2
3
ALTER TABLE EMPB MODIFY(ENAME CHAR(11));

ALTER TABLE EMPB MODIFY(ENAME VARCHAR(7));--报错,要减小精度或标度,则要修改的列必须为空

3.删除列

语法:ALTER TABLE 表名 DROP COLUMN 列名;–COLUMN本意是列的意思

注意:

  1. 要删除的列必须存在
  2. 无法删除表内的最后一列,(例如:有8列 随机删除7列后,剩下一列不能删)

删除一列

1
ALTER TABLE table_name DROP COLUMN column_name;

删除多列

1
ALTER TABLE table_name DROP (column_1,column_2,...);

4.重命名

重命名:

语法:ALTER TABLE 旧表名 RENAME TO 新表名;

1
alter table emapa rename to depta

重命名:

语法:ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名;

1
alter table emapa rename column a to b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
例如:ALTER TABLE EMPA RENAME TO DEPTA;

语法:ALTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名;

例如:ALTER TABLE EMPB RENAME COLUMN DEPTNO TO HANQIANG;
SELECT HANQIANG FROM EMPB;

问题:
1.新旧表名、列名可不可以一样?--不可以
2.新表名、列名能不能是中文,特殊符号,数字?
ALTER TABLE DEPTA RENAME TO 中文;

ALTER TABLE 中文 RENAME TO 中文1;

ALTER TABLE 中文1 RENAME TO #;--报错

ALTER TABLE 中文1 RENAME TO '#';--报错

ALTER TABLE 中文1 RENAME TO "#";--可以是特殊符号
SELECT * FROM "#";

ALTER TABLE "#" RENAME TO 1;--报错

ALTER TABLE "#" RENAME TO '1';--报错

ALTER TABLE "#" RENAME TO "1";--可以是数字
SELECT * FROM "1";

--1.RENMAE后面有TO
--2.旧的在前,新的在后
--3.表名、列名可以是字母,中文,特殊符号、数字,但是不建议写后面两个,后面两个书写时需要加上双引号

5.修改表状态

只读 READ ONLY

可以对表名进行操作(修改) 不能对表内数据进行修改操作

只读状态下可以删除表

读写 READ WRITE

1
语法: ALTER TABLE 表名 READ ONLY / READ WRITE;
1
2
3
4
5
6
7
8
9
10
ALTER TABLE EMPB RENAME TO T;--只读状态下能对表名进行修改操作
SELECT * FROM EMPB;
SELECT * FROM T;

ALTER TABLE T RENAME COLUMN HANQIANG TO A;--只读状态下不能对表内数据进行修改操作

ALTER TABLE T READ WRITE;
SELECT * FROM T;

DROP TABLE T;--只读状态下可以删除表

隐式提交:

DML语言,比如update,delete,insert等修改表中数据的需要commit;
DDL语言,比如create,drop等改变表结构的,就不需要写commit(因为内部隐藏了commit);