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]