sqlplus
其他的图形化工具

=====================

使用的用户:
用户名:scott
密码:tiger

登录:
sqlplusscott/tiger

退出:
exit

查看当前用户有哪些表:
select*fromtab;

=====================

显示当前用户
SQL>showuser
USER为"SYS"

切换用户
SQL>connectscott/tiger
已连接。

命令可以使用缩写
conn[ect]user

执行上一条sql语句
/

设置行宽
setlinesize150默认为80

设置页面大小(一页显示的数据)
setpagesize100默认为14

显示参数的值
show参数名
如:
showlinesize

永久保存配置
修改glogin.sql文件。

注释:
单行注释:--
多行注释:/**/

查看表结构
SQL>descdept

====================================

SCOTT用户的表:

dept表:
deptno编号
dname
loc位置

emp表:
empno员工编号
ename
job
mgr上级主管的员工编号
hiredate入职时间
sal薪水
comm奖金
deptno所属的部门编号-->引用dept.deptno

====================================

清屏:
Windows中:hostcls
Linux中:hostclear

设置某列的宽度:
columnjobformata15或coljobfora15
columnSALformat9999或colsalfor9999
格式:
col[umn]列名for[mat]格式
对于字符串:
a20,20是一个数据,表示20个字符的宽度。
对于数字
9表示一位,有几个,就是多宽。

====================================

空值的处理
不是一个有效的值。不是0,也不是空字符串。
null!=null
isnull
isnotnull
含有null的表达式结为null

修改上一条SQL语句
ed[it]
注意:后面不要写分号

滤空函数
nvl(表达式,当表达式为空时使用的值)

selectempno,ename,sal,sal*12as年薪,nvl(comm,0),(sal*12+nvl(comm,0))总收入
fromemp

====================================

字符串
是匹分大小写的,在使用时要加引号。
在指定别名时,引号可以加,也可以不加。
当含有空格、特殊字符时,一定要加引号。
不加引号时,显示都为大写,加上引号后,就是按所写的显示了。

在使用字符串时,要使用单引号。
在写别名时,要使用双引号。

去掉重复的行
--作用于一列
SQL>selectdistinctjobfromemp;
--作用于多个列,所有列的值加一起重复才算重复的记录
SQL>selectdistinctjob,deptnofromemp;

如果只查询一个表达式,没有用到任何表的数据,这时也必须得写from...
可以写成fromdual
dual是一个虚表,本身就存在的,可以直接使用。
如:
select3+2
select'Hello'||'World'fromdual;

字符串连接符
SQL>selectename||'的薪水是'||salfromemp;

ENAME||'的薪水是'||SAL
----------------------------------------------------------
SMITH的薪水是800
ALLEN的薪水是1600
WARD的薪水是1250
JONES的薪水是2975
MARTIN的薪水是1250
BLAKE的薪水是2850
CLARK的薪水是2450
SCOTT的薪水是3000
KING的薪水是5000
TURNER的薪水是1500
ADAMS的薪水是1100
JAMES的薪水是950
FORD的薪水是3000
MILLER的薪水是1300

也可以使用函数concat():
SQL>selectconcat('Hello','World')fromdual;

where(aorb)andc

====================================

LIKE
在使用like时,可以使用%与_,分别表示任意数量的任意字符或任意一个字符。
要想表达%或_本身,需要使用转义符,例:
SQL>select*fromempwhereenamelike'KI\%%'escape'\';

BETWEEN
包含两个边界。
一定是小值写到前面,大值写到后面,否则没有结果。

IN
where..in(..,..,..,...)如果含有null,没有影响。
例:查询所有是经理的员工
SQL>select*fromempwhereempnoin(selectmgrfromemp);
where..notin(..,..,...)如果含有null,则不返回任何结果。
例:查询所有不是经理的员工
SQL>select*fromempwhereempnonotin(selectmgrfromempwheremgrisnotnull);

=========================================

MySQL中日期类型:date,time,datetime
Oracle中只有Date.

SimpleDateFormat
yyyy-MM-dd

对日期的处理
1,查询指定日期后入职的员工信息
SQL>select*fromempwherehiredate>'31-12月-81';
2,修改日期的格式
SQL>select*fromv$nls_parameters;
SQL>altersessionsetnls_date_format='yyyy-mm-dd';//只对当前session有效
3,使用日期函数的方式:
SQL>select*fromempwherehiredate>to_date('1981-12-31','yyyy-MM-dd');

SQL>select*fromempwhereto_char(hiredate,'yyyy-MM-dd')>'1981-12-31';

语法:TO_CHAR(date,'format_model')
语法:TO_DATE(str,'format_model')

