如何操作Oracle数据库的表

数据库表的管理

建表

语法:
Create table 表名(
字段 1 数据类型 [default 默认值],
字段 2 数据类型 [default 默认值],

字段 n 数据类型 [default 默认值] );

范例:创建并操作 stuInfo 表
示例 1:创建 stuInfo 表

CREATE TABLE stuInfo /*-创建学员信息表-*/
(
	stuName VARCHAR2(20) NOT NULL, --学员姓名,非空(必填)
	stuNo CHAR(6) NOT NULL, --学号,非空(必填)
	stuAge NUMBER(3,0) NOT NULL, --年龄,非空(必填)
	stuID NUMERIC(18,0), --身份证号,代表 18 位数字,小数位数为 0
	stuSeat NUMERIC(2,0) --座位号
);

补充:更改 stuName 列的定义,使此列能容纳 25 个字符

ALTER TABLE stuInfo 
MODIFY (stuName VARCHAR2 (25));

补充:向 stuInfo 表添加 stuTel_no 和 stuAddress 两个列

ALTER TABLE stuInfo
ADD (stuTel_no VARCHAR2 (12),
stuAddress VARCHAR2(20));

补充:从 stuInfo 表中删除列

ALTER TABLE stuInfo 
DROP COLUMN stuTel_no; --删除 stuTel_no 列
--或者
ALTER TABLE stuInfo 
DROP (stuTel_no,stuSeat);--删除 stuTel_no 和 stuSeat 列

补充:删除 stuInfo 表

DROP TABLE stuInfo;

补充:插入 stuInfo 表数据

INSERT INTO stuInfo VALUES ('张三'118null1);
INSERT INTO stuInfo VALUES ('李四'220null2);
INSERT INTO stuInfo VALUES ('王五'315null3);
INSERT INTO stuInfo VALUES ('张三'418null4);
INSERT INTO stuInfo VALUES ('张三'520null5);
COMMIT;

选择无重复的行

SELECT DISTINCT stuName,stuAge
FROM stuInfo;

按照姓名升序,如果姓名相同按照年龄降序排序

SELECT stuNo,stuName, stuAge
FROM stuInfo
WHERE stuAge>17
ORDER BY stuName ASC, stuAge DESC;

使用列别名

SELECT stuName as "姓 名",stuAge as "年 龄", stuID as 身份证号
FROM StuInfo;

利用现有的表创建新表

CREATE TABLE newStuInfo1 AS SELECT * FROM StuInfo; 
CREATE TABLE newStuInfo2 AS SELECT stuName,stuNo,stuAge 
	FROM StuInfo; 
CREATE TABLE newStuInfo3 AS SELECT * FROM StuInfo WHERE 1=2; 
SELECT * FROM newStuInfo1;
SELECT * FROM newStuInfo2;
SELECT * FROM newStuInfo3;

查看表中行数

SELECT COUNT(*) FROM stuInfo; 
SELECT COUNT(1) FROM stuInfo;

取出 stuName,stuAge 列不完全重复记录

SELECT stuName,stuAge 
FROM stuInfo
GROUP BY stuName,stuAge 
HAVING(COUNT(stuAge||stuAge) <2);

删除 stuName,stuAge 列重复的行(保留一行)

DELETE 
FROM stuInfo 
WHERE ROWID NOT IN( 
SELECT MAX(ROWID) 
FROM stuInfo
GROUP BY stuName,stuAge 
HAVING(COUNT(stuAge||stuAge)>1)
UNION
SELECT max(ROWID)
FROM Stuinfo
GROUP BY stuName,stuAge 
HAVING(COUNT(stuAge||stuAge)=1) 
);
SELECT * FROM stuInfo;

查看当前用户所有数据量>100 万的表的信息

SELECT * 
FROM user_all_tables a
WHERE a.num_rows>1000000;

更多Oracle相关知识,敬请关注作者或前往作者主页寻找哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章