[oracle学习笔记]之一:sql/plus基础操作

oracle学习笔记


表空间

分类:永久表空间,临时表空间,UNDO表空间。

查看用户的表空间,这有两个数据字典:
dba_tablespaces 管理员用户级别查看;
user_tablespaces 普通用户级别查看。

dba_users 查看系统用户
user_users 查看普通用户

修改默认表空间
语法:
ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name;

1> 创建表空间

语法:
CREATE [TEMPORARY] TABLESPACE tablespace_name DATAFILE|TEMPFILE ‘xx.dbf’ SIZE xx;

数据字典 dba_data_files dba_temp_files 分别用来查看数据文件,临时文件。

例子:
select file_name from dba_data_files where tablespace_name=’xx’ //查看表空间xx的数据文件

2> 修改表空间

a. 修改表空间的联机脱机状态

语法:
ALTER TABLESPACE tablespace_name OFFLINE|ONLINE;
例子:
SELECT STATUS FROM DBA_TABLESPACE WHERE TABLESPACE_NAME=’xxx’ //查看表空间状态

b. 设置只读或可读写状态(表空间必须为联机状态才能更改)

语法:
ALTER TABLESPACE tablespace_name READ ONLY|WRITE READ;

c. 增加数据文件

语法:
ALTER TABLESPACE tablespace_name ADD DATAFILE ‘xx.dbf’ SIZE xx

d. 删除数据文件

语法:
ALTER TABLESPACE tablespace_name DROP DATAFILE ‘xx.dbf’

e. 删除表空间

语法:
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS]


表——基本存储单位

1> 常用数据类型:

字符型:CHAR(n) NCHAR(n) 固定长度的字符,最长表示分别为2000,1000个;
VARCHAR2(n) NVARCHAR2(n) 可变长度的字符,最长表示分别为4000,2000个;

数值型:NUMBER(p,s) p有效数字,s小数点后的位数;
FLOAT(n) 二进制,1-126
例子:NUMBER(5,2) 123.45

日期型:DATE TIMESTAMP

其他类型:BLOB(二进制类型) CLOB(字符串类型) 最长都是4GB大小

2> 创建表

语法:
CREATE TABLE table_name (…)

3> 修改表

a> 添加字段(表中没有的)

语法:
ALTER TABLE table_name ADD column datatype;

b> 更改字段数据类型(表中原来有的)

语法:
ALTER TABLE table_name MODIFY column datatype;

c> 删除字段

语法:
ALTER TABLE table_name DROP COLUMN column_name;

d> 修改字段名

语法:
ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;

e> 修改表名

语法:
RENAME tablename TO new_tablename

4> 删除表

TRUNCATE TABLE tablename;截断表,只是删除数据,表结构还在

DROP TABLE tablename;删除表,连表结构都删除


操作表中的数据

1> 添加数据

语法:
INSERT INTO table_name (column1,column2,…) VALUES(value1,value2,…);

添加默认值:
create table userinfo1 (regdate date default sysdate); //创建表时添加默认值
alter table userinfo1 modify regdate default sysdate;//创建以后添加默认值

注意:字符串用单引号引起来

2> 复制表数据

语法:
在建表时复制
CREATE TABLE tablename AS SELECT COLUMN1,…|* FROM tablename1;
插入数据时复制
INSERT INTO tablename [column1,column2,…] SELECT column1,column2,…|* FROM tablename1;

3> 修改数据

语法:
UPDATE table_name SET column1=value1,… [WHERE conditions]

4> 删除数据

语法:
DELETE FROM table_name [WHERE conditions];
TRUNCATE TABLE tablename; //截断表,速度快


约束

四类约束:非空(NOT NULL),主键(PRIMARY KEY),外键(FOREIGN KEY),唯一(UNIQUE),检查(CHECk)

作用:定义规则,确保完整性。

1> 非空

语法:
创建表时添加
CREATE TABLE tablename (column_name datetype NOT NULL|PRIMARY KEY,…)
修改表时添加
ALTER TABLE tablename MODIFY column_name datatype NOT NULL;
修改表时删除非空约束
ALTER TABLE tablename MODIFY column_name datatype NULL;

2> 主键

创建表时添加:
主键只是某一列
CREATE TABLE tablename (column_name datetype PRIMARY KEY,…)
主键包含多个列
CREATE TABLE tablename (column_name datetype,…,CONSTRAINT pk_constraint_name PRIMARY KEY(column1,column2,…));

