Oracle 数据库基础SQL语句

Oracle 数据库基础SQL语句


–创建表空间

create tablespace tab_01 datafile 'd:\database\data\datafiles_01' size 50M;

–创建临时表空间

create temporary tablespace temp_01 tempfile 'd:\database\data\temp_01.dbf' size 50M;

–创建表格

create table crTale_01(
       id number(11) primary key not null,
       username varchar2(20) unique not null,    --unique :表示不能相同
       pwd varchar2(16) not null,
       sex char(2) check(sex='男' or sex='女')  not null,
       age number(3) not null,
       birthday date,
       address varchar2(200)
);

–删除表格

drop table crTale_01

–添加表注释

comment on table crTale_01 is '测试表_01';

–字段注释

comment on column crTale_01.id is '主键id';
comment on column crTale_01.username is '姓名';

–插入数据

insert into crTale_01 values(1001,'江小白','123456','男',22,sysdate,'重庆市沙坪坝');
insert into crTale_01 values(1002,'江大黑','123456','女',21,sysdate,'重庆市沙坪坝');
insert into crTale_01 values(1003,'翠花','123456','女',21,sysdate,'重庆市沙坪坝');

–查询表格所有内容

select * from crTale_01

–修改数据

update crTale_01 set username='老王' where id=1001

–删除数据

delete from  crTale_01 where id=1003

–提交事务

commit

同义词: 给查询的表格对象取一个别名,用于简化对象访问和提高对象访问的安全性.

–同义词有两种类型:
–私有同义词。(私有同义词只能被当前模式用户访问)
–共有同义词。(共有同义词可以被所有数据库用户访问)

–“ or replace” 表示同义词存在的情况下替换该同义词。
–创建私有同义词

create or replace synonym ta_01 for crTale_01;

–创建共有同义词

create public synonym ta_02 for crTale_01;

–通过别名查询

select * from ta_01
select * from ta_02

–删除同义词

drop synonym ta_01

索引:类似于书的目录,我们可以通过目录快速的找到我们查询内容的位置,不需要从第一页每页的开始查找。在数据库中,索引允许程序快速地找到表中的数据,而不必全表扫描。在数据库中,索引是表中数据和相应存储位置的列表。
索引是一种树状结构,从逻辑设计和物理设计实现两个方面进行分类。从逻辑设计方面看,可以分为单列索引或者组合索引、唯一性索引、非唯一性索引和基于函数的索引等;从物理设计实现角度看,索引可以分为分区索引和非分区索引、B树索引、正向索引和反向索引、位图索引等。

–创建索引

create index ta_sex on crTale_01(sex);

–创建唯一性索引

create unique index ta_id on crTale_01(id);

–创建位图索引

create bitmap index ta_sex on crTale_01(sex);
修改索引

–重建索引

alter index  ta_sex rebuild

–合并索引

alter index ta_sex coalesce;

–删除索引

drop index ta_sex;

视图:是查询一个或多个表格的 select 语句的描述。视图创建后相当于 虚表或特殊的表来对待

–创建视图1
–视图名称与表明不能一样,其中 “or replace” 表示如果有同名的视图存在,则覆盖已有视图,既可以修改已有的视图

create or replace  view view_01 as
-- sql 语句1
select * from crTale_01

–创建视图2

create view view_02 as
-- sql 语句2
select * from crTale_01 where sex='男';

–视图查询

select * from view_02

–删除视图

--具有drop view  drop any view 权限的用户才可以删除
drop view view_02;

序列:是一数据库对象,利用它可以生成唯一的整数,一般用来使序列自动的生成主键值。

–创建序列

