Oracle day1
来源:互联网 发布:企业电话搜索软件 编辑:程序博客网 时间:2024/06/06 10:05
ORACLE SQL
SQL(structured query language)
data 持久化(保存)
文件
数据库(database)
table
SQL操作table
DDL(data definition language数据定义语言)
create table 创建表:colmn,structure
colmn(列):colmn name(列名),data type(数据类型),length(长度),constraint(约束)
alter table修改表结构
修改列(add colmn增加列,modify colmn修改列,drop colmn删除列)
drop table 从数据库中删除表
DML(data manipulation language数据操作语言):row,data
row(行)
insert into tabame 插入一条记录
update tabname 修改一条记录的某列的值
delete from tabname 删除一条记录
TCL(transaction 事务 control language事务控制语言):ATM(交易)
commit(提交):让dml操作产生的数据入库
rollback(回滚):让dml操作失效
DQL(data query language数据查询语言)
select
DCL(data control langauge 数据控制语言)
usera,userb
usera
grant select on tabname to userb;
revoke
revoke select on tabname from userb;
使用频度高的语句
DQL,DML,TCL
oracle oracle10g mysql
IBM db2
MS SQL server
.....
DBA(database administrator 数据库管理员)
install RDBMS(relationship database management system关系型(二维表:列,行)数据库管理系统)--> create Database(open)-->create user-->(跟数据库建连接(登录,身份认证)-->SQL(DDL DML...),程序员的操作)
solaris
oracle server oracle数据库服务器
oracle for solaris
sqlplus
192.168.0.26
192.168.0.20
192.168.0.23
远程登录 telnet
Linux终端: telnet 192.168.0.26(登录到26服务器上)
patch补丁 bug
login:openlab
password:open123
sunv210% echo $ORACLE_SID
tarena
sunv210%
%sqlplus
SQL>
提示符
sunv210% shell里(cmd),os命令
SQL> :where am i
SQL> show user(Who am I)
JDBC TCP/IP
(ip address port(端口 1521)数据库服务器名字用户名密码)
(端口号标识了唯一的应用)
emp employee(员工)
dept department(部门)
create table dept_hiloo
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
DQL select
emp_jsd1301
newtab不存在
create table newtab(自己起的)
as
select * from oldtab(已经存在的);
newtab表存在,没有数据(也可以有数据)
insert into newtab
select * from oldtab;
emp,dept select
SQL 4GL 描述语言
select语句
源表结果集
结果集是表里的部分列:投影操作
结果集是表里的部分行:选择操作
结果集来在多张表的记录的组合:连接操作
单表操作
多表操作
select语句基本语法:
select colname1,... from tabname;
投影操作用select子句实现
sql语句经sqlplus送给server process(连接建好后标志创建server process进程),对语句进行语法分析,语义分析,产生执行计划并执行,生成结果集,把结果集传回sqlplus.
select子句
后面跟列名,函数,表达式(数值,字符),运算功能,投影操作
对记录(可能是单列,可能是多列)去重
null的概念
null值,insert into (null)
bonus列不存占空间,未知的
null被看成无穷大
1,(5000+null)*12 = null表达式中有null值,结果为null
空值转换函数
nvl(p1,p2) p1,p2参数
if p1 is null then
return p2;
else
return p1;
end if;
2 如果有多个null,经distinct处理后,保留一个.
字符串的拼接 ||
dual 单列单行用于常量的调用
where子句
where 条件表达式
列名比较运算符值
后面有多个条件,用and,or连接
课堂练习
1列出每个员工的名字和他的工资?
select ename,salary from emp_hiloo;
2列出部门表的所有信息?
select * from dept_hiloo;
*表示所有列
3列出每个员工的名字和他的年薪?
select ename,salary*12
from emp_hiloo;
4列出每个员工的名字和他一年的总收入
select ename,(salary+bonus)*12 ann_sal
from emp_hiloo
ann_sal 列别名
(这里的本质:把列名当做了变量在数据库服务器中进行操作)
select ename,(salary+bonus)*12 "Ann Sal"
from emp_hiloo
如果列别名中包含空格或希望大小写敏感,用双引号括起来.
(5000+null)*12 = null
(15000+null)*12 = null
(4000+null)*12 = null(说明算术运算有null,其结果一定是null)
需要重新解读null值。
select ename,
(salary+nvl(bonus,0))*12 ann_sal
from emp_hiloo;
nvl(p1,p2)控制转换函数,
if p1 is null then
return p2
else
return p1;
注意:双引号表示变量(列名),单引号表示字符串。
From用于循环遍历数据,select跟的是循环体(即循环要处理的表达式)。
Dual表单行单列,用于算术运算。
学到本质了快!
5
zhangwuji's job is Manager.
liucangsong Analyst
liyi Analyst
guofurong Programmer
zhangsanfeng President
yanxiaoliu Manager
luwushuang clerk
huangrong Manager
weixiaobao salesman
guojing salesman
' 二义性表示字符串的定界符,单引号本身
''''表示单引号本身.(外面两个单引号表示中间的是字符串,中间两个单引号表示一个单引号)
select ename||'''s job is '||job
|| '.' emp
from emp_hiloo
注意:编程中拼接字符串使用“+”,而这里使用“||”
6公司里有哪些职位?
小感:应该这样去思考,
(1) 思考表的结构
(2) 思考结果集是神马样子的。
distinct:对记录做去重的,结果集的记录是唯一的.
select distinct job from emp_hiloo
7公司里有哪几类奖金?
select distinct bonus from emp_hiloo;
空值将作为一类
8各个部门有哪些不同的职位?
select distinct deptno,job
from emp_hiloo
distinct后面跟多列,多列联合去重.(即将多个列联合起来去重复【使其唯一】)
这是本质!!!
Select核心是运算。!
小感:一定要把本质理解清楚了啊!
9哪些员工的工资比5000高?
select ename,salary(循环体【表达式】)
from emp_hiloo(循环)
where salary > 5000(循环体中的判断,满足条件的放入结果集)
假如让我编程来实现这段描述语言呢?
10哪些员工的工资比5000高,列出名字,年薪
select ename,salary*12 ann_sal
from emp_hiloo
where salary > 5000
(1) 遍历每一行
(2) 将salary > 5000的记录放入结果集一
(3) 在结果集一中将salary*12放入最终结果集。
(4) 还回最终结果集。
11哪些员工的年薪大于60000?列出名字,年薪
select ename,salary*12 ann_sal
from emp_hiloo
where salary*12 > 60000;
select ename,salary*12
from emp_hiloo
where salary > 5000
select ename,salary*12 ann_sal
from emp_hiloo
where ann_sal > 60000;
ORA-00904: "ANN_SAL": invalid identifier
无效的标识符(没有这个列名)
结论:得出了执行顺序
先formà再whereà最后select
一定要明白结果集是怎样产生出来的!
select语句中各个子句的执行顺序
from --> where --> select
12 zhangwuji的年薪是多少?
select ename,salary*12 ann_sal
from emp_hiloo
where ename = 'zhangwuji'
怎么存怎么写,数据有规则
忽略大小写,upper(p1),返回值大写,lower(p1)小写,initcap(p1)首字符大写
select ename,salary*12 ann_sal
from emp_hiloo
where ename = 'Zhangwuji'
区分大小写,它的编码(ASCII)的值不一样
no rows selected(即判断不存在)
课外练习
1不知道ename存储的大小写,找出zhangwuji的年薪?
2哪些员工的工资在[5000,10000]之间.
3 哪些员工的奖金是400,500,1000
4 哪些员工的工资不在[5000,10000]之间.
5 哪些员工的奖金不是400,500,1000.
小结:
(1) sql语句执行顺序(一定要想要下是你写的执行程序)
先遍历每一条数据,将满足where的记录(一行数据)放入结果集,
如果select有算数表达式,就将列名当做变量,在次遍历所有行,将对应值赋给变量并将计算的结果放入结果集,最后将最终结果集返回。
(2) null值处理
- oracle day1
- Oracle day1
- Oracle,day1
- oracle基础笔记day1
- 【Oracle】复习day1
- day1-java&oracle总结
- Oracle数据库学习整理day1
- Oracle 学习 Day1 - Oracle 数据库与实例
- Day1
- day1
- day1
- day1
- day1
- day1
- day1
- Day1
- DAY1
- day1
- jni/C/CPP调用示例(一)
- 灰太狼大王讲java之静态方法
- 时间差
- 无锁同步栈实现
- 机器学习中的算法
- Oracle day1
- 用类处理找出数组中的最大值
- jni/C/CPP调用示例(二)
- android json解析及简单例子
- VS2010安装MSDN出错:“未能在指定文件夹中创建本地存储区,请选择其他位置。可以检查事件日志以了解详细信息”
- opencv 笔记06Core_Paint
- Android错误集锦了!
- del_09dbf6b66ca77798b8184367605f9bbebef6acc6_1_新建文本文档 (4)
- 表单提交时,组件属性为disabled="disabled"是不会提交数据的