一、简介

数据库:Oracle数据库的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库,可以看做Oracle就是一个大的数据库。
实例:一个Oracle实例有一系列的后台进程和内存结构组成,一个数据库可以有n个实例。
用户:用户是在实例下面创建的。不同的实例可以创建相同名字的用户。
表空间:表空间是Oracle对物理数据库上相关数据文件的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空间)。每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫做数据文件。一个数据文件只能属于一个表空间。
数据文件:数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或者多个数据文件组成,一个数据文件只能属于一个表空间,一旦数据文件被加入到某个表空间之后,就不能删除这个数据文件,如果要删除某个数据文件,只能删除其所属表空间才行。
由于Oracle的数据库不是普通的概念,Oracle是由用户和表空间对数据进行管理和存放的。但是表不是由表空间去操作的,而是由用户去查询的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了。

二、demo

数据库表结构

  1. create table emp(
  2. empno number(4),
  3. ename varchar2(10),
  4. job varchar2(9),
  5. mgr number(4),
  6. hiredate date,
  7. sal number(7,2),
  8. comm number(7,2),
  9. deptno number(2)
  10. );
  11. select * from emp;
  12. create sequence s_emp;
  13. insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (s_emp.nextval,'莫逸风','开发',0,sysdate,3000,300,1);
  14. insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (s_emp.nextval,'莫逸风2','开发1',0,sysdate,1000,300,2);
  15. insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (s_emp.nextval,'莫逸风3','开发',0,sysdate,2000,300,1);
  16. insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (s_emp.nextval,'莫逸风4','开发1',0,sysdate,3000,300,2);
  17. insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (s_emp.nextval,'莫逸风5','开发',0,sysdate,4000,300,1);
  18. create table dept(
  19. deptno number(2),
  20. dname varchar2(14),
  21. loc varchar2(13)
  22. );
  23. select * from dept;
  24. insert into dept (deptno,dname,loc) values (1,'开发','开发A区');
  25. insert into dept (deptno,dname,loc) values (2,'开发1','开发B区');
  26. create table salgrade(
  27. grade number,
  28. losal number,
  29. hisal number
  30. );
  31. select * from salgrade;
  32. create table bonus(
  33. ename varchar2(10),
  34. job varchar2(9),
  35. sal number,
  36. comm number
  37. );
  38. select * from bonus;
  39. insert into bonus (ename,job,sal,comm) values ('莫逸风','开发',3000,300);
  40. insert into bonus (ename,job,sal,comm) values ('莫逸风2','开发1',1000,300);
  41. insert into bonus (ename,job,sal,comm) values ('莫逸风3','开发',2000,300);

