Oracle数据库学习的第二天(Oracle的简单操作)
一、SQL92/【99】标准的四大分类
DML(数据操纵语言):select,insert,update,delete
DDL(数据定义语言):create table,alter table,drop table,truncate table
DCL(数据控制语言):grant 权限 to scott,revoke 权限 from scott
TCL(事务控制语言):commit,rollback,rollback to savepoint
二、Oracle的简单操作
2.1 oracle的准备工作(在cmd命令行下的操作)
1.使用cmd,以管理员身份连接到Oracle数据库
sqlplus / as sysdba
2.使用cmd,以普通身份连接到Oracle数据库
sqlplus scott
3.退出oracle数据库
exit
4.显示当前用户
show user
5.查看scott用户下面的表对象
select * from tab;
2.查询emp表(在cmd命令行中一定要以分号结束)
select * from emp;
3.设置显示记录总条数
4.对emp表进行显示做设置,让emp中表的数据对齐
5.清屏操作
6.查询表结构
2.2 简单的select语句
1.查询emp表的所有内容
select * from emp;
2.查询部分字段,并给查询出来的字段取别名
select empno "编号",ename "姓名",sal "工资",deptNO "部门号" FROM Emp;
3.查询emp表字段不重复的数据
select distinct job from emp;
4.查询员工的编号,姓名,月薪,年薪(月薪*12)
select empno,ename,sal,sal*12 "年薪" from emp;
5.查询员工的编号,姓名,入职时间,月薪,年薪,年收入(年薪+奖金)
select empno "编号",ename"姓名",hiredate "入职时间",sal "月薪",sal*12 "年薪",sal*12+comm "年收入" from emp;
注意:如果结果为null,在sqlplus客户端工具中,是不显示null这个值的
解决null的问题,使用NVL()函数,NVL(a,b):如果a是NULL,用b替代;如果a是非NULL,就不用b替代,直接返回a
select empno "编号",ename"姓名",hiredate "入职时间",sal "月薪",sal*12 "年薪",sal*12+NVL(comm,0) "年收入" from emp;
注意:null与具体数字运算时,结果为null
6.使用列别名,查询员工的编号,姓名,月薪,年薪,年收入(年薪+奖金),AS大小写都可且可以省略AS,别名用双引号
select empno AS "编号",ename as "姓名",sal "月薪" from emp;
注意:
不加双引号的别名不能有空格;加了双引号的别名可以有空格
要加只能加双引号,不能加单引号,因为在oracle中单引号表示字符串类型或者是日期类型
列名不能使用单引号,因为oracle认为单引号是字符串型或日期型
7.使用dual哑表或者伪表 使用字符串连接符号||连接字符串
select 'hello' || 'world' from dual
8.使用sysdate,显示系统当前时间
select sysdate from dual
2.3 简单的where语句
1.查询emp表中20号部门的员工信息
select * from emp where deptno = 20;
2.查询姓名是SMITH的员工,字符串使用' ',内容大小写敏感
select * from emp where ename = 'SMITH';
3.查询1980年12月17日入职的员工,注意oracle默认日期格式(DD-MON月-RR表示2位的年份)
select * from emp where hiredate = '17-12月-80'; -- 这里一定要这样写,不然会报错
4.查询工资大于1500的员工
select * from emp where sal > 1500;
5.查询工资不等于1500的员工【!=或<>】
select * from emp where sal <> 1500;
6.查询薪水在1300到1600之间的员工,包括1300和1600
select * from emp where (sal>=1300) and (sal<=1600);
或者
select * from emp where sal between 1300 and 1600;
7.查询薪水不在1300到1600之间的员工,不包括1300和1600
select * from emp where sal NOT between 1300 and 1600;
8.查询入职时间在"1981-2月-20"到"1982-1月-23"之间的员工
select * from emp where hiredate between '20-2月-81' and '23-1月-82';
注意:
1)对于数值型,小数值在前,大数值在后
2)对于日期型,年长值在前,年小值在后
9.查询20号或30号部门的员工
select * from emp where (deptno=20) or (deptno=30);
或
select * from emp where deptno in (30,20);
10.查询不是20号或30号部门的员工
select * from emp where deptno NOT in (30,20);
11.查询姓名以大写字母S开头的员工,使用%表示0个,1个或多个字符
select * from emp where ename like 'S%';
注意:
凡是精确查询用=符号
凡是不精确查询用like符号,我们通常叫模糊查询
12.查询姓名以大写字母N结束的员工
select * from emp where ename like '%N';
13.查询姓名第一个字母是T,最后一个字母是R的员工
select * from emp where ename like 'T%R';
14.查询姓名是4个字符的员工,且第二个字符是I,使用_只能表示1个字符,不能表示0个或多个字符
select * from emp where ename like '_I__';
15.插入一条姓名为'T_IM'的员工,编号是1111
insert into emp(empno,ename) values(1111,'T_IM');
16.查询员工姓名中含有'_'的员工,使用\转义符,让其后的字符回归本来意思【like '%\_%' escape '\'】
select * from emp where ename like '%\_%' escape '\';
17.插入一个姓名叫'的员工
insert into emp(empno,ename) values(2222,'''');
18.插入一个姓名叫''的员工
insert into emp(empno,ename) values(3333,'''''');
19.查询佣金为null的员工
select * from emp where comm is null
20.查询佣金为非null的员工
select * from emp where comm is not null;
21.查询无佣金且工资大于1500的员工
select *
from emp
where (comm is null) and (sal>1500);
22.查询工资是1500或3000或5000的员工
select *
from emp
where sal in (1500,3000,5000);
23.查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式一,使用!=或<>)
select *
from emp
where (job='MANAGER') or (job<>'ANALYST');
24.查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式二,使用not)
select *
from emp
where (job='MANAGER') or (not(job='ANALYST'));
2.4 order by子句
1.查询员工信息(编号,姓名,月薪,年薪),按月薪升序排序,默认升序,如果月薪相同,按oracle内置的校验规则排序
select empno,ename,sal,sal*12
from emp
order by sal asc;
2.查询员工信息(编号,姓名,月薪,年薪),按月薪降序排序
select empno,ename,sal,sal*12
from emp
order by sal desc;
3.查询员工信息,按入职日期降序排序,使用列名
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by hiredate desc;
4.order by后面可以跟列名、别名、表达式、列号(从1开始,在select子句中的列号)
列名:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by hiredate desc;别名:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by "年薪" desc;表达式:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by sal*12 desc;
5.查询员工信息,按佣金升序或降序排列,null值看成最大值
select * from emp order by comm desc;
6.查询员工信息,对有佣金的员工,按佣金降序排列,当order by 和 where 同时出现时,order by 在最后
select *
from emp
where comm is not null
order by comm desc;
7.查询员工信息,按工资降序排列,相同工资的员工再按入职时间降序排列
select *
from emp
order by sal desc,hiredate desc;
8.查询20号部门,且工资大于1500,按入职时间降序排列
select *
from emp
where (deptno=20) and (sal>1500)
order by hiredate desc;
2.5 单行函数:只有一个参数输入,只有一个结果输出(借助dual哑表)
1.测试lower/upper/initcap函数,使用dual哑表
select lower('www.BAIdu.COM') from dual; -- 将字符串转成小写
select upper('www.BAIdu.COM') from dual; -- 将字符串转成大写
select initcap('www.BAIdu.COM') from dual; -- 将字符串首字母大写
2.测试concat/substr函数,从1开始,表示字符,不论中英文
select concat('hello','你好') from dual; -- 字符串拼接
select 'hello' || '你好' || '世界' from dual; -- 字符串拼接
select substr('hello你好',5,3) from dual; --截取字符串,从第5个开始,截取三个长度的字符串
注意:5表示从第几个字符开始算,第一个字符为1,中英文统一处理
3.测试length /lengthb函数
select length('hello你好') from dual; --字符长度(中文算一个长度)
select lengthb('hello你好') from dual; --字节长度(中文算两个长度)
4.测试instr/lpad/rpad函数,从左向右找第一次出现的位置,从1开始
select instr('helloworld','o') from dual; #从左向右找第一次出现的位置,从1开始
-- 注意:找不到返回0且大小写敏感
select LPAD('hello',10,'#') from dual; -- 从左边填充字符串
select RPAD('hello',10,'#') from dual; -- 从右边填充字符串
5.测试trim/replace函数
select trim(‘ hello ‘) from dual; -- 去除空格
select replace('hello','l','L') from dual; -- 将hello中的小写l替换成大写L
6.测试round/trunc/mod函数作用于数值型
select round(3.1415,3) from dual; --四舍五入 保留3位小数
select trunc(3.1415,3) from dual;-- 截取保留3位小数
select mod(10,3) from dual; --取模
select floor(3.1415) from dual; -- 向下取整
select ceil(3.1415) from dual -- 向上取整
7.测试round trunc函数作用于日期类型
select round(sysdate,'month') from dual;-- 舍入到某月的1日
select round(sysdate,'year') from dual;-- 舍入到某年的1月1日
select trunc(sysdate,'month') from dual; -- 截取月(本月的第一天)
select trunc(sysdate,'year') from dual;--截取年(本年的第一天)
8.显示昨天,今天,明天的日期,日期类型 +- 数值 = 日期类型
select sysdate-1 "昨天",sysdate "今天",sysdate+1 "明天" from dual
9.以年和月形式显示员工近似工龄,日期-日期=数值,假设:一年以365天计算,一月以30天计算
select ename "姓名",round(sysdate-hiredate,0)/365 "年数" from emp;
10.使用months_between函数,精确计算到年底还有多少个月
select months_between(sysdate,'31-12月-18') from dual;
11.使用months_between函数,以精确月形式显示员工工龄
select ename "姓名",months_between(sysdate,hiredate) "精确月工龄" from emp;
12.测试add_months函数,下个月今天是多少号
select add_months(sysdate,1) from dual;
13.测试add_months函数,上个月今天是多少号
select add_months(sysdate,-1) from dual;
14.测试next_day函数,从今天开始算,下一个星期三是多少号
select next_day(sysdate,'星期三') from dual;
15.测试next_day函数,从今天开始算,下下一个星期三是多少号
select next_day(next_day(sysdate,'星期三'),'星期三') from dual;
16.测试next_day函数,从今天开始算,下一个星期三的下一个星期日是多少号
select next_day(next_day(sysdate,'星期三'),'星期日') from dual;
17.测试last_day函数,本月最后一天是多少号
select last_day(sysdate) from dual;
18.测试last_day函数,本月倒数第二天是多少号
select last_day(sysdate)-1 from dual;
19.测试last_day函数,下一个月最后一天是多少号
select last_day(add_months(sysdate,1)) from dual;
20.测试last_day函数,上一个月最后一天是多少号
select last_day(add_months(sysdate,-1)) from dual;
2.6 Oracle数据类型的转换
1.隐式转换
varchar2–>number
select * from emp where empno in('7369');
varchar2–>date
select * from emp where hiredate='23-1月-82';
number–>varchar2
select '123'+'123' from dual;
2.显示转换
使用to_char(日期,‘格"常量"式’)函数将日期转成字符串,显示如下格式:2018 - 09 月 - 2日 星期日
select to_char(sysdate,'yyyy "-" mm " - " dd " - " day') from dual;
使用to_char(日期,‘格式’)函数将日期转成字符串,显示如格式:2018 - 09 月 - 2日 星期日15:15:15
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
使用to_char(数值,‘格式’)函数将数值转成字符串,显示如下格式:$1,234
select to_char(1234,'$9,999') from dual;
select to_char(1234,'L9,999') from dual;
使用to_date(‘字符串’,‘格式’)函数,查询1980年12月17日入职的员工(方式二:日期显式转换)
select * from emp where hiredate = to_date('1980年12月17日','yyyy"年"mm"月"dd"日"');
或
select * from emp where hiredate = to_date('1980#12#17','yyyy"#"mm"#"dd');
或
select * from emp where hiredate = to_date('1980-12-17','yyyy-mm-dd');
使用to_number(‘字符串’)函数将字符串‘123’转成数字123
select to_number('123') from dual;
Oracle数据库学习的第二天(Oracle的简单操作)相关推荐
- Oracle数据库学习(一)安装和简单使用
新公司的新项目,需要用到Oracle数据库,所以现在便来解除此数据库,不得不说,这个数据库还这是麻烦. 安装倒是简单,就是中间会遇到各种问题. 安装步骤参考:https://blog.csdn.net ...
- Oracle数据库学习(一)-----Oracle体系结构
Oracle体系结构包括:内存结构.进程结构.物理结构三部分. 一.Oracle物理存储结构 Oracle数据库的文件类别(4类) ①数据文件(data files):文件扩展名为".DBF ...
- Oracle数据库及在DOS命令下面的简单操作
在Oracle数据库注释用--表明为注释,但以下用//或--代表解释;数据库不怎么区分大小写: 先说说一些简单Oracle数据库操作的语句: 使用语句创建普通用户: Create user usern ...
- oracle数据库系统学习,Oracle数据库学习第二天
1.伪表,伪列 1.1.伪表dual 概念: 就是一个不真实存在的虚拟表.伪表的作用就是用来构造一个符合sql规则的select语句.简单来说,伪表就是为让select语句不出现错误. 应用场景 用来 ...
- Oracle数据库学习:PL/SQL(详解)
Oracle数据库学习:PL/SQL 什么是PL/SQL PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的扩展语言; 使用PL/SQL 可以编写具 ...
- oracle数据库学习小记一
oracle数据库学习小记 数据库函数 一.日常函数 二.数学函数 三.聚合函数(常用于group by从句的select查询中) 四.字符串函数 五.日期和时间函数 六.加密函数 七.控制流函数 八 ...
- oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限
查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...
- oracle修改分区表的默认空间,Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间?...
Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间? 现象一描述: 在oracle12c下创建一个分区表T_A_TRADING,新建一个分区P1,P1里没有任 ...
- Oracle 数据库学习
目录 Oracle 数据库学习 1. Oracle数据库 1.1 简介 1.2权限分类: 2. 用户管理 2.1用户操作 2.2表操作 2.3关闭数据库 2.4其他操作 3. Oracle 重要文件 ...
最新文章
- mysql备份策略的制定
- 【ES6】字符串的拓展
- python之路---25 模块和包
- 更安全的堡垒机登录方法
- 金融贷款逾期的模型构建2——集成模型
- 如何用Transformer来做目标检测?一文简述DERT及其变体
- ROS初学笔记 - C++11与PCL库冲突问题
- KlayGE的Virtual Texturing技术定名
- Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档
- 交换机分布缓存_网络核心交换机和普通交换机有什么区别?
- c++ 圆上任意点坐标计算_已知圆弧的一些信息,求得圆弧上中间点的坐标的方法(C++语言描述)...
- php-mysql rpm_Linux下的mysql apache php rpm安装方法步骤(转载并补充细节)
- 不正确的c语言字符常量是,哪个是不正确的字符常量?
- U盘大容量存储设备 感叹号,错误10
- asic面试题目 英伟达_英伟达笔试题目ASIC|英伟达笔试题
- java邮件数据库_javamail-demo(完整源码+数据库)
- CSDN日报20170217——《辞职信:写给我的“藤野先生”》
- 视频转换成gif动图如何操作?教你三步完成视频转gif
- 电脑经常出现程序未响应
- 线程池在美团的最佳实践
热门文章
- java程序设计基础实验_JAVA程序设计基础实验1.doc
- 自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》
- 数字存储示波器基本工作原理与使用方法
- 如何在分割视频的基础上,分离视频中的音频
- DRAM 内存介绍(一)
- Chrome自动更新到78.0.3904.70后出现“Aw, Snap!”错误,所有页面不能打开。
- 互联网产品经理职业规划图(转载)
- 手机连接Linux教程,手机密钥连接linux主机
- his使用-重置密码
- 一基一石,代餐的成长与内卷