oracle-ddl创建表和管理表

oracle基础
oracle单行函数
oracle多表查询
oracle分组函数
oracle子查询
oracle创建表和管理表

-- 常见的数据库对象
/*
	表 			基本的数据存储集合,由行和列组成
	视图			从表中抽出的逻辑上相关的数据集合
	序列			提供有规律的数值
	索引			提高查询的效率
	同义词		给对象起别名

*/
-- 查询用户创建的表
SELECT * FROM user_tables;

-- 查询用户自己的数据库对象

SELECT * FROM user_catalog;

-- 查询用户自己定义的数据库对象

SELECT DISTINCT object_type FROM user_objects;


-- 表和列命名规则 --
/*
	1.必须以字母开头
	2.必须在1-30个字符之间
	3.只能包含 A-Z a-z 0-9 _ $ #
	4.不能重名
	5.不能是Oracle关键字
*/

-- 数据类型 --
/*
	加*为常用数据类型
	VARCHAR2(size)* 	可变字符数据
	CHAR(size)*			定长字符数据
	NUMBER(p,s)*			可变长数值数据
	DATE*            日期型数据
	LONG						可变长字符数据,最大可达到2G
	CLOB            字符数据,最大可达到4G
	RAW(LONG RAW) 	原始的二进制数据
	BLOB*						二进制数据,最大可达到4G
	BFILE           存储外部文件的二进制数据,最大可达到4G
	ROWID           行地址
	
*/

-- 创建表 CREATE TABLE ... 建表之前看看有没有建表权限,我用scott用户有该权限
-- ok
-- 方式1
CREATE TABLE emp1(
	id NUMBER(10), --最大10个9
	name VARCHAR2(20), --20个字符
	salary NUMBER(10,2), --小数点保留2位
	hire_date DATE --日期类型不用指定大小
);

SELECT * FROM user_tables WHERE LOWER(TABLE_NAME)  = 'emp1'


-- 方式2(类似复制表)
-- ok
CREATE TABLE emp2
AS
SELECT EMPLOYEE_ID id ,LAST_NAME name,HIRE_DATE,SALARY 
FROM EMPLOYEES

SELECT * FROM user_tables WHERE LOWER(TABLE_NAME)  = 'emp2'
-- 表头和数据都复制过来了
SELECT * FROM emp2;

/*
	ALTER TABLE
	1.追加新的列
	2.修改现有的列
	3.为新追加的列定义默认值
	4.删除一个列
	5.重命名表得一个列名

*/

-- 为emp1表新增一列
-- ok 
ALTER TABLE emp1
ADD(email VARCHAR2(20))

SELECT * from emp1;

-- 为emp1表id列 修改成15长度
ALTER TABLE emp1
MODIFY(id NUMBER(15))


--navicate,desc用不了,plsql可以


-- 为emp1表salary默认值改为2000

ALTER TABLE emp1
MODIFY(SALARY NUMBER(20,2) DEFAULT 2000)


-- 为emp2表name列修改成number类型

SELECT * FROM emp2
-- column to be modified must be empty to change datatype  必须是空的列才可以修改数据类型
ALTER TABLE emp2
MODIFY(name NUMBER(20))


-- 删除emp1的email列
-- ok
ALTER TABLE emp1
DROP COLUMN email;


-- 重命名emp1表 列salary重命名为sal

ALTER TABLE emp1
RENAME COLUMN SALARY to sal

-- 删表(谨慎使用)

-- 删除emp1这个空表

DROP TABLE emp1;

-- 清空数据,开发测试的时候比较常用
truncate TABLE emp2;

SELECT * FROM emp2;
-- 只要update delete INSERT 这种sql操作才可以回滚。
rollback;


-- 练习

-- 51. 利用子查询创建表 myemp, 
-- 1)该表中包含 employees 表的 employee_id(id), last_name(name), salary(sal), email 字段

