复制表
创建表并复制其他表的数据
CREATE TABLE EMP_BAK2 AS SELECT * FROM EMP;
创建表,只复制其他表的结构
CREATE TABLE EMP_BAK3 AS SELECT * FROM EMP WHERE 1 = 2;
在一个空表中复制另一个表中的数据
INSERT INTO EMP_BAK3 SELECT * FROM EMP;
后面可以加条件 WHERE XXXX,如果只插入某个字段的话,需要对应数据类型
注意在复制表数据的时候:1.数据类型要一致 2.字段数据量要一致
表结构的维护
表结构:字段类型,数据长度,约束
字段类型的修改:在修改时,要保证该字段的数据列为空
ALTER TABLE 表名 MODIFY (字段名 数据类型(长度));
在使用修改字段数据类型的时候,首先对要对表的数据进行备份,备份使用的是创建表并备份表的数据;其次是蒋表中的目标数据字段列置空,最后是修改表的字段类型
UPDATE EMP 表名 SET 字段名 ENAME = NULL;
数据长度的修改与字段类型一样的方式,增加精度可以直接增加,但是减少精度需要先清空列数据
增加表字段:
ALTER TABLE 表名 ADD(字段名 数据类型(长度));
删除表字段:
ALTER TABLE 表名 DROP COLUMN 字段名;
修改字段名:
ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 新字段名;
修改约束
约束:给某一个字段加上一些特定的属性,比如字段唯一,非空
1.主键约束:唯一且非空。一张表只能有一个主键,用来唯一确定表中的每一行。
添加主键约束的语法:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(字段名);
2.唯一约束:唯一可为空
添加唯一约束的语法:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(字段名);
3.非空约束:非空可重复
增加非空约束的语法:
ALTER TABLE 表名 MODIFY 字段名 NOT NULL;
需要提交和回滚的命令:INSERT, DELETE, UPDATE (DML语句)
不需要提交回滚的命令:CREATE, ALTER, TRUNCATE, DROP (DDL语句)
DDL 数据库定义语言:CREATE, ALTER, DROP
DML 数据库操纵语言:INSERT, UPDATE, DELETE
DQL 数据库查询语言:基本查询语言, ORDER BY, GROUP BY
TCL 事务控制语言:COMMIT, ROLLBACK
DCL 数据库控制语言:GRANT, REVOKE
伪表、伪列
也就是DUAL表,表中只有一行数据,可以有很多列
伪列有两列,ROWNUM和ROWID
1.ROWNUM 表示的是数据插入时的顺序,返回的查询结果是行号,一般用来做分页查询
ROWNUM只能使用小于运算符,不能使用大于等于或者是范围运算符的
如果想适用范围查询的话,必须先把伪列ROWNUM变成可用字段
示例:查询出工资排名在5-10之间的人
SELECT *
FROM (SELECT E.*, ROWNUM RN FROM (SELECT * FROM EMP ORDER BY SAL DESC) E ) T
WHERE RN BETWEEN 5 AND 10 ORDER BY RN ASC;
2. ROWID 返回的是每一行数据的物理地址,唯一,一般用来是删除重复值
先按字段分组,找出该字段里的最大最小值,删除重复数据,一般用不在最大/最小值的范围里查询去删除
DELETE FROM EMP_BF WHERE ROWID NOT IN (
SELECT MAX(ROWID) FROM EMP_BF GROUP BY EMP_BF.EMPNO)
Q:如何找出某一个字段,重复的数据有几条,比如JOB字段
A:计数器大于1的时候则是有重复值的情况
SELECT JOB, COUNT(1) FROM EMP WHERE COUNT(1) > 1;
同字段多条件判断
CASE 关键字
CASE 字段 WHEN...... THEN ....ELSE.....END (AS 别名)
语法:当字段为什么的时候,则输出什么,ELSE不写,默认空值
CASE 字段 WHEN 条件1 THEN 返回值1
WHEN 条件2 THEN 返回值2
WHEN 条件3 THEN 返回值3
ELSE 返回值 --- 以上条件均不满足的时候
END (AS 别名)
DECODE 关键字
使用效果和CASE WHEN是一样的
DECODE (字段名,值1,返回值1,值2,返回值2,值3,返回值3.....,值N-1,返回值N-1, 返回值N);