格式字符串不区分大小写:
获取当前时间:
SQL>selectto_char(sysdate,'YYYY-MM-DD')fromdual;
TO_CHAR(SY
----------
2012-03-07

SQL>selectto_char(sysdate,'yyyy-mm-dd')fromdual;
TO_CHAR(SY
----------
2012-03-07

SQL>selectto_char(sysdate,'yyyy-mm-ddhh:mi:ss')fromdual;
TO_CHAR(SYSDATE,'YY
-------------------
2012-03-0702:33:41

=========================================

排序:
orderby列名,...
可以作用在:数字、日期、字符串。
可以使用列名,表达式,别名,序号(表示select中的第几个列)

升序、降列

按一个列排列,按多个列排序

当orderby所在的列中有null,会:
升序时,null的在下面。
降序时,null的在上面。
我们希望,不管升序还是降序,null值的始终在下面
方式一:SQL>select*fromemporderbycommdescnullslast;
方式二:
selectempno,ename,job,hiredate,sal,nvl(comm,0)
fromemp
orderby6desc

=====================================================

1,组函数
select
max(sal)最高工资,
min(sal)最低工资,
avg(sal)平均工资,
sum(sal)所有员工的工资和,
count(sal)领工资的员工数量
fromemp;

2,组函数对null的处理
例,查询所有员工的平均奖金(有人的奖金为null)
selectsum(comm)/count(*)平均奖金fromemp
组函数会自动过滤掉null值。
在使用avg()时要注意处理null值:
selectavg(nvl(comm,0))fromemp;
函数可以嵌套使用

3,分组
Groupby,写在FROM后,如果有WHERE,就在WHERE后面。
查询的列一定要是:
在groupby中出现的列(在Select中不一定全写上)
或是使用组函数
按一个列分组
按多个列分组
参与分组的多个列有一个不相同就是不同的组。

4,分组结果过滤
Having,是分完组后再进行过滤,只显示符合条件的结果。
在Groupby与Having中都不可以使用别名。
与Where的区别
Having是是分完组后再进行过滤。
Where是先过滤,再进行分组操作。
如果可以,尽量写Where条件,不写Having。

Select
...
From
...
Where
...
Groupby
...
Having
...
Orderby
...

================================================
子查询:
当一步不能求解时,可以使用子查询。
分为:
单行子查询
多行子查询

可以在主查询的select,from,where,having都可以放子查询
不可以在主查询的groupby放子查询
单行操作符对应单行子查询,多行操作符对应多行子查询

在select中放子查询时,要求只能是单行子查询。

IN:

ANY:
小于某集合中的任意一个值,就是小于集合中的最大值。
大于某集合中的任意一个值,就是大于最小值。

ALL:
小于某集合中的所有值,就是小于最小值。
大于某集合中的所有值,就是大于最大值。

练习题一:
题目:找到薪水大于本部门平均薪水的员工。
答案:
select*
fromempe1
wheresal>(selectavg(sal)fromempe2wheree2.deptno=e1.deptno)

练习题二:
题目:找到员工表中工资最高的前三名的员工信息
答案:
selectrownum,empno,ename,sal
from(selectempno,ename,salfromemporderbysaldesc)
whererownum<=3

rownum是一个伪列,表示记录在结果集中的行号。
1,rownum一旦生成,就不会变化(会先按没有排序时的默认顺序生成rownum,然后再执行排序)。
2,对于rownum,只能使用<与<=,不能使用>与>=与=。

SQL>selectrownum,empno,ename,salfromemp;

ROWNUMEMPNOENAMESAL
----------------------------------------
17369SMITH800
27499ALLEN1600
37521WARD1250
47566JONES2975
57654MARTIN1250
67698BLAKE2850
77782CLARK2450
87788SCOTT3000
97839KING5000
107844TURNER1500
117876ADAMS1100
127900JAMES950
137902FORD3000
147934MILLER1300

select
rownum,empno,ename,sal
from(
selectrownumr1,empno,ename,sal
fromemp
whererownum<=10
)
whererownum<=5

selectrownum,empno,ename,sal
from
...r1...
where
rownum<=10andr1>5

selectrownum,empno,ename,sal
from(selectempno,ename,salfromemporderbysaldesc)
whererownum<=3

SQL>ed
已写入fileafiedt.buf

1select
2empno,
3ename,
4salmy_sal,
5mgr,
6(selectsalfromempwhereempno=e.mgr)ASmgr_sal
7*fromempe
SQL>/

EMPNOENAMEMY_SALMGRMGR_SAL
--------------------------------------------------
7369SMITH80079023000
7499ALLEN160076982850
7521WARD125076982850
7566JONES297578395000
7654MARTIN125076982850
7698BLAKE285078395000
7782CLARK245078395000
7788SCOTT300075662975
7839KING5000
7844TURNER150076982850
7876ADAMS110077883000
7900JAMES95076982850
7902FORD300075662975
7934MILLER130077822450

已选择14行。

转载于:https://blog.51cto.com/19900212/1318734

oracle学习第一天相关推荐

  1. oracle怎么创建登录用户,Oracle学习第一课(登录oracle和创建用户)

    博客10:housen1987 housen1987.iteye.com/blog/1345496 [学习是螺旋上升的过程,由易到难,由少到多,由点到面,每一个步骤,每一个脚印,每一个见闻,每一个错误 ...

  2. oracle 学习第一天

    2019独角兽企业重金招聘Python工程师标准>>> Oracle应用开发实战 1. oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为 ...

  3. oracle 权限问题9017,[数据库]oracle学习笔记(一)用户管理_星空网

    oracle学习笔记(一)用户管理 2014-04-13 0 1 --oracle学习第一天 2 --连接 @后面连接数据库实例,具体连接到那个数据库 3 conn scott/tiger@MYORA ...

  4. Oracle学习-08.09

    Oracle学习 第一章 Oracle数据库概述 1.2 数据库基本术语 数据库 数据库是位于计算机存储设备上存放数据的仓库 数据库管理系统(DBMS) 数据库系统中对数据进行管理的软件系统,踏实数据 ...

  5. oracle 存储过程打印语句,oracle学习之第一个存储过程:打印Hello World

    --第一个存储过程:打印Hello World /* 调用存储过程2种方式: 1.exec sayhelloworld(); 2.begin sayhelloworld(); sayhelloworl ...

  6. oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备

    oracle学习笔记   oracle软件安装准备工作  第一部分 环境准备 这节课对初学者来说内容较多,我把它分成了三篇. 即使这样也不可能把每个可能遇到的问题都说到,如果遇到没说到的问题自己上网搜 ...

  7. 分享丨10年DBA老司机整理的Oracle学习路线图

    微思10年资深DBA吴老师呕心沥血的分享总结-Oracle学习路线图,看完没收获你打我. 学习Oracle的前提是:熟悉Linux操作系统.Unix操作系统. 学习方法 1.sql.pl/sql 作为 ...

  8. oracle学习数据,oracle学习中的一些心得

    当前位置:我的异常网» 数据库 » oracle学习中的一些心得 oracle学习中的一些心得 www.myexceptions.net  网友分享于:2015-08-26  浏览:10次 oracl ...

  9. Oracle学习计划

    这两天,在网上参考了大量的文档,制定了Oracle学习的读书计划,共分三个阶段: 第一阶段: 目标: 系统学习.巩固基础. 书籍: (1)Oracle Concept, Oracle Performa ...

最新文章

  1. javascript 深度克隆
  2. 【任务脚本】0619京东叠蛋糕开奖好评,简单统计等级和红包关系,坐等淘宝开奖,更新汇总战绩...
  3. 整体管理6个过程及相关重点
  4. From 7.8 To 7.14
  5. C++类中成员变量的初始化总结
  6. 动态规划 —— 背包问题 P08 —— 泛化物品背包
  7. 机器学习相关的一些术语
  8. 基于平面 marker 的 Bundle Adjustmet
  9. 多线程lambda数据捕获
  10. iOS 自定义UISlider
  11. 25.212---复用和信道编码
  12. NetScaler的cookieinsert和sourceip联合保持机制
  13. 字体怎么安装到vivo_老人用手机遇到操作麻烦?vivo远程协助及时解决问题
  14. 指针 上 :什么是指针,指针类型,指针运算等等
  15. Android-蓝牙的网络共享与连接分析
  16. 什么是懦弱型人格?懦弱的原因和改变方法
  17. 手机上将png转pdf_如何在Linux上将多个jpg图像合并为pdf?
  18. 2020年前端学习的新路径
  19. 股票数据 mysql_获取股票数据(历史数据,Python + MySQL)
  20. Maven项目之错误日志发邮件通知

热门文章

  1. 根据功率计算用电量和电费
  2. Rera1N环境Linux,降级工具ReRa1n发布,降级真的来了?
  3. 深入探寻seajs的模块化与加载方式
  4. boost asio 应用方法学(二)——深入框架
  5. TCP/IP协议:概述
  6. HashMap、TreeMap、Hashable和LinkedHashMap
  7. VC++ 文件和应用程序关联,默认图标不显示问题
  8. CGAffineTransform的使用大概:
  9. ubuntu 10.0.4安装小企鹅(Fcitx)输入法
  10. mmz-asio4delphi死链接的解决办法