create sequence my_num 
start with 1003    --指定生成的第一个序列号
increment by 2     --指定序列号之间的间隔
maxvalue 99999     --指定序列号可生成的最大值
cache 20;          --值 (缓存量:默认为20| nocache (没有缓存)

–修改序列(不能修改 “start with ”参数)
cycle 如果达到最大值,重新开始| nocycle (默认)不重新开始

alter sequence my_num
maxvalue 9999
cycle;

–删除序列

drop sequence my_num;

–插入数据使用序列

insert into crTale_01 values(my_num.nextval,'江小白','123456','男',23,sysdate,'中国')
insert into crTale_01 values(my_num.nextval,'翠花','123456','男',23,sysdate,'中国')

函数

数值函数

– 1、ABS(n) 返回数字n的绝对值.

select 'ABS(-12.3):' || abs(-12.3) FROM DUAL;

– 2、CEIL(n) 返回大于等于数字n的最小整数.

select 'CEIL(5.3):'   || ceil(5.3)  FROM DUAL;
select 'CEIL(-5.3):'  || ceil(-5.3)  FROM DUAL;
select 'CEIL(5):'     || ceil(5)  FROM DUAL;

– 3、FLOOR(n) 返回小于等于数字n的最大整数.

select 'FLOOR(5.3):'   || floor(5.3)  FROM DUAL;
select 'FLOOR(-5.3):'  || floor(-5.3)  FROM DUAL;
select 'FLOOR(5):'     || floor(5)  FROM DUAL;

– 4、ROUND(n,[m]) 用于执行四舍五入运算。
– 如果省略 m ,则四舍五入至整数位;
– 如果 m 是负数,则四舍五入到小数点前 m 位;
– 如果 m 是正数,则四舍五入至小数点后 m 位。

select 'ROUND(2020.01091230):'    || round(2020.01091230) from dual;
select 'ROUND(2020.01091230,3):'  || round(2020.01091230,3) from dual;
select 'ROUND(2020.01091230,-3):' || round(2020.01091230,-3) from dual;

– 5、TRUNC(n,[m]) 用于截取数字。
– 如果省略数字 m ,则将数字 n 的小数部分截取;
– 如果数字 m 是正数,则将数字 n 截取至小数点后第 m 位;
– 如果数字 m 是负数,则将数字 n 截取至小数点前的 m 位;

select 'TRUNC(2020.01091230):'    || trunc(2020.01091230) from dual;
select 'TRUNC(2020.01091230,3):'  || trunc(2020.01091230,3) from dual;
select 'TRUNC(2020.01091230,-3):' || trunc(2020.01091230,-3) from dual;
字符函数

– 1、 LTRIM(char [,set]) 去掉字符串char 左端包含的set 中的任何字符。set 默认为空格.

select 'LTRIM:' || ltrim('this is','th') from dual;

– 2、LOWER(char) 将字符串转化为小写格式.

select lower('HELLO WORD') FROM DUAL;

– 3、UPPER(char) 将字符串转化为大写格式.

select upper('hello word') FROM DUAL;

– 4、LENGTH(char) 返回字符串长度.

select length('word') from dual;

– 5、RTRIM(char [,set]) 去掉字符串 char 右端包含的set 中的任何字符。 set 默认为空格.

select rtrim('hello word','or') from dual

– 6、REPLACE(char,search_string[,replace_string]) 将字符串中的字符替换为指定的字符.

select replace('hello word','word',',what are you doing ?') from dual;
转换函数

-- 1、TO_NUMBER() 将符合特定数字格式的字符串转变成数字值
– 这里解释哈下面的 ‘9999D9999’ 写法 ,“D” 前面“9” 的个数是根据前面 “2020.0109” 小数点前面有多少位数字决定的,
– 同理 “D” 后面的 “9” 位数也是一样的道理

select to_number('2020.0109','9999D9999') from dual;

– 2、TO_CHAR() 将日期型转变为字符串

select to_char(sysdate,'dd-mm-yyyy') from dual;

– 3 TO_DATE() 将符合特定格式的字符串转变为date类型的值.

select to_date('09-01-2020','dd-mm-yyyy') from dual;

– 4、NVL(expr1,expr2) 将NULL 转变为实际值。
– 如果expr1 是null ,则返回 expr2 ;
– 如果expr1 不是null,则返回expr1 .
– 参数expr1 和expr2 可以是任意数据类型,但两者的数据类型必须要匹配.

select nvl(username,'木有') from crTale_01 where id=1001

– 5、NVL2(expr1,expr2,expr3) 将NULL 转变为实际值。
– 如果expr1 是null ,则返回 expr3 ;
– 如果expr1 不是null,则返回expr2 .
– 参数expr1 可以是任意数据类型,而参数expr2 和expr3 可以是出long 之外的任何数据类型.

select nvl2(username,'存在','木有') from crTale_01 where id=1001

多表查询

使用集合操作符

– 1、 union 和 union all :表示 或者的意思 ,相当于 or
union 返回查询检索到的所有不重复的数据
union all 返回查询所有的数据,包括重复的数据

select * from crTale_01 where address='中国'
union 
select * from crTale_01 where sex='男'

select * from crTale_01 where sex='男' or address='中国'

select * from crTale_01 where address='中国'
union all
select * from crTale_01 where sex='男'

– 2、minus : 表示 返回第一个查询检索到的数据减去第二个查询检索到的数据

select * from crTale_01 where sex='男'
minus
select * from crTale_01 where address='中国'

– 3、intersect : 表示返回两个查询都检索到的数据,相当于 and

select * from crTale_01 where sex='男'
intersect
select * from crTale_01 where address='中国';

select * from crTale_01 where sex='男' and address='中国';

连接查询:查询两张或者两张以上的表格或者视图

– 1、使用内连接.

select  username,sex,remarks,crTale_02.ttime 
from crTale_01,crTale_02
where crTale_01.id=crTale_02.id;

– 2、自连接
自连接是指在同一表之间的连接查询,它主要用在自参照表上显示上下级关系。

select  username,sex,remarks,t2.ttime 
from crTale_01 t1,crTale_02 t2
where t1.id=t2.id and t1.username='老王';

– 3、内连接
用于返回满足连接条件的记录;
关键词 :inner join
默认连接情况在没有指定的情况下都是内连接方式

select username,sex,age,remarks,t2.ttime
from  crTale_01 t1 inner join crTale_02 t2 
on t1.id=t2.id and t1.username='老王';
--等价于
select username,sex,age,remarks,t2.ttime
from  crTale_01 t1, crTale_02 t2 
where t1.id=t2.id and t1.username='老王';

外连接是内连接的扩展,它不仅返回满足连接条件的所有记录,还会返回不满足连接条件的记录

– 4、左连接
关键词 :left join
当使用左外连接时,不仅返回满足连接条件的所有记录,还会返回连接关键词“left join”左边表格中不满足连接条件的其他数据

select username,sex,age,remarks,t2.ttime
from  crTale_01 t1 left join crTale_02 t2 
on t1.id=t2.id and t1.username='老王';

– 4、右连接
关键词 :right join
当使用左外连接时,不仅返回满足连接条件的所有记录,还会返回连接关键词“left join”右边表格中不满足连接条件的其他数据

select username,sex,age,remarks,t2.ttime
from  crTale_01 t1 right join crTale_02 t2 
on t1.id=t2.id and t1.username='老王';

事物处理

事物用去确保数据库数据的一致性,事物处理和锁是两个紧密联系的概念。事物就是一个单元的工作。

– 1、用commit 提交事务

--修改数据
update crTale_01 set username='老王' where id=1001
--提交事务
commit

– 2、回退事务
回退可以撤销已进行的操作。

--修改数据
update crTale_01 set username='老王' where id=1001
--回滚事务
rollback
select username from crTale_01 where id=1001
结果为:江小白

– 3、设置保存点

savepoint a;
或者
exec dbms_transaction.savepoint('a')

– 4、取消部分事物

rollback  to  a;
或者
exec dbms_transaction.rollback_savepoint('a')

– 5、取消全部事物

rollback;
或者
exec dbms_transaction.rollback('a')
事物的ACID属性

数据库事物具有ACID特性。ACID是指原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durabilily)。ACID特性描述了事物处理的规则。