Demo

  1. --创建表空间moyifeng指定文件存储位置‘D:...’指定文件大小100m,指定文件自增10m
  2. create tablespace moyifeng
  3. datafile 'D:\Project\OracleData\moyifeng.dbf'
  4. size 100m
  5. autoextend on
  6. next 10m;
  7. --删除表空间,drop后需要找到文件然后删除
  8. drop tablespace moyifeng;
  9. --创建用户,指定密码,指定表空间
  10. create user moyifeng
  11. identified by root
  12. default tablespace moyifeng;
  13. --给用户授权
  14. --Oracle数据库中常用角色
  15. connect--链接角色,基本角色
  16. resource--开发者角色
  17. dba--超级管理员角色
  18. --给moyifeng授予dba角色
  19. grant dba to moyifeng;
  20. --切换到moyifeng用户下Session log off log in
  21. --Oracle数据类型
  22. Varchar,varchar2--表示一个字符串,常用的是varchar2,可变字符自动缩减内存空间,不会增加
  23. NUMBER--NUMBER(n)表示一个整数,长度是n
  24. --NUMBER(m,n):表示一个小数,总长度是m,小数是n,整数是m-n
  25. DATA--表示日期类型,相当于mysql中的datatime
  26. CLOB--大对象,表示大文本数据类型,可存4G(应用场景文字)
  27. BLOB--大对象,表示二进制数据,可存4G(应用场景视频)
  28. --创建一个person
  29. create table person(
  30. pid number(20),
  31. pname varchar2(10)
  32. );
  33. select * from person;
  34. --添加一条记录(增删改都需要提交)
  35. insert into person (pid, pname) values (1,'小明');
  36. commit;
  37. --修改一条记录
  38. update person set pname='小马' where pid = 1;
  39. commit;
  40. --删除一条数据
  41. delete person where pid = 1;
  42. commit;
  43. --删除表中全部记录
  44. delete from person;
  45. --删除表结构
  46. drop table person;
  47. --先删除表,再创建表。效果等同于删除表中全部数据
  48. --再数据量大的情况下,尤其在表中带有索引的情况下,该操作效率高。
  49. --索引可以提高查询效率,但是会影响增删改效率
  50. truncate table person;
  51. --序列:不属于任何一张表,但可以逻辑和表做绑定。
  52. --序列:默认从1开始,依次递增,主要用来给主键赋值使用。
  53. --dual:虚标,只是为了补全语法,没有任何意义(Oracle中查询必须有from)
  54. create sequence s_person;
  55. select s_person.nextval from dual;--下一个
  56. select s_person.currval from dual;--自己
  57. insert into person (pid, pname) values (s_person.nextval,'小明');
  58. commit;
  59. select * from person;
  60. --单行函数:作用于一行,返回一个值
  61. --字符函数
  62. select upper('yes') from dual;
  63. select lower('YES') from dual;
  64. --数值函数
  65. select round(26.18) from dual;--四舍五入 26
  66. select round(26.18,1) from dual;--四舍五入 26.1
  67. select round(26.18,-1) from dual;--四舍五入 30
  68. select trunc(26.18) from dual;--直接截取
  69. select trunc(26.18,1) from dual;--直接截取
  70. select trunc(26.18,-1) from dual;--直接截取
  71. select mod(10,3) from dual;--求余
  72. --日期函数
  73. --查出emp表中所有员工入职时间距离现在几天
  74. select sysdate-e.hiredate from emp e;
  75. --算出明天此刻时间
  76. select sysdate+1 from dual;
  77. --查出emp表中所有员工入职时间距离现在几月
  78. select months_between(sysdate,e.hiredate) from emp e;
  79. --查出emp表中所有员工入职时间距离现在几年
  80. select months_between(sysdate,e.hiredate)/12 from equip e;
  81. --查出emp表中所有员工入职时间距离现在几周
  82. select (sysdate-e.hiredate)/7 from emp e;
  83. --转换函数
  84. --日期转字符串
  85. select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
  86. select to_char(sysdate,'fm yyyy-mm-dd hh:mi:ss') from dual;--去掉7月前面的0
  87. select to_char(sysdate,'fm yyyy-mm-dd hh24:mi:ss') from dual;--24小时计数法
  88. --字符串转日期
  89. select to_date('2020-7-9 23:9:52','fm yyyy-mm-dd hh24:mi:ss') from dual;--24小时计数法
  90. --通用函数
  91. --算出emp表中所有员工的年薪
  92. --奖金里面有null值,如果null值和任意数字做算术运算,结果都是null
  93. select e.sal*12+nvl(e.comm, 0) from emp e;--nvl如果e.commnull则使用0做计算如果不是null则使用原值
  94. --条件表达式(通用写法,mysqlOracle通用)
  95. --给emp表中员工起中文表
  96. select e.ename,
  97. case e.ename
  98. when 'a' then '莫'
  99. when 'b' then '逸'
  100. when 'c' then '风'
  101. else '哈哈'
  102. end
  103. from emp e;
  104. --判断emp表中员工工资,如果高于3000显示高收入,如果高于1500低于3000显示中等收入,如果低于1500显示低收入
  105. select e.sal,
  106. case
  107. when e.sal>3000 then '高收入'
  108. when e.sal>1500 then '中等收入'
  109. else '低收入'
  110. end
  111. from emp e;
  112. --Oracle中除了起别名,都用单引号。
  113. --Oracle专用表达式
  114. select e.ename,
  115. decode(e.name,
  116. 'a','莫',
  117. 'b','逸',
  118. 'c','风',
  119. '无名')
  120. from emp e;
  121. --多行函数【聚合函数】:作用于多行,返回一个值
  122. select count(1) from emp;--查询总数量
  123. select sum(sal) from emp;--工资总和
  124. select max(sal) from emp;--最大工资
  125. select min(sal) from emp;--最小工资
  126. select avg(sal) from emp;--平均工资
  127. --分组查询
  128. --查询出每个部门的平均工资
  129. --分组查询中,出现在group by后面的原始列,才能出现在select后面
  130. --没有出现在group by后面的列,想在select后面出现,必须接上聚合函数。
  131. --聚合函数有一个特性,可以吧多行记录变成一个值。
  132. select e.depyno,avg(e.sal)
  133. from emp e
  134. group by e.depyno
  135. --查询平均工资高于2000的部门信息
  136. select e.deptno,avg(e.sal) asal
  137. from emp e
  138. group by e.deptno
  139. having avg(e,sal)>2000
  140. --所有条件都不能使用别名来判断。
  141. --比如下面的条件语句也不能使用别名当条件。因为where的执行顺序优于查询
  142. select ename,sal s from emp where sal>1500;
  143. --查询出每个部门工资高于800的员工的平均工资
  144. select e.deptno
  145. from emp e
  146. where e.sal>800
  147. group by e.deptno;
  148. --where是过滤分组前的数据,having是过滤分组后的数据。
  149. --表现形式:where必须在group by之前,having是在group by之后。
  150. --查询出每个部门工资高于800的员工的平均工资
  151. --然后查询出平均工资高于2000的部门信息
  152. select e.deptno,avg(e.sal)
  153. from emp e
  154. where e.sal>800
  155. group by e.deptno
  156. having avg(e.sal)>2000
  157. --多表查询中的一些概念
  158. --笛卡尔积
  159. select *
  160. from emp e,dept d;--e8条数据,d5条数据查询结构40条数据
  161. --等值连接
  162. select *
  163. from emp e,dept d
  164. where e.deptno=d.deptno;
  165. --内连接
  166. select *
  167. from emp e inner join dept d
  168. on e.deptno=d.deptno;
  169. --查询出所有部门以及该部门下的员工信息【外连接】
  170. --右外连接会将右侧所有信息展示出来
  171. select *
  172. from emp e right join dept d
  173. on e.deptno=d.deptno
  174. --查询所有员工信息,以及员工所属部门
  175. select *
  176. from emp e left join dept d
  177. where e.deptno=d.deptno;
  178. --oracle专用外连接
  179. select *
  180. from emp e,dept d
  181. where e.deptno(+)=d.deptno;--等同右外连接
  182. select *
  183. from emp e,dept d
  184. where e.deptno=d.deptno(+);--等同左外连接
  185. --查询比4018号雇员工资高的雇员信息
  186. select *
  187. from emp e
  188. where e.sal > (select sal from emp where emp.deptno=4108)
  189. --查询比4018号雇员工资高同事和4018号雇员工作一样的员工
  190. select * from emp e1
  191. where e1.sal > (select e2.sal from emp e2 where e2.deptno=4108)
  192. and e1.job = (select e3.job from emp e3 where e3.deptno=4108)
  193. --查询每个部门的最低工资和最低工资的雇员和部门名称
  194. select d.dname,a.minsal,e.ename
  195. from dept d,
  196. (select deptno,min(sal) minsal from emp group by deptno) a,
  197. emp e
  198. where d.deptno=a.deptno
  199. and e.sal = a.minsal
  200. --Oracle中的分页
  201. --rownum行号:当我们做select操作的时候,
  202. --每查询出一行,就会在该行上加上一个行号,
  203. --行号从1开始,依次递增,不能跳着走。
  204. --排序操作会影响rownum的顺序
  205. select rownum,e.* from emp e order by e.sal desc
  206. --如果涉及到排序,但是还要使用rownum的话,我们可以嵌套查询
  207. select rownum,t.* from (
  208. select e.* from emp e order by e.sal desc
  209. ) t;
  210. --emp表工资倒序排列后每页2条记录查询第二页
  211. select tt.* from
  212. (select rownum a,t.* from (
  213. select e.* from emp e order by e.sal desc
  214. ) t where rownum<5
  215. ) tt
  216. where a>2;
  217. --查询服务器字符集
  218. select userenv('language') from dual;

