sql相关的文件文档格式.docx
《sql相关的文件文档格式.docx》由会员分享,可在线阅读,更多相关《sql相关的文件文档格式.docx(49页珍藏版)》请在冰豆网上搜索。
createdatabase(创建数据库)
startup(open打开状态)
---------SD(softwaredeveloper)
--->
登录数据库(建立数据库连接)
SQL语句
console
telnet192.168.0.26
telnet192.168.0.23
osopenlab/open123%$shell提示符
sqlplus
dbopenlab/open123SQL>
echo$ORACLE_SID(环境变量)
oracledbserver(oracle数据库服务器)的名字open状态
sqlplus
setenvORACLE_SIDhiloo
ERROR:
ORA-01034:
ORACLEnotavailable
没有hiloo这个oracle数据库服务.
cmd(windows)shell(unix)都是命令解释器
C/Sclient/server(客户端/服务器)
客户端程序和服务器端程序在同一台机器上sqlplus
客户端程序和服务器端程序在不同的机器上jdbc(tcp/ip)
客户端程序和服务器端程序在同一台机器上
D:
\>
setORACLE_SID=hiloo
setORACLE_SID
ORACLE_SID=hiloo
%setenvORACLE_SIDhiloo
%echo$ORACLE_SID
ORA-00955:
nameisalreadyusedbyanexisting(存在)object
createtabletest(c1number)
tablecreated
desctest(describetest显示表结构)
insert
1rowinserted
源表from后面的表名结果集select语句的查询结果
select语句select子句from子句
投影操作(select子句)选择操作连接操作
select子句列名,表达式,函数
算术表达式字符表达式(字符串拼接)
select*fromdept_hiloo
empno员工编号
mgr该名员工领导的员工编号
语法检查,语义检查,生成执行计划,执行该计划,产生结果集.
select表达式列别名fromtabname
字符串用'
'
列别名用"
"
空格或者大小写敏感
insert包含null,没值,算术表达式中包含null值,结果一定为null.null可以按无穷大理解.
nvl(p1,p2)返回值nvl(bonus,0)空值转换函数p1,p2的数据类型一致
pl/sql程序函数
ifp1isnullthen
returnp2;
else
returnp1;
endif;
distinct不同区别去重
distinctdeptno,jobfromemp_hiloodistinct之后,from之前的所有列联合去重
selectfromwhere
where子句实现选择操作where条件表达式列名比较运算符值
wheresalary>
5000
where子句执行在select子句之前,所以列别名不能用于where子句
表达式比较运算符值(尽量不用)
betweenand闭区间范围>
=and<
=
in(集合)<
=>
=any(跟集合里的任意一个值相等)<
=or=
ORA-01797:
thisoperator(运算符)mustbefollowed(跟)byANYorALL
c1between10and20
c1in(10,20)
like像字符
通配符%0或多个字符_任意一个字符
S'
like'
S%'
S_'
_%有两个含义一个代表通配符,另一个代表它本省
isnull
否定形式
isnullisnotnull
=<
>
!
betweenandnotbetweenand比小的小比大的大
likenotlike
innotin
notin<
<
all(跟集合里的所有值都不相等)<
and<
建连接
DDLDMLTCL
selectdistinctfromwhere
fromwhereselectdistinct
where数据类型比较运算符(betweenandinlikeisnull)null
课堂练习
1列出员工名称以及工资
selectename,salaryfromemp_hiloo
2列出员工名称以及年薪
selectename,salary*12fromemp_hiloo
3列出员工名称以及一年的总收入
selectename,(salary+nvl(bonus,0))*12tot_salfromemp_hiloo
4公司里有哪些不同的职位
selectdistinctjobfromemp_hiloo
5公司里每个部门有哪些不同的职位
selectdistinctdistinctdeptno,jobfromemp_hiloo
6工资大于5000的员工的名称和工资
selectename,salaryfromemp_hiloowheresalary>
7工资大于5000的员工的名称和年薪
selectename,salary*12fromemp_hiloowheresalary>
8年薪大于60000的员工的名称和年薪
9哪些员工的职位是clerk
selectename,jobfromemp_hiloowherejob='
clerk'
10哪些员工的职位是Manager
Manager'
11哪些员工的职位是clerk,不知道clerk的大小写
selectename,jobfromemp_hiloowherelower(job)='
12找出工资在5000到10000之间的员工的名称和年薪
wheresalarybetween5000and10000
13哪些员工的职位是clerk或Manager或salesman
selectename,jobfromemp_hiloo
wherejobin('
'
salesman'
)
14哪些员工的名字的第二个字符是a.
selectename,jobfromemp_hiloo
whereenamelike'
_a%'
15哪些员工的职位的前两位字符是j_(j_salesman符合条件)
转义
wherejoblike'
j\_%'
escape'
\'
16哪些员工没有奖金
selectename,bonusfromemp_hiloo
wherebonusisnull
17哪些员工有奖金
wherebonusisnotnull
关于null的讨论
distinctbonus,bonus包含多个null值,结果集包含一个null值.
判断一个列的取值是否为空,用isnull
null=null不成立1<
null不成立null<
null不成立
对于in来说,集合里面是否包含null值,对结果集没影响
对于notin来说,集合里面包含null值,结果集一定是norowsselected.(没有任何记录)
函数function
单行函数upper(p1)
p1是参数,按参数的数据类型分类
字符函数upperlower
数值函数roundtrunc
日期函数sysdateadd_months
一般函数nvl(bonus,0)nvl(ename,'
A'
),nvl(hiredate,sysdate)
转换函数to_date,to_char,to_number
多行函数(组函数)
round(p1,p2)四舍五入
round(1.235,2)-->
1.24
round(1.235,0)=round(1.235)-->
1
round(15.5,-1)20
trunc(p1,p2)截取
trunc(1.235,2)-->
1.23
trunc((15.5,-1)10
日期类型
session会话通过connection创建session
alter(修改)sessionset(设置)
SQL>
altersession
2setnls_date_format='
yyyymmddhh24:
mi:
ss'
;
date世纪年月日时分秒7个字节(固定)
缺省日期格式DD-MON-RR
ORA-01861:
literal(文字值)doesnotmatch(匹配)formatstring(格式串)
to_dateto_char说明date类型是格式敏感的.
2008080808:
08:
08
ORACLE_SID
sqlplususername/passwd
sql>
connectopenlab/open123
转换函数
system(系统级)session(会话级)statment(语句级)
insertintotestvalues
(to_date('
08'
'
);
selectto_char(c1,'
)fromtest;
产生一个日期值to_date
处理一个日期值to_char
隐式转换系统转换
显式转换用户调用转换函数
03'
=3缺省方式:
字符型-->
数值型
to_number('
)=3char_to_number
ab'
)invalid(无效)number
to_char(salary)number_to_char
to_char(sysdate)date_to_char
日期运算
日期+(-)数值日期-日期
日期函数
add_months(sysdate,1)add_months(sysdate,-6)
months_between(sysdate,hiredate)相差了多少月
last_day(sysdate)某月的最后一天
一般函数
nvl,coalesce()
ORA-00932:
inconsistent(不一致)datatypes(数据类型):
expected(期待)NUMBERgotCHAR
1selectename,empno,
2coalesce(to_char(mgr),'
Boss'
3*fromemp_hiloo
ORA-01722:
invalid(无效)number
1selectename,empno,
2nvl(to_char(mgr),'
1请找出3月份入职的员工.
selectename,hiredate
2fromemp_hiloo
3whereto_char(hiredate,'
mm'
)='
=3
l
1selectename,hiredate
3*whereto_char(hiredate,'
fmmm'
3'
fm去掉前导0或者两端的空格
2十分钟之后
selectsysdate,sysdate+1/144
2fromdual;
3列出ename,empno,mgr,其中zhangsanfeng的mgr显示Boss
函数function
sysdate无参数的函数
upper(ename)
ename值参数函数有返回值,返回值指定数据类型
产生一个日期值函数的返回值是日期类型to_date
处理一个日期值,处理的参数是日期类型to_char(hiredate,'
排序
orderby是最后一个子句,orderby在select之后执行
orderby列名asc(升序,缺省)desc(降序)
orderby后面跟列名,列别名,表达式(函数),位置
字符,数值,日期都可以排序
avg()平均值数值
sum()求和数值
count()计数数值字符日期
min()最小值数值字符日期
max()最大值数值字符日期
avg(all)avg(distinct)
组函数处理的是所有的非空值,count(*)返回记录数,空值不影响
groupby
ORA-00937:
notasingle-groupgroupfunction不是组函数
在没有groupby的情况下,select后面只要有一个组函数,其他的必须是组函数
在有groupby的情况下,sele