SQL的几点细节

类别:编程语言 点击:0 评论:0 推荐:

 

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表就这样轻松的建成了,是不是很简单,当然如果不满足你还和可以继续,但小心会崩溃啊!

 

 

 

本文地址:http://com.8s8s.com/it/it29053.htm