ORACLE提供的SQLPLUS,可以让你很方便的练习SQL,上个月我通过在SQLPLUS上的不断摸索学习,感觉收获颇多,从中发现并学习到了很多细节性的东西,在这里我把这些心得拿来与大家分享,希望对初学SQL的朋友会有点帮助。
当你很随意的在SQLPLUS用了几个create table语句,成功的建立了几个基本表以后,在成就感得到满足之余,你是否想到,这几个基本表是自己建立的,对他们中的每一个你都是了如指掌,但是假如基本表建的多了,或者其他人来到这里如何才能知道这上面究竟存在着哪些表呢?其实在ORACLE中有这样两个表:user_tables、all_users;我们通过运行下面的语句,很轻松的得到自己想要得信息。
SELECT table_name FROM user_tables; 可以得到所要知道的表名,
SELECT username FROM all_users ; 可以得到所要知道的用户。
在ORACLE中还有其他几个重要的表,现在你可以用上面的语句自己探索究竟哪些表有更重要的信息了。
另外SQL没有提供删除属性列的语句,那么我们必须间接的实现这一功能,具体该如何实现呢?为了便于描述,我们先做一些假设,假设已经建立了Student表,其中有下列数据:
Sno Sname Ssex Sage Sdept
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王敏 女 18 MA
95004 张力 男 19 IS
Student表由 学号(Sno),姓名(Sname),性别(Ssex),年龄(Sage),所在系(Sdept)五个属性组成,其中Sno为主码,索引号隐含不显示。各属性定义如下
Sno CHAR(5) NOT NULL UNIQUE,/*长度为5的定长字符串,取值唯一且不为空*/
Sname CHAR(20) UNIQUE , /*长度为20的定长字符串,取值唯一*/
Ssex CHAR(2) , /*长度为2的定长字符串*/
Sage INT,/*全字长二进制整数*/
Sdept CHAR(15) /*长度为15的定长字符串*/
对于这个表,比如我们要将其中的Sage属性列删掉,现在我们可以通过下面的语句建立一个一个新表;
CREATE TABLE Student1
(
Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20) UNIQUE ,
Ssex CHAR(2) ,
Sdept CHAR(15)
);
基本表建成了,然后把需要保留的数据放到里面,执行下面的语句
INSERT
INTO Student1
SELECT Sno,Sname , Ssex , Sdept
FROM Student;
Commit;
好了,要保留的数据都已经作好备份,下一步就是执行最无情的删除基本表语句
DROP TABLE Student;
执行完毕后,再建立自己原计划中要建立的基本表
CREATE TABLE Student
(
Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20) UNIQUE ,
Ssex CHAR(2) ,
Sdept CHAR(15)
);
然后在执行
INSERT
INTO Student
SELECT * FROM Student1;
Commit;
然后再DROP TABLE Student1;
删除属性列的任务到此结束,真的是很间接啊!
完全凭空建立一个大数据量的数据表格困难吗?答案是:很简单!继续利用上面的现成的表格,只要将下列语句重复执行13次
INSERT
INTO Student
SELECT * FROM Student;
然后COMMIT;
一个拥有32768条数据的student表就这样轻松的建成了,是不是很简单,当然如果不满足你还和可以继续,但小心会崩溃啊!