Oracle数据库的初学者适用资料

 

    哥也是Oracle数据库的初学者,总结了一份Oracle数据库的的课堂笔记,共享给通道中者。

   一.数据库的定义(DataBase:DB)
1.历史
2.数据库产品
Oracle, DB2(IBM), Sybase(Sybase)
sql server(微软), mysql(Oracle)
access
3.数据库是存放数据/访问数据/维护数据的存储仓库.
4.数据库软件由两部分组成:数据存储的仓库/管理系统(DBMS:Database Managment System)
5.数据库中数据的主要载体: 表(Table)
二维表:横向:行,记录(record)
       纵向:域,列(column)


二.数据库的简单操作
1.连接数据库的方式
1)远程登录到数据库服务器:
C:>telnet 192.168.0.26
   openlab/open123


2)使用数据库的工具sqlplus连接到数据库
$ sqlplus openlab/open123
sqlplus:数据库的客户端命令行工具.
        用户和数据库的沟通工具.

 

2.创建一个用户表,存放考生信息.
SQL> create table users_ninglj(
     id number,
     password char(4),
     name char(20),
     phone char(11),
     email char(30)
     );

1)关键字:create table
2)表名:users_ninglj自定义,不超过30个字符
3)列名:id/password/name/phone/email自定义
4)数据类型:number:数字,char:字符串
5)以分号结束
6)每个列之间用逗号隔开,最后一个列没有逗号.

SQL:Structured Query Language
    结构化查询语言
    和数据库沟通的途径

 

3.增加数据到表users_ninglj中.
insert into users_ninglj
values(1001, '1234', 'liucs',
'13600000000','liucs@tarena.com.cn')
;

insert into users_ninglj
values(1002, '1234', 'zhangwuji',
'13700000000','zwj@tarena.com.cn')
;

insert into users_ninglj
values(1003, '1234', 'zhaomin',
'13800000000','zm@tarena.com.cn')
;

insert into users_ninglj
values(1004, '1234', 'tom',
'13900000000','tom@sina.com')
;

4.查询刚刚增加的数据:
select * from users_ninglj;

5.调整格式:
SQL指令,只在sqlplus工具中有用
SQL>column 列名 format 格式
    column name format a10 --10位字符
    column id format 9999 --四位数字
    col id for 9999 --简写形式

而SQL语句(create / insert / select)
在不同数据库中是通用的.


小结:语句的种类:
1.create: 创建语句
2.insert into 表名 values(列数据);
  插入语句(新增语句)
3.select * from 表名; 查询语句

查询是否有1001/1234的用户:
select name from users_ninglj
where id = 1001 and password = '1234';

常用的数据类型:
数字类型: number
          number(4): 最多4位数字
          number(7,2):共7为,2位小数
                      99999.99

字符类型: char : 定长字符串
          char(10)占据10个长度的空间
          不管数据多长,都占据10个长度
          varchar :变长字符串
          varchar(10):根据字符数据的                实际长度决定空间大小.
          varchar2:变长字符串
             oracle独有的
         
create table myuser(
id number(4),
name char(10),
email varchar(20)
);
insert into myuser
values(1, 'tom', 'tom@sina.com');

 

日期:date 7位日期数据

java取系统时间:
  Calendar.getInstance();

 

oracle取系统时间:
  select sysdate from dual;
默认格式: 08-OCT-11
          DD-MON-RR , 不是YY
 
当前年: 11年(2011年)  
               YY     RR 
        08年  2008   2008
        95年  2095   1995

当前年: 95年(1995年)
        01年  1901   2001
        98年  1998   1998

 

6.创建数据结构,新增数据,为下一步的学习准备数据资料.
CREATE TABLE DEPT_ning (DEPTNO NUMBER(2) PRIMARY KEY,
DNAME VARCHAR2(14) ,LOC VARCHAR2(13) ) ;
INSERT INTO DEPT_ning VALUES(10,'研发部','北京');
INSERT INTO DEPARTMENT_ning VALUES (20,'财务部','上海');
INSERT INTO DEPT_ning VALUES(30,'销售部','广州');
INSERT INTO DEPT_ning VALUES(40,'后勤部','天津');

 

--删除表结构
drop table emp_ning;


--创建表结构
create table emp_ning(
id number(4),
name varchar2(20),
job varchar2(20),
salary number(7,2),
bonus number(7,2),
hiredate date,
mgr number(4),
deptno number(2)
);