数据字典 USER_CONSTRAINTS 查看表的约束

SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS

修改表时添加主键约束
ALTER TABLE tablename ADD CONSTRAINT pk_constraint_name PRIMARY KEY(column1,column2,…);
更改主键约束的名字
ALTER TABLE tablename RENAME CONSTRAINT oldname TO newname;
删除主键约束
ALTER TABLE tablename DISABLE|ENABLE CONSTRAINT constraint_name;
ALTER TABLE tablename DROP CONSTRAINT constraint_name;
ALTER TABLE tablename DROP PRAMARY KEY[CASCADE];

3> 外键

注意:设置外键约束时,主表的字段必须是主键;主从表中相应的字段应该是用一个数据类型;从表中外建字段的值必须来自主表中的相应字段的值,或者为null值

语法:
创建表时列级设置约束
CREATE TABLE tablename(column datatype REFERENCES tablename2(column1));
创建表时表级设置约束
CONSTRAINT constraint_name FOREIGN KEY(colunm_name) REFERENCES tablename(column_name1) [ON DELETE CASCADE];//主表被删除后,从表也跟着被删除。

修改表时添加外键约束
ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES tablename(column_name2) [ON DELETE CASCAD]
删除外键约束同删除主键约束一致

4> 唯一约束(UNIQUE)

语法:
创建表时添加,列级,表级
CONSTRAINT constraint_name UNIQUE(column)//多个列要写多条唯一性约束
修改表时添加
ALTER TABLE tablename ADD CONSTRAINT constraint_name UNIQUE(column);
删除唯一约束同删除主键约束一致

5> 检查约束

语法:
创建表时设置约束,列级,表级
CHECK(EXPRESSIONS)
CONSTRAINT constraint_name CHECK(expressions);
修改表时添加检查约束
ALTER TABLE tablename ADD CONSTRAINT constraint_name CHECK(expressions);
删除检查约束和删除主键约束一致


查询

以下的例子:都来自于创建的users表,表结构如下:
[oracle学习笔记]之一:sql/plus基础操作_第1张图片

表里面的的数据如下:
[oracle学习笔记]之一:sql/plus基础操作_第2张图片

语法:
SELECT [DISTINCT] column_name1 [AS] new_name,…|*
FROM table_name
[WHERE conditions]
[ORDER BY column1 DESC/ASC,…]

DISTINCT 去掉查询结果中重复的行。
AS 给列起别名,可以省略。

1> 更改查询结果的显示格式

语法:
COLUMN column_name HEADING new_name;//设置列表的别名
COLUMN column_name FORMAT dataformat;//设置列表的显示格式
COLUMN column_name CLEAR;//清除格式
例子:
col salary format $9999.9//column可以简写col,9代表一个数字
col username format a10;//a表示字符串。10表示显示的长度

2> 运算符和表达式

算数运算符:+-*/
比较运算符:>=,<=,>,<,=,<>,LIKE
逻辑运算符: and,or,not(优先级,not>and>or)

3> 模糊查询

通配符 ,% ( 表示一个字符,%表示0到多个字符)

例子:
select * from users where username like ‘_a%’;

4> 范围查询

a> BETWEEN…AND…(闭区间)

例子:
select * from users where salary between 800 and 2000;

b> IN/NOT IN 后接列表内某一个具体的值

例子:
select * from users where username in (‘aaa’,’bbb’);

5>对结果进行排序

ORDER BY column1 DESC/ASC,…
例子:
select * from users order by username desc,salary asc;

6> case…when

a> CASE column_name WHEN value1 THEN result1,…[ELSE result] END;

例子:
select username,case username when ‘aaa’ then ‘计算机部门’ when ‘bbb’ then ‘市场部门’ else ‘其他部门’ end as 部门 from users;

b> CASE WHEN column_name=value1 THEN result1,… [ELSE result] END;

例子:
select username,case when username=’aaa’ then ‘计算机部门’ when username=’bbb’ then ‘市场部门’ else ‘其它部门’ end as 部门 from users;

7> decode函数

语法:
DECODE(column_name,value1,result1,…,defaultvalue)
例子:
select username,decode(username,’aaa’,’计算机部门’,’bbb’,’市场部门’,’其他部门’) as 部门 from users;

你可能感兴趣的:(database,oracle学习笔记)