1、原子性
原子性表示事处理要么全部进行,要么全部撤销。

2、一致性
一致性表示事物处理要将数据库从一种状态转变成另一种状态。

3、隔离性
隔离性表示在事物处理提交之前,事务处理的效果不能由系统中其他事物处理看到。

4、持久性
持久性表示一旦提交事务处理,它就永远生效。


过程和函数

存储过程

–存在意义:需要在应用中经常需要通过执行特定的操作,基于这些操作建立一个特定的过程

– 1、 建立一个不带参数的过程

create or replace procedure time_out
is 
begin
   dbms_output.put_line('当前系统时间为:' || systimestamp);
   dbms_output.put_line('当前系统时间为:' || to_char(sysdate,'yyyy-mm-dd'));
end;

--调用执行
begin 
  time_out;
end;

– 2、 建立一个带参数的过程

create or replace procedure inser_data(name varchar,pwd varchar2,sex char,age number,address varchar2)
is 
begin
   insert into crTale_01 values(my_num.nextval,name,pwd,sex,age,sysdate,address);
end inser_data;

--调用执行
begin 
  inser_data('小明','123654','男',20,'重庆市沙坪坝');
end;

– 3、 建立一个带OUT 参数的过程

--创建
create  or replace procedure testOut(val1 number,val2  number,val out number)
is 
begin
  val:=val1+val2;