Oracle基本用法(一)的更多相关文章

  1. ORACLE RETURNING 用法总结

    ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...

  2. Oracle instr用法

    1:实现indexOf功能,.从第1个字符开始,搜索第1次出现子串的位置 ,) as i from dual; select instr('oracle','or') as i from dual; ...

  3. Oracle minus用法详解及应用实例

    本文转载:https://blog.csdn.net/jhon_03/article/details/78321937 Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Or ...

  4. Oracle触发器用法实例详解

    转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...

  5. ORACLE SEQUENCE用法(转)

    ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence     首先要有CREATE ...

  6. [转载]Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也 ...

  7. Oracle数据库用法汇总

    一些Oracle数据库用法的小总结 1.使用insert into创建新表 insert into destdb.sub_contract (userid,contractid) select msi ...

  8. oracle sqlloader 用法

    向oracle中导入*.csv文件   1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通 ...

  9. Oracle Hint 用法

    正确的语法是: select /*+ index(x idx_t) */ * from t x where x.object_id=123 /*+    */ 和注释很像,比注释多了一个“+”,这就是 ...

  10. Oracle REGEXP_INSTR 用法

    原文出处 ORACLE中的支持正则表达式的函数主要有下面四个:    1,REGEXP_LIKE :与LIKE的功能相似    2,REGEXP_INSTR :与INSTR的功能相似    3,REG ...

