oracle数据库基本操作(一)

一、数据基本类型

  1、oracle的伪列

    Oracle 中伪列就像一个表列,但是它并没有存储在表中伪列可以从表中查询,但不能插入、更新和删除它们的值常用的伪列有ROWID和ROWNUM;

    ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行   

    ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数;

select rowid,rownum,id,name,price from goods;

  2、数据定义语言(DDL)

  create----alter----drop----truncate

  3、数据操纵语言(DML)

  insert---select---delete---update

  4、事务控制语言(TCL)

  commit---savepoint---rollback

  5、数据控制语言(DCL)

  grant---revoke

二、oracle数据库基本简介

  1、表名的长度最大为30个字符;

    2、同一用户模式下,不同的表不能有相同的名称;

    3、oracle数据库中的表名、列名、用户名和其他对象名,不区分大小写,系统会自动转成大写;

三、数据库基本操作

   1、选择无重复的行

  DISTINCT字句筛除结果集中内容全部相同的行,仅保留一行;

  2、带条件和排序的select命令(与mysql类似)

select stuNo,stuName,stuAge from student where stuAge>16 order by studentName asc,stuAge desc;

  3、oracle数据库列别名的添加与mysql类似

create table newStudent as select * from student

  4、也可以只复制表结构,不复制数据

create table newStudent as select * from student where 1=2

三、DML语言操作

  1、查看表中行数 

----效率低
select count(*) from student

----效率高
select count(1) from student

  2、取出表中对应列不存在重复数据的记录 

select stuName,stuAge from student group by stuName,stuAge having(count(stuName||stuAge)<2)

四、事物控制语言(TCL)

  1、commit:提交事物;

  2、rollback:回滚事物;

  3、savepoint:在事物中创建存储点

五、数据控制语言  

  1、创建表

--oracle没有自增
因此创建一个序列,在插入数据的时候,将序列插入到定义的主键当中
create sequence stu_id;

create table student(
    id number primary key,
    name varchar2(20),
    age number      
);

insert into student(stu_id.nextval,'张三',10);

  2、添加约束(与mysql相同)

  3、向表中添加列 

alter table student add(address varchar2(20),email varchar2(20));

  4、删除列

alter table test1 drop column name;

  5、修改一个字段

alter table test1 modify (name varchar2(16) default ‘unknown’);

  6、分页 

select * from(
select a.*,rownum x from(
select * from goods
)a
) where x>2 and x<=4

 六、常用oracle SQL语句

--不显示有重复数据的行
select distinct gname from goods;
--按照姓名升序,如果姓名相同按照年龄降序
select gname,price from goods where price>12 order by gname asc,price desc;
--使用别名显示姓 名、年 龄和身份证号列
select gname "商品名称",price "商品价格" from goods
--利用现有的表创建新表
  --方式1(选择所有数据)
  create table goodds as select * from goods
  select * from goodds
  drop table goodds
  --方式2(选择指定列的所有数据)
  create table goodds as select gname from goods
  --方式3(只留表结构,不要数据)
  CREATE TABLE goodds AS SELECT gname,price FROM goods WHERE  1=2; 
--查看表中行数
   select count(*) from goods   --效率低
   select count(1) from goods   --效率高
--取出表的列不存在重复数据的记录
select gname,price,count(gname||price) from goods group by gname,price having(count(gname||price)=1)
select gname,price from goods group by gname,price having(count(gname||price)<2)
--删除gname,price列重复的行(保留一行)
delete from goods where rowid not in(
select gname,price,max(rowid) from goods group by gname,price having(count(gname||price)=1)
)
--常用转换函数
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
SELECT TO_CHAR(1210.7, '$9,999.00') FROM dual;--定义规则的数据长度要比数据长度大
SELECT TO_DATE('2005-12-06','yyyy-mm-dd') FROM dual;
SELECT TO_NUMBER('100') FROM dual;
--转换空值的函数
NVL(a,b) --a为null,取b,否则取a
NVL2(a,b,c) --a为null,取c,否则取b
DECODE --相当于switch函数
SELECT ename,sal+NVL(comm,0) sal1,NVL2(comm,sal+comm,sal) sal2,
  DECODE(to_char(hiredate, ‘MM ’), 
   '01', '一月', '02', '二月',
   '03', '三月','04','四月',
   '05','五月','06','六月',
   '下半年') mon
FROM employee;
--约束
create table x(
id int not null,
name varchar2(20) check(name like '张%'),
age int check(age between 1 and 100),
sex varchar2(20) check(sex='' or sex='')
);
insert into x values(3,'张abc',19,'')

alter table x add unique(id)

--sqlserver连接符:+ mysql连接符:concat oracle连接符:||
select 'a'||'b' from dual
原文地址:https://www.cnblogs.com/newbest/p/9255703.html