万蕊科技 发表于 2014-6-2 19:40

Oracle增删查改 day01

数据库: DataBase,DB
存放数据,管理数据的存储仓库。是有效组织在一起的数据集合。
oracle是一种数据库软件。

Oracledb2(IBM)sybase(sybase)
sql server(MS)mysql(Oracle)
access

数据库管理系统(Database Management System): DBMS

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

DBA:Database Administrator 数据库管理员

Table:表:数据库的基本存储单元
横向:行,row,record
纵向:列,column,field

任务:把用户数据存入数据库的表中。
实现:
1.建立一个连接
1)数据库所在的服务器的地址:192.168.0.26
telnet 192.168.0.26
服务器的帐号/密码:openlab/open123
2)数据库访问用户:
openlab/open123
数据库默认帐户:scott/tiger
3)oracle数据库的连接工具:
SQLPlus:Oracle数据库的客户端工具
位于数据库的服务器上,192.168.0.26
$ sqlplus openlab/open123
SQL>
如果提示SQL>表示登录成功


2.把数据表建立起来。
定义数据结构:
create table user_ning1(
id number(4),
password char(4),
name char(20),
phone char(20),
email varchar2(50)
);
提示Table Created. 表示表已成功创建。

数据类型:
1)数字:
number(n),最长n位
number(n,m),最长n位,小数点后m位
number(7,2): 99999.99

2)字符串:
char: 定长字符串
varchar2:变长字符串
char(10)
varchar2(10)
3)日期
date

清屏: clear scr

3.把用户数据存入数据表中。
SQL>insert into user_ning1
    values(1001,'1234','liucs','13600000000','liucs@sina.com');

insert into user_ning1 values(1004,'1234','liyi','98765432',
'liyi@sina.com');

错误语句:
insert into user_ning1 values(1001,'1234','liucs','13600000000','my email', 25);

三种SQL语句:
1)create table...
2) insert into...values...
3) select ... from...

SQLPlus命令:
设置每行数据的显示长度:
SQL>set linesize 200
设置列宽:10个字符
SQL>column 列名 format a10
查看表结构:desc:describe 描述
SQL>desc user_ning1

规范数字宽度为4位:
SQL>column id format 9999
简写:
SQL>col id for 9999

--*表示查询全部列
select * from user_ning1;

select name,email from user_ning1;

--查找1001/1234考生的名字?
select name, email from user_ning1
where id = 1001
and   password = '1234';

数据准备:
1.表dept_ning:
create table dept_ning(
deptno number(2),
dname char(20),
location char(20));

drop table dept_ning;

增加数据:
insert into dept_ning values(10,'developer','beijing');
insert into dept_ning values(20,'account','shanghai');
insert into dept_ning values(30,'sales','guangzhou');
insert into dept_ning values(40,'operations','tianjin');

commit;

select * from dept_XXX;

2.emp_ning
create table emp_ning(
empno number(4),
ename varchar2(20),
job varchar2(15),
salary number(7,2),
bonus number(7,2),
hiredate date,
mgr number(4),
deptno number(10)
);

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);

set linesize 150
col empno for 9999
col mgr for 9999
col deptno for 99
col salary for 99999.99

select * from dept_ning;
select * from emp_ning;

一、学习查询语句。
1. 计算员工的名字、月薪和年薪?
select ename, salary,
salary * 12 year_sal
from emp_ning;

2.计算员工的月收入?
空值和任何数据做算数运算,结果为空(null)
select ename, salary, bonus,
       salary + bonus month_sal
from emp_ning;

select ename, salary, bonus,
   salary + nvl(bonus, 0) month_sal
from emp_ning;

public double nvl(double d1, double d2){
        if (d1 != null)
            return d1;
      else
            return d2;      
}
public String nvl(String s1,String s2)
{
        if (s1 != null)
                return s1;
        else
                return s2;
}
public Date nvl(Date d1, Date d2){
        return (d1 != null) ? d1 : d2;
}

insert into emp_ning
values(1011,'余泽成',null, null, null,
null, null, null);
简写为:
insert into emp_ning(empno, ename)
values(1011,'余泽成');

查询emp_ning表,如果没有职位,显示'no position',如果有职位,显示员工的职位。
select ename, nvl(job,'no position')
from emp_ning;

查询emp_ning表,如果没有入职时间,显示2011年10月10日。如果有入职时间,显示。
select ename, nvl(hiredate, '10-OCT-11') from emp_ning;

nvl(bonus, 0)
nvl(job, 'no position')
nvl(hiredate, '10-OCT-11')

--复制表emp_YYY为emp_XXX
create table emp_XXX
as
select * from emp_YYY;

3. 机构中有多少种职位?
select distinct job from emp_ning;

员工分布在哪些部门?
select distinct deptno from emp_ning;

distinct必须/只能跟在select后边。

4.薪水高于10000元的员工数据?
select * from emp_ning
where salary > 10000;

5.职位是Analyst的员工数据?
select * from emp_ning
where job = 'Analyst';

analystANALYSTanaLyst

select * from emp_ning
where lower(job) = 'analyst';

select * from emp_ning
where upper(job) = 'ANALYST';

--如果数据是analyst,查不出结果
--SQL语句大小写不敏感,数据大小写敏感

6.薪水大于5000并且小于10000的员工数据

select * from emp_ning
where salary >= 5000
and salary <= 10000;

--在区间中:between 低值 and 高值
--闭区间:[低值,高值]
select * from emp_ning
where salary between 5000 and 10000;

入职时间在2011年的员工?
['01-JAN-11','31-DEC-11']
select * from emp_ning
where hiredate between '01-JAN-11'
and '31-DEC-11';

7.列出职位是Manager或者Analyst的员工

select * from emp_ning
where job = 'Manager'
or    job = 'Analyst';
--等价:in (list),在列表中。
select * from emp_ning
where job in ('Manager','Analyst');

8.列出职位中有sales字符的员工数据?
salesman
sales
before sales
after sales
before sales engineer

--%: 0到多个字符,跟like配合,模糊匹配
select * from emp_ning
where job like '%sales%';

9.查询哪些员工没有奖金?
select * from emp_ning
where bonus is null;

哪些员工有奖金?
select * from emp_ning
where bonus is not null;

小结:
1)create table ...
drop table 表名;
2)insert into 表名 values(...);
3)select distinct | * | 列名 | 算数表达式 | 别名
from 表名
where 条件1 or 条件2 and 条件3;

> >= < <= between...and... in like

页: [1]
查看完整版本: Oracle增删查改 day01