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