end;

--调用
declare
  result number;
  begin
    testOut(10,20,result);
    dbms_output.put_line(result);
 end;

–删除过程

drop procedure testOut

函数

–存在意义:需要在应用中经常需要通过执行SQL 语句来返回特定数据

– 1、创建函数


	--创建
	--这里提醒一哈,在函数参数列表中的参数名不要和sql语句中的条件 字段同名(eg: inid 不和下面 where 语句中的名相同)
	--创建函数可能没问题,但是调用就有问题了.
	
	create or replace function get_username(inid number)
	return varchar2
	is
	retname varchar2(30);
	begin
	  select username into retname from crTale_01 where id=inid;
	  return retname;
	end;
	
	 --调用方式1
	declare 
	 id number :=1001;
	 username varchar2(30);
	begin
	   username:=get_username(id);
	   dbms_output.put_line('用户名为:' || username);
	end;
	   
	 --调用方式2
	select  get_username(1001) from dual;
	 
	 --删除函数
	 drop function get_user
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 概念介绍: 数据库DATABASE、表TABLE、列COLUMN、行ROW、关键字PRIMARY KEY、索引INDEX 二、 数据类型: LONG RAM:超长大型数据(照片、图形、描述等不定长数据)。 DATE:包含日期和时间。 INTEGER:有符号全长二进制整数(31位精度)。 SMALLINT:有符号半长二进制整数(15位精度)。 DECIMAL (p[,q]): 有符号的封装了的十进制小数,最多有 p 位数,并假设有 q 位在小数点右边。 如果省略 q ,则认为是 0。 FLOAT:有符号双字浮点数。 CHAR(n): 长度为 n 的定长字符串。 VARCHAR(n): 最大长度为 n 的变长字符串。 CHAR (5) 和 VARCHAR2(5)的区别是 CHAR不足5位后面自动加上空格,VARCHAR2不加 三、 列的非空属性NOT NULL: 如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。 如果一个列允许为空,该列可以不放任何内容,即空值(在SQL中书写为NULL),空值不是空格。 如果一个列内容为空值,则该列不等于任何值(包括空值)。 例如:列SAGE1、SAGE2的内容为空,列SAGE3内容为20,则下面的逻辑表达式全部为NULL:SAGE1=SAGE2、SAGE1SAGE2、SAGE1=SAGE3、SAGE3>SAGE1。下面的逻辑表达式全部为真:SAGE1 IS NULL、SAGE3 IS NOT NULL。下列表达式全为空:sage1+100,sage2+sage3 四、 特殊约定: 1. 所有SQL语句以分号结束不是以回车换行结束。 2. 中扩号代表选项,就是其中的内容可有可无。 3. 下面讲的列名在很多情况下也可以是表达式。 4. 表名格式:[用户名.]表名,例如:user001.student,如果不注名用户,则说明是当前登陆的用户的表。 五、 建表或视图语句CREATE 格式: CREATE TABLE 表名 (列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL]); CREATE VIEW 视图名 AS SELECT ……; CREATE TABLE 表名 AS SELECT ……; Create table as 经常在修改一个表前备份该表,而且运行速度很快且不用提交 例如:Select table a_student as select * from student; Create table as 还可以用来复制表结构 例如:假设有三个表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值