oracle_day01
来源:互联网 发布:西安搜索引擎优化排名 编辑:程序博客网 时间:2024/06/05 17:52
一.数据存储
FILE
DB
DBMS
二.现在主流数据库管理系统
RDBMS 关系型数据库管理系统
RDB 关系型数据库
(基于二维表的数据库 )
表头
字段
字段名
字段值
行
列
三.操作数据库的语言分类
数据检索语言 select (sql)
数据定义语言 create drop alter
(DDL)
数据操作语言 insert delete update
(DML)
事务控制语言 commit rollback savepoint
(TCL)
数据控制语言 grant revoke (了解)
四.现在主流关系型数据库
oracle 甲骨文 oracle9i oracle10g 11g
sqlserver 微软
DB2 IBM
mysql SUN---oracle
五.操作oracle数据库
sqlplus
telnet IP
telnet 192.168.0.26
telnet 192.168.0.23
openlab
open123
sqlplus
openlab
open123
SQL>!clear 清屏幕
SQL>exit 退出
查看一张表的表结构
SQL>desc 表名;
SQL> desc s_emp;
Name Null? Type
----------------------------------------- -------- ---------------
ID 员工编号 NOT NULL NUMBER(7)
LAST_NAME 姓 NOT NULL VARCHAR2(25)
FIRST_NAME 名 VARCHAR2(25)
USERID 用户编号 VARCHAR2(8)
START_DATE 入职日期 DATE
COMMENTS 备注 VARCHAR2(255)
MANAGER_ID 领导的员工编号 NUMBER(7)
TITLE 职位 VARCHAR2(25)
DEPT_ID 部门编号 NUMBER(7)
SALARY 月薪 NUMBER(11,2)
COMMISSION_PCT 提成 NUMBER(4,2)
可以得到表头 和 表头中的字段名
这个地段能不能 没有值
字段对应的类型 number
varchar2
date
六.查询数据
6.1 from 子句
6.1.1 如何从表中查询一个字段的值
select 字段名 from 表名;
把s_emp 中salary对应数据查询出来
select salary from s_emp;
6.1.2 如何从表中查询多个字段的值
select 字段名1,字段名2 from 表名;
从s_emp 表中把 id 和 对应salary
查询出来。
select id,salary from s_emp;
6.1.3 如何把s_emp 表中所有的数据都
查询出来?
select id,first_name,last_name
....;
可以使用 * 号代表所有的字段名
select * from s_emp;
6.1.4 字段的数学运算
+ - * /
select salary,salary+200
from s_emp;
列出每个员工的月薪 求一天的平均
(22)工资 再列出年薪(12)
select salary,salary/22,salary*12
from s_emp;
6.1.5 字段 或者表达式的别名
表达式 或者 字段的后面 可以起另外一
个名字。
select salary sal,salary/22 svgsal,
salary*12 yearsal
from s_emp;
一个字段 或者表达式 只能有一个别名
select salary sal,salary/22 svgsal,
salary*12 year sal
from s_emp;
可以使用双引号 把一个别名看成一个
整体,使别名原样显示。
select salary "Sal",salary/22 svgsal,
salary*12 "year sal"
from s_emp;
6.1.6 sql中字符串的表达
使用单引号 引起一串字符字符
''
' '
'a'
'hello world'
select first_name,last_name
from s_emp;
6.1.7 字符串的拼接
select first_name last_name
from s_emp;// logic error
字符串拼接符号 ||
字符串 || 字符串 || 字符串
select first_name||last_name
from s_emp;
在这两个字段之间拼接一个下划线
select first_name||'_'||last_name
from s_emp;
this is
this's
在姓名之间 拼接一个单引号
%d %lf %% 转义
select first_name||''''||last_name
from s_emp;
在姓名之间 拼接两个单引号
select first_name||''''''||last_name
from s_emp;
select first_name||''''||''''
||last_name
from s_emp;
6.1.8 NULL值的处理
如果一个字段上 没有设置值 则这个
字段的值是NULL值。
select id,manager_id from s_emp;
计算年薪 希望是 按照
月薪*12 + 月薪*12*提成/100
月薪*12*(1+提成/100)
id 年薪 新的年薪
select id,salary*12,
salary*12*(1+commission_pct/100)
from s_emp;
NULL 值和任何值做运算结果都是NULL
如何进行NULL值的处理 ?
nvl(par1,par2)
当par1的值为NULL时 就返回par2
的值。par1不为NULL 就返回par1。
par1和 par2 类型必须一致。
select id,salary*12,
nvl(salary*12*
(1+commission_pct/100),0)
from s_emp; // logic error
NULL 值应该尽早处理
select id,salary*12,
salary*12*
(1+nvl(commission_pct,0)/100)
from s_emp;
显示 id first_name manager_id
如果manager_id 是NULL 就显示成 -1
select id,first_name,
nvl(manager_id,-1)
from s_emp;
6.1.9 数据的排重显示
select salary from s_emp;
排重关键字 distinct
select distinct salary from s_emp;
多字段的排重
select title,salary from s_emp;
select distinct title,salary
from s_emp;
select distinct id,salary
from s_emp;
6.2 where 子句
6.2.1 统一数据库的编程环境
把脚本上传到服务上
ftp IP
openlab
open123
put 文件名
运行脚本
SQL>路径名/脚本名.sql
6.2.2 什么是where子句
where 子句又叫条件子句 作用是
限制表中的数据返回。
符合where条件的数据被选中,不符合
where条件的数据被过滤掉。
6.2.3 语法
select 字段名1,字段名2
from 表名
where 条件;
select id,first_name
from s_emp;
select id,first_name
from s_emp
where 1=1;
select id,first_name
from s_emp
where 1=2;
6.2.4 举例
把工资等于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary=1450;
把工资小于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary<1450;
把工资大于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary>1450;
6.2.5 字符串条件的表达
查询s_emp 表 找 first_name 叫
Carmen 的员工 列出 id
first_name salary
select id,first_name,salary
from s_emp
where first_name='Carmen';
字符串条件表达式 要使用单引号
字符串的值 要注意大小写
SeLeCt Id,First_name,Salary
from s_emp
where first_name='Carmen';
6.2.6 常见的条件表达
= != > < >= <=
6.2.7 sql中提供的运算符
6.2.7.1表达一个闭区间的 [a,b]
where 字段 between a and b
工资在[1450,2500] 之间的员工信息
列出id first_name salary
select id,first_name,salary
from s_emp
where salary between 1450
and 2500;
6.2.7.2表达一个字段的值 出现在一个范围内
where 字段 in (a,b,c,d);
找出 id 是1 或者是 5 或者是11
的员工 列出 id first_name
select id,first_name
from s_emp
where id in (1,5,11);
找出部门编号 在 33或者 34 或者50
部门的员工 列出 id ,first_name,
dept_id。
select id,first_name,dept_id
from s_emp
where dept_id in(33,34,50);
select id,first_name,dept_id
from s_emp
where dept_id in(50,34,33);
对最终结果没有影响
但可能对效率产生很大的影响。
(应该把出现概率高的放前面
概率低的放后面 )
6.2.7.3模糊查询
where 字段 like '通配串';
找出姓李的人
李克强 李嘉诚 李宁
带龙的
李小龙 成龙 小龙女 龙年
通配串中需要有通配符
% 代表0-n个任意字符
_ 一个任意字符
where name like '李%'
where name like '%龙%'
找出s_emp 表中 first_name 中带
a的 列出first_name
select first_name
from s_emp
where first_name like '%a%';
列出第二个字符是a的 first_name
select first_name
from s_emp
where first_name like '_a%';
desc user_tables;
table_name
s_emp s_dept 都是以S_ 开头
要求查询出 所有的S_开头的表名
select table_name
from user_tables
where table_name
like 'S\_%' escape '\';
要求查询出 所有的S__开头的表名
select table_name
from user_tables
where table_name
like 'S\_\_%' escape '\';
6.2.7.4 NULL 值的判断
where 字段 is NULL;
查询提成是 10 的员工信息 列出
id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct=10;
查询提成不是 10 的员工信息 列出
id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct!=10;
找出提成是NULL的员工
列出id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct is null;
列出 manager_id 是NULL的 员工
信息列出 id salary manager_id
select id,salary,manager_id
from s_emp
where manager_id is null;
6.3 逻辑条件 连接符号
and a and b
查询s_emp 表中工资在[1450,2500)
列出 id first_name salary
select id,first_name,salary
from s_emp
where salary>=1450
and salary<2500;
or a or b
找出 id 是 1 或者 5 或者是 11
列出 id first_name
select id,first_name
from s_emp
where id=1 or id=5 or id=11;
not
= != ^= <>
> <=
< >=
between a and b not between a and b
in not in
like not like
is null is not null
查询 manager_id 不是NULL的员工
列出 id first_name manager_id
select id ,first_name,manager_id
from s_emp
where manager_id is not null;
6.4条件的优先表达
select salary,12*salary+1000
from s_emp;
select salary,12*(salary+1000)
from s_emp;
七.数据的排序
7.1 概念
可以按照一定的标准 对数据进行排序。
7.2 语法
order by 排序标准 排序方式;
(只能出现在sql语句最后 )
select id,salary from s_emp;
select id,salary from s_emp
order by salary;
select id,salary from s_emp
order by salary desc;
id name
1 a
2 b
3
FILE
DB
DBMS
二.现在主流数据库管理系统
RDBMS 关系型数据库管理系统
RDB 关系型数据库
(基于二维表的数据库 )
表头
字段
字段名
字段值
行
列
三.操作数据库的语言分类
数据检索语言 select (sql)
数据定义语言 create drop alter
(DDL)
数据操作语言 insert delete update
(DML)
事务控制语言 commit rollback savepoint
(TCL)
数据控制语言 grant revoke (了解)
四.现在主流关系型数据库
oracle 甲骨文 oracle9i oracle10g 11g
sqlserver 微软
DB2 IBM
mysql SUN---oracle
五.操作oracle数据库
sqlplus
telnet IP
telnet 192.168.0.26
telnet 192.168.0.23
openlab
open123
sqlplus
openlab
open123
SQL>!clear 清屏幕
SQL>exit 退出
查看一张表的表结构
SQL>desc 表名;
SQL> desc s_emp;
Name Null? Type
----------------------------------------- -------- ---------------
ID 员工编号 NOT NULL NUMBER(7)
LAST_NAME 姓 NOT NULL VARCHAR2(25)
FIRST_NAME 名 VARCHAR2(25)
USERID 用户编号 VARCHAR2(8)
START_DATE 入职日期 DATE
COMMENTS 备注 VARCHAR2(255)
MANAGER_ID 领导的员工编号 NUMBER(7)
TITLE 职位 VARCHAR2(25)
DEPT_ID 部门编号 NUMBER(7)
SALARY 月薪 NUMBER(11,2)
COMMISSION_PCT 提成 NUMBER(4,2)
可以得到表头 和 表头中的字段名
这个地段能不能 没有值
字段对应的类型 number
varchar2
date
六.查询数据
6.1 from 子句
6.1.1 如何从表中查询一个字段的值
select 字段名 from 表名;
把s_emp 中salary对应数据查询出来
select salary from s_emp;
6.1.2 如何从表中查询多个字段的值
select 字段名1,字段名2 from 表名;
从s_emp 表中把 id 和 对应salary
查询出来。
select id,salary from s_emp;
6.1.3 如何把s_emp 表中所有的数据都
查询出来?
select id,first_name,last_name
....;
可以使用 * 号代表所有的字段名
select * from s_emp;
6.1.4 字段的数学运算
+ - * /
select salary,salary+200
from s_emp;
列出每个员工的月薪 求一天的平均
(22)工资 再列出年薪(12)
select salary,salary/22,salary*12
from s_emp;
6.1.5 字段 或者表达式的别名
表达式 或者 字段的后面 可以起另外一
个名字。
select salary sal,salary/22 svgsal,
salary*12 yearsal
from s_emp;
一个字段 或者表达式 只能有一个别名
select salary sal,salary/22 svgsal,
salary*12 year sal
from s_emp;
可以使用双引号 把一个别名看成一个
整体,使别名原样显示。
select salary "Sal",salary/22 svgsal,
salary*12 "year sal"
from s_emp;
6.1.6 sql中字符串的表达
使用单引号 引起一串字符字符
''
' '
'a'
'hello world'
select first_name,last_name
from s_emp;
6.1.7 字符串的拼接
select first_name last_name
from s_emp;// logic error
字符串拼接符号 ||
字符串 || 字符串 || 字符串
select first_name||last_name
from s_emp;
在这两个字段之间拼接一个下划线
select first_name||'_'||last_name
from s_emp;
this is
this's
在姓名之间 拼接一个单引号
%d %lf %% 转义
select first_name||''''||last_name
from s_emp;
在姓名之间 拼接两个单引号
select first_name||''''''||last_name
from s_emp;
select first_name||''''||''''
||last_name
from s_emp;
6.1.8 NULL值的处理
如果一个字段上 没有设置值 则这个
字段的值是NULL值。
select id,manager_id from s_emp;
计算年薪 希望是 按照
月薪*12 + 月薪*12*提成/100
月薪*12*(1+提成/100)
id 年薪 新的年薪
select id,salary*12,
salary*12*(1+commission_pct/100)
from s_emp;
NULL 值和任何值做运算结果都是NULL
如何进行NULL值的处理 ?
nvl(par1,par2)
当par1的值为NULL时 就返回par2
的值。par1不为NULL 就返回par1。
par1和 par2 类型必须一致。
select id,salary*12,
nvl(salary*12*
(1+commission_pct/100),0)
from s_emp; // logic error
NULL 值应该尽早处理
select id,salary*12,
salary*12*
(1+nvl(commission_pct,0)/100)
from s_emp;
显示 id first_name manager_id
如果manager_id 是NULL 就显示成 -1
select id,first_name,
nvl(manager_id,-1)
from s_emp;
6.1.9 数据的排重显示
select salary from s_emp;
排重关键字 distinct
select distinct salary from s_emp;
多字段的排重
select title,salary from s_emp;
select distinct title,salary
from s_emp;
select distinct id,salary
from s_emp;
6.2 where 子句
6.2.1 统一数据库的编程环境
把脚本上传到服务上
ftp IP
openlab
open123
put 文件名
运行脚本
SQL>路径名/脚本名.sql
6.2.2 什么是where子句
where 子句又叫条件子句 作用是
限制表中的数据返回。
符合where条件的数据被选中,不符合
where条件的数据被过滤掉。
6.2.3 语法
select 字段名1,字段名2
from 表名
where 条件;
select id,first_name
from s_emp;
select id,first_name
from s_emp
where 1=1;
select id,first_name
from s_emp
where 1=2;
6.2.4 举例
把工资等于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary=1450;
把工资小于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary<1450;
把工资大于1450 的员工信息显示出来
显示 id first_name salary
select id,first_name,salary
from s_emp
where salary>1450;
6.2.5 字符串条件的表达
查询s_emp 表 找 first_name 叫
Carmen 的员工 列出 id
first_name salary
select id,first_name,salary
from s_emp
where first_name='Carmen';
字符串条件表达式 要使用单引号
字符串的值 要注意大小写
SeLeCt Id,First_name,Salary
from s_emp
where first_name='Carmen';
6.2.6 常见的条件表达
= != > < >= <=
6.2.7 sql中提供的运算符
6.2.7.1表达一个闭区间的 [a,b]
where 字段 between a and b
工资在[1450,2500] 之间的员工信息
列出id first_name salary
select id,first_name,salary
from s_emp
where salary between 1450
and 2500;
6.2.7.2表达一个字段的值 出现在一个范围内
where 字段 in (a,b,c,d);
找出 id 是1 或者是 5 或者是11
的员工 列出 id first_name
select id,first_name
from s_emp
where id in (1,5,11);
找出部门编号 在 33或者 34 或者50
部门的员工 列出 id ,first_name,
dept_id。
select id,first_name,dept_id
from s_emp
where dept_id in(33,34,50);
select id,first_name,dept_id
from s_emp
where dept_id in(50,34,33);
对最终结果没有影响
但可能对效率产生很大的影响。
(应该把出现概率高的放前面
概率低的放后面 )
6.2.7.3模糊查询
where 字段 like '通配串';
找出姓李的人
李克强 李嘉诚 李宁
带龙的
李小龙 成龙 小龙女 龙年
通配串中需要有通配符
% 代表0-n个任意字符
_ 一个任意字符
where name like '李%'
where name like '%龙%'
找出s_emp 表中 first_name 中带
a的 列出first_name
select first_name
from s_emp
where first_name like '%a%';
列出第二个字符是a的 first_name
select first_name
from s_emp
where first_name like '_a%';
desc user_tables;
table_name
s_emp s_dept 都是以S_ 开头
要求查询出 所有的S_开头的表名
select table_name
from user_tables
where table_name
like 'S\_%' escape '\';
要求查询出 所有的S__开头的表名
select table_name
from user_tables
where table_name
like 'S\_\_%' escape '\';
6.2.7.4 NULL 值的判断
where 字段 is NULL;
查询提成是 10 的员工信息 列出
id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct=10;
查询提成不是 10 的员工信息 列出
id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct!=10;
找出提成是NULL的员工
列出id first_name commission_pct
select id,first_name,commission_pct
from s_emp
where commission_pct is null;
列出 manager_id 是NULL的 员工
信息列出 id salary manager_id
select id,salary,manager_id
from s_emp
where manager_id is null;
6.3 逻辑条件 连接符号
and a and b
查询s_emp 表中工资在[1450,2500)
列出 id first_name salary
select id,first_name,salary
from s_emp
where salary>=1450
and salary<2500;
or a or b
找出 id 是 1 或者 5 或者是 11
列出 id first_name
select id,first_name
from s_emp
where id=1 or id=5 or id=11;
not
= != ^= <>
> <=
< >=
between a and b not between a and b
in not in
like not like
is null is not null
查询 manager_id 不是NULL的员工
列出 id first_name manager_id
select id ,first_name,manager_id
from s_emp
where manager_id is not null;
6.4条件的优先表达
select salary,12*salary+1000
from s_emp;
select salary,12*(salary+1000)
from s_emp;
七.数据的排序
7.1 概念
可以按照一定的标准 对数据进行排序。
7.2 语法
order by 排序标准 排序方式;
(只能出现在sql语句最后 )
select id,salary from s_emp;
select id,salary from s_emp
order by salary;
select id,salary from s_emp
order by salary desc;
id name
1 a
2 b
3
0 0
- Oracle_DAY01
- oracle_day01
- android log的两种方法
- Linux socket 编程简单例子
- Tips004 - VS2013 智能提示失效
- iphone不支持键盘事件
- xcode使用教程
- oracle_day01
- 用enum实现单例
- xshell 的游标设置为竖线
- c++基础之变量和基本类型(1)
- 线性代数系列一:行列式的概念和性质
- 简单C++调用lua函数及C++和lua相互函数调用小例子
- get MIN android develop environment on ubuntu 14.04
- C++第三章类和对象作业
- 【树状数组】尝试 POJ2352-Stars