insert into emp_ning values(1001, '张无忌', 'Manager', 10000, 2000, '12-MAR-10', 1005, 10);
insert into emp_ning values(1002, '刘苍松', 'Analyst', 8000, 1000,  '01-APR-11', 1001, 10);
insert into emp_ning values(1003, '李翊', 'Analyst', 9000, 1000,  '11-APR-10', 1001, 10);
insert into emp_ning values(1004, '郭芙蓉', 'Programmer', 5000, null, '01-JAN-11', 1001, 10);
insert into emp_ning values(1005, '张三丰', 'President', 15000, null, '15-MAY-08', null, 20);
insert into emp_ning values(1006, '燕小六','Manager', 5000, 400, '01-FEB-09', 1005, 20);
insert into emp_ning values(1007, '陆无双','clerk', 3000, 500, '01-FEB-09', 1006, 20);
insert into emp_ning values(1008, '黄蓉','Manager', 5000, 500, '1-MAY-09', 1005, 30);
insert into emp_ning values(1009, '韦小宝','salesman', 4000, null, '20-FEB-09', 1008, 30);
insert into emp_ning values(1010, '郭靖','salesman', 4500, 500, '10-MAY-09', 1008, 30);


--奖金写错了,应该是800, 写成80
--更新数据的语句:
update emp_ning
set bonus = 800 where id = 1008;

 

--数字数据直接写,不用单引号
--字符和日期,用单引号.

 

--查询表的全部数据:
select * from emp_ning;

SQL>set linesize 300
SQL>set pagesize 100
SQL>col name for a15
SQL>col id for 9999

 

--复制表:
--已有表结构,只复制数据(emp_my表已存在,结构和emp_you相同)
SQL>insert into emp_my
    select * from emp_you;


--复制表结构和数据(emp_myother表不存在)
SQL>create table emp_myother
    as
    select * from emp_you;

 

四.查询语句


1.计算员工的年薪?
  select * from emp_ning;
  select name, salary from emp_ning;
  select name, salary, salary * 12
  from emp_ning;

 

2.计算员工的月收入是多少?
select name, salary, bonus,
salary +

bonus sal_month
from emp_ning;

select name, salary, bonus,
salary + nvl(bonus,0) sal_month
from emp_ning;

nvl(bonus,0)
  ==> (bonus == null) ? 0 : bonus


使用nvl函数,更正空值计算出现的逻辑错误.

--凡是和空值计算的算术表达式,结果为空.
--数据库中任何数据类型都可以取null值
表示这个数据暂时没有.

 

insert into emp_ning values(1011, '余则成', null, null, null, null, null, 10);

java:只有引用类型数据,可以取null值
String name = null; //ok
List list = null;   //ok
int i = null;       //error
boolean f = null;   //error

 

3.员工都分布在哪些部门?
select deptno from emp_ning;

--去除重复记录
select distinct deptno from emp_ning;

员工表中有多少种职位?


select job from emp_ning;--不去重
select distinct job from emp_ning;--去重

 

4.条件查询.
哪些员工的薪水>1w?
select name, salary from emp_ning
where salary > 10000;

 

--哪些员工的薪水在5000-10000之间
--闭区间:[5000, 10000]
select name, salary from emp_ning
where salary <= 10000
and salary >= 5000;
--可以简写为:
select name, salary from emp_ning
where salary between 5000 and 10000;

 

5.把员工按照薪水由低到高排序
--正序排序
select name, salary
from emp_ning
order by salary;

 

--倒序排序(由高到低) desc = descend
select name, salary
from emp_ning
order by salary desc;

空值被视作最大.

 

 

--按员工的入职时间排序,入职越早排在前面
select name, hiredate
from emp_ning
order by hiredate;

 

6.查询部门10或者部门20的员工
select *
from emp_ning
where deptno = 10
or deptno = 20
or deptno = 30
or deptno = 40
or deptno = 50;
--in:在列表中.
select * from emp_ning
where deptno in (10,20,30,40,50);

 

列出职位是Analyst或者Programmer的员工
select * from emp_ning
where job = 'Analyst'
or job = 'Programmer';
--或者写成:
select * from emp_ning
where job in ('Analyst','Programmer');

--SQL语句的大小写不敏感,比如:
 select和SELECT一样
--数据大小写敏感.比如:
 Analyst和analyst不一样

 

--查询所有的分析员:
select name, job from emp_ning
where lower(job) = 'analyst';

 

等价于:
select name, job from emp_ning
where upper(job) = 'ANALYST';

lower(job): job='AnaLyst'
   ==> job = 'analyst

select * from emp_ning
where
lower(job) in('analyst','programmer');

 

7.哪些员工的职位中包含'sales'?
--模糊查询
 select name, job
 from emp_ning
 where job like '%sales%';

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值