一、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的简单操作)相关推荐

  1. Oracle数据库学习(一)安装和简单使用

    新公司的新项目,需要用到Oracle数据库,所以现在便来解除此数据库,不得不说,这个数据库还这是麻烦. 安装倒是简单,就是中间会遇到各种问题. 安装步骤参考:https://blog.csdn.net ...

  2. Oracle数据库学习(一)-----Oracle体系结构

    Oracle体系结构包括:内存结构.进程结构.物理结构三部分. 一.Oracle物理存储结构 Oracle数据库的文件类别(4类) ①数据文件(data files):文件扩展名为".DBF ...

  3. Oracle数据库及在DOS命令下面的简单操作

    在Oracle数据库注释用--表明为注释,但以下用//或--代表解释;数据库不怎么区分大小写: 先说说一些简单Oracle数据库操作的语句: 使用语句创建普通用户: Create user usern ...

  4. oracle数据库系统学习,Oracle数据库学习第二天

    1.伪表,伪列 1.1.伪表dual 概念: 就是一个不真实存在的虚拟表.伪表的作用就是用来构造一个符合sql规则的select语句.简单来说,伪表就是为让select语句不出现错误. 应用场景 用来 ...

  5. Oracle数据库学习:PL/SQL(详解)

    Oracle数据库学习:PL/SQL 什么是PL/SQL PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的扩展语言; 使用PL/SQL 可以编写具 ...

  6. oracle数据库学习小记一

    oracle数据库学习小记 数据库函数 一.日常函数 二.数学函数 三.聚合函数(常用于group by从句的select查询中) 四.字符串函数 五.日期和时间函数 六.加密函数 七.控制流函数 八 ...

  7. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限

    查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...

  8. oracle修改分区表的默认空间,Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间?...

    Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间? 现象一描述: 在oracle12c下创建一个分区表T_A_TRADING,新建一个分区P1,P1里没有任 ...

  9. Oracle 数据库学习

    目录 Oracle 数据库学习 1. Oracle数据库 1.1 简介 1.2权限分类: 2. 用户管理 2.1用户操作 2.2表操作 2.3关闭数据库 2.4其他操作 3. Oracle 重要文件 ...

最新文章

  1. mysql备份策略的制定
  2. 【ES6】字符串的拓展
  3. python之路---25 模块和包
  4. 更安全的堡垒机登录方法
  5. 金融贷款逾期的模型构建2——集成模型
  6. 如何用Transformer来做目标检测?一文简述DERT及其变体
  7. ROS初学笔记 - C++11与PCL库冲突问题
  8. KlayGE的Virtual Texturing技术定名
  9. Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档
  10. 交换机分布缓存_网络核心交换机和普通交换机有什么区别?
  11. c++ 圆上任意点坐标计算_已知圆弧的一些信息,求得圆弧上中间点的坐标的方法(C++语言描述)...
  12. php-mysql rpm_Linux下的mysql apache php rpm安装方法步骤(转载并补充细节)
  13. 不正确的c语言字符常量是,哪个是不正确的字符常量?
  14. U盘大容量存储设备 感叹号,错误10
  15. asic面试题目 英伟达_英伟达笔试题目ASIC|英伟达笔试题
  16. java邮件数据库_javamail-demo(完整源码+数据库)
  17. CSDN日报20170217——《辞职信:写给我的“藤野先生”》
  18. 视频转换成gif动图如何操作?教你三步完成视频转gif
  19. 电脑经常出现程序未响应
  20. 线程池在美团的最佳实践

热门文章

  1. java程序设计基础实验_JAVA程序设计基础实验1.doc
  2. 自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》
  3. 数字存储示波器基本工作原理与使用方法
  4. 如何在分割视频的基础上,分离视频中的音频
  5. DRAM 内存介绍(一)
  6. Chrome自动更新到78.0.3904.70后出现“Aw, Snap!”错误,所有页面不能打开。
  7. 互联网产品经理职业规划图(转载)
  8. 手机连接Linux教程,手机密钥连接linux主机
  9. his使用-重置密码
  10. 一基一石,代餐的成长与内卷