SQL堂上作业九
表的建立
我们可以用CREATE TABLE xxx来建表
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
然后,我们用DESCRIBE dept来查看该表的格式
输出如下:
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
数据库中表名的查询
我们可以用以下命令进行查询:
SELECT table_name
FROM user_tables ;
输出将会是若干个表的名字,节选如下:
TABLE_NAME
------------------------------------------------------------
AQ$_KUPC$DATAPUMP_QUETAB_G
AQ$_AQ_PROP_TABLE_G
AQ$_AQ$_MEM_MC_G
AQ$_ALERT_QT_G
AQ$_SCHEDULER_FILEWATCHER_QT_G
AQ$_SCHEDULER$_REMDB_JOBQTAB_G
AQ$_SCHEDULER$_EVENT_QTAB_G
RECENT_RESOURCE_INCARNATIONS$
CHNF$_GROUP_FILTER_IOT
CHNF$_CLAUSES
RULE_SET_ROP$
TABLE_NAME
------------------------------------------------------------
RULE_SET_IOT$
RULE_SET_PR$
UTL_RECOMP_COMPILED
UTL_RECOMP_SORTED
已选择950行。
我们可以下列命令查询对象名
SELECT DISTINCT object_type
FROM user_objects ;
输出如下:
OBJECT_TYPE
--------------------------------------
EDITION
TABLE SUBPARTITION
INDEX PARTITION
CONSUMER GROUP
SEQUENCE
TABLE PARTITION
SCHEDULE
QUEUE
RULE
PROCEDURE
OPERATOR
OBJECT_TYPE
--------------------------------------
LOB PARTITION
DESTINATION
WINDOW
SCHEDULER GROUP
LOB
PACKAGE
PACKAGE BODY
LIBRARY
PROGRAM
RULE SET
CONTEXT
OBJECT_TYPE
--------------------------------------
TYPE BODY
TRIGGER
JOB CLASS
UNDEFINED
DIRECTORY
TABLE
INDEX
VIEW
FUNCTION
SYNONYM
CLUSTER
OBJECT_TYPE
--------------------------------------
TYPE
RESOURCE PLAN
JOB
EVALUATION CONTEXT
已选择37行。
我们可以用下列命令,输出TABLES,VIEWS等内容
SELECT *
FROM user_catalog ;
输出足足有48xx行,就不列举了
表中数据类型
表中可以允许的数据类型如下图所示
Data Type | Description |
---|---|
VARCHAR2(size) | Variable-length character data |
CHAR(size) | Fixed-length character data |
NUMBER(p,s) | Variable-length numeric data |
DATE | Date and time values |
LONG | Variable-length character data up to 2 gigabytes |
CLOB | Character data up to 4gigabytes |
RAW and LONG RAW | Raw binary data |
BLOB | Binary data up to 4 gigabytes |
BFILE | Binary data stored in an external file; up to 4 gigabytes |
ROWID | A 64 base number system representing the unique address of a row in its table. |
懒得翻译了qwq,大家直接看吧
子查询建表
我们可以用SELECT子句+CREATE TABLE,基于已有的数据进行建表
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM employees
WHERE department_id = 80;
表的类型如下:
名称 是否为空? 类型
----------------------------------------------------- -------- ------------------------------------
EMPLOYEE_ID NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(25)
ANNSAL NUMBER
HIRE_DATE NOT NULL DATE
ALTER命令
ALTER命令可以对表的一些默认参数进行修改
比如说:ALTER TABLE xxx ADD可以添加一个新列,还可以用MODIFY修改,DROP去掉一列等
ADD操作
ADD可以给一个表新增一个列,并且指定这个列的名字
我们准备给表DEPT80,新增一个叫做JOB_ID的列,命令如下:
ALTER TABLE dept80
ADD (job_id VARCHAR2(9));
表的类型变更为下文:
名称 是否为空? 类型
----------------------------------------------------- -------- ------------------------------------
EMPLOYEE_ID NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(25)
ANNSAL NUMBER
HIRE_DATE NOT NULL DATE
JOB_ID VARCHAR2(9)
MODIFY操作
MODIFY可以用于对一个列的类别进行修改
假设我们要将LAST_NAME这一列,修改为其他的数据类型,命令如下
ALTER TABLE dept80
MODIFY (last_name VARCHAR2(30));
表的类型变更为了这样:
名称 是否为空? 类型
----------------------------------------------------- -------- ------------------------------------
EMPLOYEE_ID NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(30)
ANNSAL NUMBER
HIRE_DATE NOT NULL DATE
JOB_ID VARCHAR2(9)
DROP操作
我们可以用DROP命令删除掉某个表的一列
ALTER TABLE dept80
DROP COLUMN job_id;
表的类型变更为如下图所示:
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(30)
ANNSAL NUMBER
HIRE_DATE NOT NULL DATE
UNUSED标签
对于不使用的行,我们可以打上UNUSED标签,以便于DROP
ALTER TABLE dept80
SET UNUSED (hire_date);
表的删除
我们可以用DROP命令删表
DROP TABLE dept80;
表的重命名
我们可以用RENAME命令给表重命名
RENAME dept TO detail_dept;
表的清空
我们可以用TRUNCATE命令对表进行清空
TRUNCATE TABLE student;
这个命令将会把表student清空。
警告:清空命令可以对抗rollback,被清空的表无法通过rollback恢复。
表的注释
我们可以通过COMMENT命令给表添加注释
COMMENT ON TABLE employees
IS 'Employee Information';