Oracle 笔记 day01

Oracle day1
20120214
=======================
宁丽娟 ninglj@tarena.com.cn

程序员
DBA

一.什么是数据库
软件 = 数据仓库 + 管理软件
Database : 数据库
DBMS: DataBase Management System

Oracle
DB2(IBM) Sybase(sybase)
mysql(Oracle)  sqlserver(MS)
sqlite(嵌入式数据库)
access

二.访问数据库
1.telnet远程登录到数据库服务器
C:>telent 192.168.0.26
openlab/open123
(这个步骤和数据库无关)

2.sqlplus连接数据库
sqlplus是数据库的命令行客户端工具
% sqlplus
数据库的帐号/密码: openlab/open123
SQL> 

3. 表(table)
1)建表
--最长30个字符.
--数字,字符,日期
create table users_ning(
id number,
pwd char(4),
name varchar(20),
phone varchar(30),
email varchar(50)
);

number  数字类型
char / varchar 字符类型
       varchar2
date    日期类型

2)插入数据
insert into users_ning
values(1001, '1234', 'liucs',
'13800000000',
'liucs@tarena.com.cn');

SQL语句: Structured Query Language
SQL>create table  建表
SQL>insert into...插入数据
SQL>select ...from... 查询
SQL>commit  提交

三.查询数据
1)准备数据
create table dept_ning1(
deptno number(2),
dname varchar2(20),
location varchar2(20)
);
insert into dept_ning1
values(10, 'developer', 'beijing');
insert into dept_ning1
values(20, 'finance', 'shanghai');
insert into dept_ning1
values(30, 'sales', 'guangzhou');
insert into dept_ning1
values(40, 'operation', 'tianjin');
commit;
select * from dept_ning1;

create table emp_ning100(
empno number(4) primary key,
ename varchar2(20),
job varchar2(20),
salary number(7,2),
bonus number(7,2),
hiredate date default sysdate,
manager number(4),
deptno number(2)
);

insert into emp_ning100
values(1001, 'zhangwj', 'Manager',
10000, 2000, '12-MAR-10', 1005, 10);
--继续插入其他9条记录
insert into emp_ning100
values(1011, 'tom', null,
null, null, null, null, null);
--如果null值太多,可以简写为:
insert into emp_ning100
(empno, ename) values(1011,'tom');

 

commit;

--复制表
--将emp_ning100复制为emp_ning200
create table emp_ning200
as
select * from emp_ning100;
2)学习查询语句
--按薪水排序,由高到低
 select * from emp_ning
 order by salary desc;

--null值被视作最大.

--按入职时间排序
select ename, hiredate from emp_ning
order by hiredate

public Integer nvl(
    Integer bonus,Integer value){
 if (bonus == null)
  return value;
 else
  return bonus;
}
--查询员工的月收入,处理null值
--如果薪水或奖金是null值,按0计算
--NVL(EXPR1,EXPR2) 若EXPR1是NULL,则返回EXPR2,否则返回EXPR1.

select ename, salary, bonus,
nvl(salary, 0) + nvl(bonus, 0)
as month_sal
from emp_ning
order by salary desc;

select ename,job from emp_ning
where upper(job) = 'ANALYST';
      lower(job) = 'analyst';
--in (list)
select ename, job
from emp_ning
where lower(job) in ('analyst',
'programmer', 'clerk');

--查找部门10或部门20的员工
select ename from emp_ning
where deptno in (10, 20);

--查找薪水在5000到8000之间的员工
--包括5000和8000.
select ename, salary
from emp_ning
where salary >= 5000
  and salary <= 8000;
--[5000, 8000] 闭区间
select ename, salary
from emp_ning
where salary between 5000
      and  8000;

//
--
#
<!-- 注释 -->

空值:
select ename, salary
from emp_ning
order by salary desc;

select ename
from emp_ning
where salary is null;

select ename
from emp_ning
where salary is not null;

select count(*) from user_tables;
--所有名字中包含emp的表的个数
select count(*) from user_tables
where table_name like '%EMP%';

--查找书名里包含java的书
select book_name from books
where lower(book_name)
      like '%java%';

select ename, salary,
    salary * 0.12345678 as tax
from emp_ning;

round : 四舍五入
trunc : 截取


张三  6  5  7  8    6.5
李四  6  3  7  7    5.75 -> 6
                    5.2  -> 5

日期:
sysdate: 系统时间
'14-FEB-12' : oracle默认的日期格式
DD-MON-RR
now: 2012年
         YY      RR
95年    2095    1995
05年    2005    2005

select to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss')
from dual;

select ename, hiredate,
to_char(hiredate, 'yyyy-mm-dd') h
from emp_ning;


附加:
一,摘要:在自己电脑上用PL/SQL查询时间报错,报错代码是:ORA-01843: not a valid month

这是因为客户端是中文环境,格式mon就不能用英文的月份写法,必须用中文的“六月”
如果不想修改sql,那么请修改nls_date_language。详情请继续往下看!

 

执行下面的语句时报错了:

select months_between ('01-SEP-95','11-JAN-94') from dual;

我把日期中的英文月份改为汉字后执行就ok

select months_between ('01-9月-95','11-1月-94') from dual;
19.6774193548387

 

二, 下来我们思考如何才能让日期格式为英文月份的语句正确执行呢?
 

--用sql语句修改客户端的nls_date_language即可:

SQL> alter session set nls_date_language='american';

Session altered

到这里就设置好了,下面的语句就能正确执行了!


三,日期格式修改
SQL> select sysdate from dual;

SYSDATE
---------------
19-OCT-09
SQL> alter session set nls_date_format="MON-DD-YYYY";

Session altered.
SQL> select sysdate from dual;

SYSDATE
-----------------
OCT-19-2009

SQL>

 

 

小结:
1.DDL(Data Definition Language):
 create / drop
2.DML(Data Manipulation language):
 insert / update / delete
3.DQL(Data Query Language):
 select
4.TCL(Transaction Control Language)
 commit

 


--java程序员
SCJP: sun certification
      java programmer
OCJP: Oracle ....

google: scjp 模拟题

--DBA
OCP: Oracle certification Professor

 


 

posted on 2012-02-19 12:55  ChenJW  阅读(364)  评论(0编辑  收藏  举报

导航