CREATE TABLE myemp
AS
SELECT EMPLOYEE_ID id,LAST_NAME name,SALARY sal,EMAIL
FROM EMPLOYEES

SELECT * from myemp

-- 2). 创建表的同时不包含 employees 中的记录, 即创建一个空表

CREATE TABLE myemp2
AS
SELECT EMPLOYEE_ID id,LAST_NAME name,SALARY sal,EMAIL
FROM EMPLOYEES WHERE 1=2 --注入攻击

SELECT * from myemp2



-- 52. 对现有的表进行修改操作

-- 	1). 添加一个新列

ALTER TABLE myemp
add(HIRE_DATE DATE DEFAULT SYSDATE)

SELECT * from myemp

-- 	3). 修改现有列的名字

ALTER TABLE myemp
RENAME COLUMN tdate to create_date

-- 4). 删除现有的列

ALTER TABLE myemp
DROP COLUMN create_date


-- 53. 清空表(截断: truncate), 不能回滚!!	

truncate TABLE myemp;


-- 54. 
-- 
-- 1). 创建一个表, 该表和 employees 有相同的表结构, 但为空表:  

CREATE TABLE myemp3
AS
SELECT * FROM EMPLOYEES WHERE 1<>1

SELECT * FROM myemp3

-- 2)把 employees 表中 80 号部门的所有数据复制到 emp2 表中: 

SELECT * FROM emp2;
-- 用*号可能出现  too many values ,因为 emp2与 EMPLOYEES表列数据不匹配
INSERT INTO emp2 SELECT EMPLOYEE_ID id,LAST_NAME name,HIRE_DATE,SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 80



/*
1.	创建表dept1
name	Null?		type
id						Number(7)
name					Varchar2(25)

*/
CREATE TABLE dept1(
id NUMBER(7),
name VARCHAR2(25)
)

SELECT * FROM dept1;

-- 2.	将表departments中的数据插入新表dept2中

CREATE TABLE dept2
AS
SELECT * FROM DEPARTMENTS

SELECT * FROM dept2;

/*
3.	创建表emp5
name		Null?		type
id							Number(7)
First_name			Varchar2(25)
Last_name				Varchar2(25)
Dept_id					Number(7)
*/



CREATE TABLE emp5(
 id NUMBER(7),
 FIRST_NAME VARCHAR2(25),
 LAST_NAME VARCHAR2(25),
 dept_id NUMBER(7)
)


--4.	将列Last_name的长度增加到50

ALTER TABLE emp5
MODIFY(LAST_NAME VARCHAR2(50))


-- 5.	根据表employees创建employees2

CREATE TABLE EMPLOYEES2
AS
SELECT * FROM EMPLOYEES

SELECT * FROM EMPLOYEES2

-- 6.	删除表emp5
SELECT * FROM emp5;
DROP TABLE emp5;


-- 7.	将表employees2重命名为emp5

RENAME  EMPLOYEES2 to emp5


-- 8.	在表dept和emp5中添加新列test_column,并检查所作的操作

SELECT * FROM dept;

SELECT * FROM emp5;

ALTER TABLE dept 
add(test_column VARCHAR2(20))

ALTER TABLE emp5 
add(test_column VARCHAR2(20))
--desc dept


-- 9.	在表dept和emp5中将列test_column设置成不可用,之后删除
-- ok
ALTER TABLE DEPT
set unused COLUMN test_column
-- ok
ALTER TABLE DEPT
DROP unused COLUMN
-- ok
ALTER TABLE emp5
set unused COLUMN test_column
-- ok
ALTER TABLE emp5
DROP unused COLUMN

SELECT * FROM dept;

SELECT * FROM emp5;



-- 10.	直接删除表emp5中的列 dept_id
--ok
ALTER TABLE EMP5
add(dept_id NUMBER(20))
--ok
ALTER TABLE EMP5
DROP COLUMN dept_id

SELECT * FROM emp5;







猜你喜欢

转载自blog.csdn.net/qq_38188047/article/details/107207519