随机推荐

  1. 00JAVA语法基础 原码、反码、补码

    记得之前学C语言的时候老师课上讲过一些,不过当时觉得考试不考,也就上课听了下,下课也没怎么多做了解.这次,Java课上再次提出来了,自己也超越了些资料,对这三种概念算是有所初步了解. 1.原码 数据储 ...

  2. 如何在 PyCharm 中设置 Python 代码模板

    #!/usr/bin/env python # -*- coding: utf-8 -*- # Created by iFantastic on $DATE if __name__ == '__mai ...

  3. PHP如何接收json数据

    以前一直在写一些网站,很少涉及到接口的东西.最近公司在做一个平台,需要往接口上发送json数据.闲话少叙,直接上干货. 在php中可以通过如下方式获取: file_get_contents(" ...

  4. Python输出格式化

    参考链接:https://m.jb51.net/article/33631.htm 要求:以固定长度在中间输出某字符串,剩余部分用其他符号补齐.如:"Hello World"  - ...

  5. memcache(11211)未授权访问

    1.安装Memcache服务端 sudo apt-get install memcached 2.启动服务 sudo memcached -d -m 128 -p 11211 -u root 3.ap ...

  6. Jmeter分布式压测实战及踩坑处理(含参数化)

    项目中使用Jmeter进行大并发压测时,单机受限内存.CPU.网络IO,会出现服务器压力还没有上 去,但压测服务器由于模拟的压力太大死机的情况.JMeter的集群模式可以让我们将多台机器联合起来 一起 ...

  7. MySQL的函数使用

    目录 COUNT()函数基本使用 SUM( )函数基本使用 AVG()函数基本使用 MAX()函数基本使用 MIN()函数基本使用 字符函数 concat()和concat_ws() LEFT()与R ...

  8. 【UGUI源码分析】Unity遮罩之Mask详细解读

    遮罩,顾名思义是一种可以掩盖其它元素的控件.常用于修改其它元素的外观,或限制元素的形状.比如ScrollView或者圆头像效果都有用到遮罩功能.本系列文章希望通过阅读UGUI源码的方式,来探究遮罩的实 ...

  9. Git8.3k星,十万字Android主流开源框架源码解析,必须盘

    为什么读源码 很多人一定和我一样的感受:源码在工作中有用吗?用处大吗?很长一段时间内我也有这样的疑问,认为哪些有事没事扯源码的人就是在装,只是为了提高他们的逼格而已. 那为什么我还要读源码呢?一刚开始 ...

  10. SpringBoot报错:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

    Spring Boot报错:Error starting ApplicationContext. To display the conditions report re-run your applic ...