oracle基础知识1_单表查询

 

本机安装成功后,访问链接: http://localhost:5560/isqlplus/

 

 

前提: 本机win7下安装oracle10g_32, 安装过程见

oracle 10g 安装 和 常遇到的错误 (http://chengjianxiaoxue.iteye.com/blog/2074281)

安装后仅限于学习个人学习oracle之用

 

0 oracle数据库和oracle实例的区别:

 

   a) oracle服务器 = oracle数据库 + oracle实例

   b) oracle数据库: 用于实际存放数据的文件,存储在硬盘中这些文件组织在一起形成的逻辑整体叫做数据库

   c) oracle实例: 位于物理内存的数据结构中,  = 一个共享内存池 + 多个后台进程组成

   d) 用户存取数据库中的数据(硬盘文件),必须通过oracle实例操作。

   e) 任何时刻,一个实例只能与一个数据库关联;大多数情况下,一个数据库上只有一个实例对其操作

  

 

1 表空间和数据文件:

 

   a) 数据文件:  1) 用于存储物理数据; 2)后缀是 .dbf;

   b) 表空间 :  是一个逻辑概念,表名称  eg: table user;

   c) 一个user表可以有多个数据文件,eg: USER01.dbf,  USER02.dbf; 是一对多的关系

 

 

2 本机安装oracle后,将开机自动启动修改成手动启动(如果安装后是为了学习之用,节省本机资源)

 



 

 

3 学习中需要操作的表:


 


 4 基本指令:

 

    1 显示当前用户: show user   结果: USER 为 "SCOTT"

    2 显示当前用户的表: select * from tab; (区别于mysql的 show tables;)

 

TNAMETABTYPECLUSTERID
DEPTTABLE 
EMPTABLE 
BONUSTABLE 
SALGRADETABLE 

 

    3  显示表结构(和mysql写法一样) : desc emp;

名称是否为空?类型
EMPNONOT NULLNUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

 

    4 查询表数据: select  columnname1, columnname2... from tablename (建议查询语句中用字段名称取代*,在oracle9i低版本的oracle查询时,使用*作为查询会耗费oracle判断时间,效率会降低)

 

   5 sql语句中的null:

     a) 包含null的表达式都为null

     b) null != null

     c) 如果集合中含有null,不能使用not in,可以使用 in

     eg1: 查询emp表的年薪:

select empno, ename,sal, comm ,sal*12 + comm as 年薪  from emp; 结果会发现,在comm(奖金)为null时,年薪结果为null;

EMPNOENAMESALCOMM年薪
7369SMITH800  
7499ALLEN160030019500
7521WARD125050015500
7566JONES2975  
7654MARTIN1250140016400

 

 改进方式是使用 nal(a,b)函数

(NVL( string1, replace_with)。它的功能是如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL)

 

select empno, ename,sal, comm ,sal*12 + nvl(comm,0) as 年薪  from emp;

EMPNOENAMESALCOMM年薪
7369SMITH800 9600
7499ALLEN160030019500
7521WARD125050015500
7566JONES2975 35700
7654MARTIN1250140016400

 

 

   eg2: 查询奖金为null的员工:

select empno, ename,sal from emp where comm is null;    不能用 = 和 !=,用 is null / is not null取代

 

  eg3: select * from emp where deptno in (10,20,null);

 

  6  字符串和日期   a) 这两者需要放在单引号内  b) 对于字符串,大小写敏感区分  c) 日期格式敏感,默认格式为 DD-MON-RR(日-月-年);

  eg:

select empno, ename,sal from emp where ename = 'KINg';   查询不到结果

select empno, ename,sal from emp where ename = 'KING';   查询出结果

select empno, ename,sal from emp where hiredate = '17-11月-81';  查询的出结果

 

  7 查看系统默认日期类型

 select sysdate from dual;

SYSDATE
04-6月 -14

 

 

  8  between and :  小值在前,大值在后。

 

  9  in/not in(num1,num2...)

select * from emp where deptno not in (10,20);

  10  like   %代表多个长度, _代表一个长度

    eg1: 查询名字是四个字的员工

select * from emp where ename like '____';  (要用单引号,引号内内容为4个_)

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7521WARDSALESMAN769822-2月 -81125050030
7839KINGPRESIDENT 17-11月-815000 10
7902FORDANALYST756603-12月-813000 20

  

   eg2: 查询名称中含有_的员工信息(取_字符本身,而不是取_在模糊查询的含义):

insert into emp(empno,ename,sal,deptno) values(1001,'Tom_ABCD',6000,10);

select * from emp where ename like '%\_%' escape '\';

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
1001Tom_ABCD   6000 10

 

  11 order by 后面+ 列名/表达式/别名

  eg1: select ename, sal*12 as 年薪 from emp  order by 年薪

  eg2: select ename, deptno,sal*12 as 年薪 from emp  order by deptno, sal;  先按照第一列排序,如果相同,再按照第二列排序,以此类推

  eg: 降序排列时,如果有空值,如何将空值排在后面(按照人们的习惯来显示数据,office好用就在于按照人的使用习惯排列按钮让人去点)

 

 select * from emp  order by comm desc nulls last;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7654MARTINSALESMAN769828-9月 -811250140030
7521WARDSALESMAN769822-2月 -81125050030
7499ALLENSALESMAN769820-2月 -81160030030
7844TURNERSALESMAN769808-9月 -811500030
7782CLARKMANAGER783909-6月 -812450 10
7788SCOTTANALYST756619-4月 -873000 20
7839KINGPRESIDENT 17-11月-815000 10

 

 

 

 

 

 

12 DISTINCT 排除重复,如果放在多个字段前,那么这多个字段是作为一个比较条件来进行排重

 

select DISTINCT deptno,job from emp;

DEPTNOJOB
20CLERK
30SALESMAN
20MANAGER
30CLERK
10PRESIDENT
30MANAGER
10CLERK
10 
10MANAGER
20ANALYST

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值