目录

  • ORACLE
    • 1. 概念
    • 2. 数据库范式
      • 2.1 概念
      • 2.2 总结
    • 3. Oracle数据库及PL/SQL安装
    • 4. oracle语句
      • 4.1 前置环境
      • 4.2 简单查询 SELECT
        • 4.2.1 语法
        • 4.2.2 示例
        • 4.2.3 算数运算
          • 4.2.3(1) 语法
          • 4.2.3(2) 示例
        • 4.2.4 列别名
          • 4.2.4(1) 语法
          • 4.2.4(2) 示例
        • 4.2.5 连接符 ||
          • 4.2.5(1) 语法
          • 4.2.5(2) 示例
        • 4.2.6 去除重复记录distinct
          • 4.2.6(1) 语法
          • 4.2.6(2) 示例
      • 4.3 where 子句
        • 4.3.1 语法
        • 4.3.2 比较运算符
          • 4.3.2(1) 示例
        • 4.3.3 通配符 LIKE
          • 4.3.4(1) 示例
        • 4.3.4 逻辑运算符
          • 4.3.4(1) 示例
      • 4.4 排序 ORDER BY
        • 4.4.1 语法
        • 4.4.2 示例
      • 4.5 SQL语句执行顺序
      • 4.6 单组函数
        • 4.6.1 字符函数
        • 4.6.2 数字函数
        • 4.6.3 日期函数
          • to_date()
          • to_char()
        • 4.6.4 分组函数(聚合函数、多行函数)
        • 4.6.5 分组 group by 子句
          • 4.6.5(1) 语法
          • 4.6.5(2) 示例
        • 4.6.6 过滤筛选 having 子句
          • 4.6.6(1) 语法
          • 4.6.6(2) 示例

ORACLE

1. 概念

1、Oracle是⼀个关系型(表)数据库,Oracle(甲⻣⽂公司)也是⼀个公司的名称

2、Oracle数据库的市场份额是最多的,Mysql数据库也是甲⻣⽂公司的

3、Oracle数据库价格昂贵,主要在电信、银⾏、证券、国企领域使⽤,Mysql主要是⼩公司、 互联⽹⾏业应⽤⽐较多

4、数据(data):数字、⽂字、图形、视频等

5、数据库(database):管理数据的仓库

6、数据库管理系统(DBMS):Oracle、Mysql

7、属性–字段–列

8、元组–记录–⾏

9、域-值域:属性的取值范围

10、主键:能够唯⼀的标识⼀条记录的属性或属性组(联合主键)

11:外键:在A表中不是主键,但是在B表中是主键,这⼀列就叫做A表的外键

12:Oracle版本:Oracle 9i–Internet、Oracle 10g–grid、Oracle 11g、Oracle 12c–cloud

13、Oracle默认端⼝是1521

14、表空间(TABLESPACE):存储表的⽂件,相当于Mysql⼀个数据库

2. 数据库范式

2.1 概念

数据库创建和存在是满⾜⼀定程度的规则的。⽽这些规则,我们称为范式。

  1. 第⼀范式(1NF):每⼀列都是不可再分的(即所有字段值都是不可分解的)
  2. 第⼆范式(2NF):确保数据库表中的每⼀列都和主键相关,⽽不能只与主键的某⼀部分相关 (主要针对联合主键⽽⾔)
  3. 第三范式(3NF):两个表之间除了可以使⽤主键当做关联字段外,不能有重叠部分(即表中不能包含在其它表中已包含的⾮主关键字信息),否则就会造成数据冗余)

2.2 总结

  • 第一范式和第二范式是针对单个数据表的结构提出基本要求,范式是针对表与表之间的关系的
  • 随着范式等级的提高,数据表属性之间的依赖关系越来越小,数据冗余越来越低,但数据关系也会越来越复杂
  • 范式具有包含关系,一个数据库的设计如果满足第二范式,则一定符合第一范式,如果符合第三范式,则也一定符合第二范式

3. Oracle数据库及PL/SQL安装

参考:https://blog.csdn.net/weixin_56214452/article/details/116232978

4. oracle语句

4.1 前置环境

假设数据库中有以下三种类型的表

  • 第一列Name:表示数据库中表的每一列的名称
  • 第二列Type:表示该列的取值范围
    • 常用类型:
    • varchar2(n):可变字符串,最长为n位
    • number[(n)]:数字,最长为n位
    • date:日期
  • 第三列Nullable:表示该列中的数据能否为空
  • 第四列Default:表示是否有默认值
  • 第五列Comments:表示该列是否有注释
  • emp表
Name Type Nullable Default Comments
EMPNO NUMBER(4) 工号
ENAME VARCHAR2(10) Y 姓名
JOB VARCHAR2(9) Y 职位
MGR NUMBER(4) Y 经理的工号
HIREDATE DATE Y 入职时间
SAL NUMBER(7,2) Y 工资
COMM NUMBER(7,2) Y 奖金
DEPTNO NUMBER(2) Y 部门号
  • dept表
Name Type Nullable Default Comments
DEPTNO NUMBER(2) 部门号
DNAME VARCHAR2(14) Y 部门名
LOC VARCHAR2(13) Y 地址
  • salgrade表
Name Type Nullable Default Comments
GRADE NUMBER Y 级别
LOSAL NUMBER Y 最低工资
HISAL NUMBER Y 最高工资

4.2 简单查询 SELECT

  • SQL查询注意事项

    • SQL关键字及列名、表名不区分⼤小写
    • SQL语句可以换⾏,但是关键字不能换⾏
    • SQL语句以分号结尾

4.2.1 语法

select 列名,列名,...|* from 表名
|:或者

4.2.2 示例

-- 简单查询
-- 查询指定的列
-- 查询员工姓名
select ename from emp;
-- 查询员工姓名、工资、部门号
select ename,sal,deptno from emp;
-- 查询员工全部信息
-- 星号表示查询所有列
select * from emp;
--:表示注释

4.2.3 算数运算

  • 包含空值null的算数运算结果也为空

  • 简单查询可以对某些列(NUMBER类型、DATE型)进行算术运算

4.2.3(1) 语法
select 列名(+—*/)数值 from 表名
4.2.3(2) 示例
-- 查询员工姓名、工资及工资加500后情况
select ename,sal,sal+500 from emp;
-- 查询员工姓名及年薪(不算奖金)
select ename,sal*12 from emp;
-- 获取当前时间函数 sysdate
select sysdate from dual;
-- 查询员工姓名及工作年限(当前时间-入职时间)/365
select ename,(sysdate-hiredate)/365 from emp;
-- 空值(null)是指不可用,不知道,不适用的值
-- 空值不等于零或空格
-- 查询员工姓名及年薪(包含奖金)
-- 包括空值的算法表达式等于空
select ename,sal*12+comm from emp;

dual表(虚表)

  • oracle中dual表是一个单行单列的表,任何用户可读取
  • dual表真实存在,但不是用来存取主题数据的
  • dual表只有一行一列,只有一条数据
  • dual表支持增删改查,也可以drop,但不要drop,会报错,导致数据库不能使用

4.2.4 列别名

  • 给列取名,别名中有特殊符号或者空格,需要加双引号
4.2.4(1) 语法
select 列名 [as] 别名1, 列名(+—*/)数值 别名2,... from 表名
4.2.4(2) 示例
-- 使用as关键字 格式: 列名(表达式)as 别名
select ename as 姓名,sal*12 as 年薪 from emp;
-- as 可以省略不写 格式: 列名(表达式) 别名
select ename 姓名,sal*12 年薪 from emp;
-- 当别名中有特殊符号如空格,或者想区分大小写,需要将别名放在双引号中
select ename 姓名,sal*12 "年 薪" from emp;
select ename,sal*12 "totalsal" from emp;

4.2.5 连接符 ||

4.2.5(1) 语法
select 列名 || '可添加内容' || 列名 from 表名
4.2.5(2) 示例
select ename || ' is a '||job from emp;

4.2.6 去除重复记录distinct

4.2.6(1) 语法
select distinct 列名 from 表名;
4.2.6(2) 示例
-- 从员工表中查询部门号
select deptno from emp;
-- 去除重复的部门号
select distinct deptno from emp;

4.3 where 子句

4.3.1 语法

-- where后面的条件 将所有使得条件为true的记录查询出来
-- 如果条件永远为true,会将表中所有的记录全部查询出来
SELECT [DISTINCT] {*, column [alias], ...}
FROM table [WHERE condition(s)]

4.3.2 比较运算符

>:大于
≥:大于等于
<:小于
≤:小于等于
=:等于
<>或!=:不等于
between A and B:在两者之间,大于等于A并且小于等于B
in(list):in(A,B,C...):等于A或者等于B或者等于C...
is null:查询空值
is not null:查询内容不含空值
4.3.2(1) 示例
-- 查询部门号10的员工信息
select * from emp where deptno = 10;
-- 查询工资大于1500的员工信息
select * from emp where sal > 1500;
-- 查询工资小于3000的员工信息
select * from emp where sal <3000;
-- 查询工资大于等于1500的员工信息
select * from emp where sal >= 1500;
-- 查询工资小于等于3000的员工信息
select * from emp where sal <= 3000;
-- 查询部门号不是10的员工信息
select * from emp where deptno <> 10;
select * from emp where deptno != 10;
-- 查询工资在1500和3000之间的员工信息
select * from emp where sal between 1500 and 3000;
-- 查询工资为1500或3000的员工信息
select * from emp where sal in (1500,3000);
-- 查询部门10和部门20的员工信息
select * from emp where deptno in (10,20);
-- 查询奖金为空的员工信息
select * from emp where comm is null;
-- 查询奖金不为空的员工信息
select * from emp where comm is not null;

4.3.3 通配符 LIKE

%:表示0个或多个字符,例如张% 可以标识以张开头的所有人
_:表示1个字符,例如张_代表姓张的且姓名一共只有两个字的
\:转义符,%可以标识任意字符,\%这样就可以表示%本身
4.3.4(1) 示例
-- 查询姓名以S开头的员工
select * from emp where ename like 'S%';
-- 查询姓名第二个字符是A的员工
select * from emp where ename like '_A%';
-- 查询名字最后1个字是%的学生
select * from student where sname like '%\%' escape '\';

4.3.4 逻辑运算符

  • AND:多个条件都要同时满足
  • OR:只要满足其中1个条件
  • NOT:对条件取反
  • 优先级: not>and>or,使用括号可以提升优先级
4.3.4(1) 示例
-- 查询部门10中工资大于1500的员工信息
select * from emp where deptno=10 and sal>1500;
-- 查询工资在1500和3000之间且职位是SALESMAN的员工
select * from emp where sal between 1500 and 3000 and job = 'SALESMAN';
-- 查询部门10的员工信息或者工资大于1500的员工信息
select * from emp where deptno=10 or sal>1500;
-- 查询部门10和20的员工信息
select * from emp where deptno in (10,20);
select * from emp where deptno =10 or deptno =20;
-- 查询不是部门10和20的员工信息
select * from emp where deptno not in (10,20);
-- 查询emp表,显示奖金为空并且部门号为20或30的雇员信息
select * from emp where comm is null and deptno in (20,30);
select * from emp where comm is null and (deptno =20 or deptno=30);

4.4 排序 ORDER BY

使⽤ORDER BY ⼦句将记录排序

  • ASC:升序,默认,可省略
  • DESC:降序

4.4.1 语法

select * from 表名 order by 列名 [asc]|desc[,列名 asc|desc..];

4.4.2 示例

-- 查询部门30的员工信息,按照工资降序排
select * from emp where deptno =30 order by sal desc;
-- 查询部门20的员工信息,按照工资升序排
select * from emp where deptno =20 order by sal asc;
select * from emp where deptno =20 order by sal;
--多列排序
--查询员工信息,按照部门号升序,工资降序排
select * from emp order by deptno asc,sal desc;
--使用列别名排序
--查询姓名和年薪,按照别名年薪降序排
select ename,sal*12 年薪 from emp order by 年薪 desc;
--错误的,where执行的时候年薪还没有定义
select ename,sal*12 年薪 from emp where 年薪>30000;
--正确的
select ename,sal*12 年薪 from emp where sal*12>30000;

4.5 SQL语句执行顺序

1.from子句

2.where子句

3.group by子句

4.having子句

5.select子句

6.order by子句

4.6 单组函数

4.6.1 字符函数

-- UPPER('x') 将x中字符转换为大写
select upper('abcd') from dual;
-- 查询名字为SMITH的员工信息
select * from emp where ename = upper('smith');
-- lower('x'),将x中字符转换为小写
select lower('ABCD') from dual;
-- 查询名字为SMITH的员工信息
select * from emp where lower(ename) = 'smith';
select ename,lower(ename) from emp;
-- length('x') 返回字符串个数
select length('abcdef') from dual;
-- 查询姓名是5个字符员工
select * from emp where length(ename) =5
-- nvl(x,value) 如果x为null,返回value,否则返回x
-- nvl()函数中x和value的数据类型必须匹配
select nvl(1,100) from dual;
-- 查询员工姓名,年薪(包含奖金)
select ename,sal*12+nvl(comm,0) from emp;
-- substr(x,start,length) 截取字符串,从start开始,截取length个
select substr('abcdefgh',3,4) from dual;
-- replace(x,old,new) 将x中的old替换成new
select replace('123test456test','test','oracle') from dual;

4.6.2 数字函数

  • ROUND(x,[y]):返回对x的取整结果,相当于四舍五入,x为被取整的数,y为保留几位小数,可取负值

    • ROUND(5.73)=6
    • ROUND(5.75,1)=5.8
  • TRUNC(x,[y]):返回对x的截断结果
    • TRUNC(5.73)=5,TRUNC(5.75,[1])=5.7
-- 查询员工姓名,日工资,保留1位小数
select ename,trunc(sal/22,1) from emp;

4.6.3 日期函数

  1. Oracle以内部数字格式存储⽇期:世纪,年,⽉,⽇,⼩时,分钟,秒

  2. 缺省的⽇期格式是 DD-MON-YY

    • DD 2位天

    • MON ⽉简写 英语 JAN FEB 中⽂ 1⽉

    • YY 年的后2位 21

  3. SYSDATE 是返回⽇期和时间的函数

  4. DUAL是⽤来执⾏函数的虚表

  5. ⽇期必须⽤单引号括起来

to_date()

将字符串转换成⽇期类型

-- 查询1980年12月17号入职的员工
-- 第一种方式 Oracle认为满足DD-MON-YY这种格式的字符串是时间,其他字符串不是时间
-- 不推荐使用 因为DD-MON-YY格式是可以修改的
select * from emp where hiredate = '17-12月-80';
-- 第二种方式 to_date(日期,格式)
-- 推荐使用
select * from emp where hiredate = to_date('1980-12-17','YYYY-MM-DD');
to_char()

将⽇期转换成字符串类型

-- 查询1981年入职的员工
select * from emp where to_char(hiredate,'YYYY') = '1981'
select ename,hiredate,to_char(hiredate,'YYYY'),to_char(hiredate,'MM'), to_char(hiredate,'DD') from emp;

4.6.4 分组函数(聚合函数、多行函数)

  • 求平均数:avg([distinct|all]列名),不计算空值

  • 求和:sum([distinct|all]列名)

  • 计数:count({*|[distinct|all]列名}

  • 求最大值:max([distinct|all]列名)

  • 求最小值:min([distinct|all]列名)

-- 查询公司平均工资,工资和,最低工资和最高工资
select avg(sal),sum(sal),min(sal),max(sal) from emp;
-- MIN 和 MAX函数适用于任何数据类型
-- 查询最早入职时间和最晚入职时间
select min(hiredate),max(hiredate) from emp;
-- count()函数,count()不统计空值
select count(empno),count(mgr) ,count(distinct mgr)from emp;
-- COUNT(*)返回表中的记录数
-- emp表有多少记录/员工
select count(*) from emp;
-- avg()函数,不计算空值
select avg(nvl(comm,0)) from emp;
select sum(comm)/count(*) from emp;

4.6.5 分组 group by 子句

使⽤GROUP BY⼦句将表分成⼩组

4.6.5(1) 语法
SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];

select 后面的列,一定要出现在 group by 里面

出现在 group by 后面的列不一定要出现在select 后面

4.6.5(2) 示例
-- 查询每个部门的平均工资
select deptno, avg(sal) from emp group by deptno;
-- 查询每一种职位的平均工资、最低工资、最高工资
select job,avg(sal),min(sal),max(sal) from emp group by job;
-- 多列分组
-- 查询每个部门每种职位的平均工资
select deptno,job, avg(sal) from emp group by deptno,job order by deptno
-- 查询每个年龄段的男生女生数量
select sage,ssex,count(*) from student group by ssex,sage order by sage;

4.6.6 过滤筛选 having 子句

Having⼦句的作⽤是对⾏分组进⾏过滤,where⼦句的作⽤是对⾏进⾏过滤

4.6.6(1) 语法
SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
4.6.6(2) 示例
-- 查询每个部门平均工资,只显示大于2000的
select deptno, avg(sal) from emp group by deptno having avg(sal)>2000
-- 查询除了SALESMAN之外其他职位的平均工资
select job,avg(sal) from emp group by job having job <>'SALESMAN';
select job,avg(sal) from emp where job<>'SALESMAN' group by job;
-- 嵌套组函数
-- 查询三个部门平均工资中最高的
select max(avg(sal)) from emp group by deptno

Oracle概念及常用语句(一)相关推荐

  1. oracle运维常用语句,oracle运维个人常用检查语句整理

    1.查找排序最多的SQL SQL> SELECT HASH_VALUE, SQL_TEXT, SORTS, EXECUTIONS FROM V$SQLAREA ORDER BY SORTS DE ...

  2. Oracle学习:常用语句

    一.select语句 Select 语句的整体形式: select col1, col2- // 要查找的列名from table_name // 要搜索哪张表 where condition // ...

  3. Oracle SQL注入常用语句

    解析IP select utl_inaddr.get_host_address('google.com') from dual; 获取本机IP地址 select utl_inaddr.get_host ...

  4. oracle配置话清单,oracle 几个常用话语

    oracle 几个常用语句 1.复制表结构 create table table_name as (select * from table_name where 1 = 2 ) 2.插入表的数据 in ...

  5. Oracle常用语句:分页查询语句的写法

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  6. Oracle数据库数据查询语句示例(包含大部分常用语句)

    Oracle数据库数据查询语句示例(包含大部分常用语句) 目标 本文用到的关系模式 语句示例 1.在创建的s,p,j和spj表中完成以下查询 (1)查询零件重量在10-20之间(包括10和20)的零件 ...

  7. Oracle数据库的数据更新语句与视图操作示例(包含大部分常用语句)

    Oracle数据库的数据更新语句与视图操作(包含大部分常用语句) 目标 本文用到的关系模式 语句示例 1.在创建的student, course, teacher, sc, tc表中用SQL语句完成以 ...

  8. Oracle常用语句总结(后期续更)

    Oracle常用语句总结 一.查看表空间占用情况 1. 查看表空间占用情况 2. 创建表空间 二.数据库情况查询 1. 查询数据库版本 2. 查询连接数 2.1 数据库连接数 2.1.1 查询数据库当 ...

  9. 怎么解锁oracle数据库表,Oracle数据库表解锁语句

    --表解锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_ ...

最新文章

  1. 那些没出现在近几年顶会上重要论文
  2. Lightoj 1281 New Traffic System (记忆化Dijkstra)
  3. 【Java】Integer.valueOf()
  4. Python字典中setdefault和update用法区别
  5. linux选择最短路径sdn,基于网络流量的SDN最短路径转发应用
  6. 设计模式(Design Patterns)详解
  7. Django(part31)--admin后台数据库管理
  8. node.js之打包工具webpack
  9. quartz和应用的集群问题
  10. linux nona怎么用_Linux nano编辑器命令常用方法
  11. 博客园使用攻略之如何添加自己的js文件
  12. base64-图片传输
  13. Golang学习日志 ━━ Gin-Vue-Admin按步骤手动创建api及router、service
  14. OpenCV——图像矩
  15. OpenCV-细化算法(thinning algorithm)描绘出轮廓的中心线
  16. OO ALV中的data_changed、data_changed_finished事件介绍
  17. 使用高德地图 地址一经纬度 之间相互转化的实例代码 python
  18. java wtc_java通过wtc调用tuxedo服务超时
  19. mysql 设置密码出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  20. eNSP之防火墙简单实验(一)

热门文章

  1. ui动效 unity_Unity - UIWidgets 6. 显示列表
  2. 常用的一些子域名,旁站等查询网站
  3. Efficient RANSAC for Point-Cloud Shape Detection 点云形状检测的高效RANSAC法
  4. linux usb gadget驱动详解(三)
  5. 云服务HCIE变题当天一把过!分享下学习备考和考试经验
  6. 1万人同时在线的游戏服务器需要多少钱?
  7. 2019年互联网女皇趋势报告:小程序创新创业商业模式引领全球
  8. android 定位蓝牙,Android开发-蓝牙RSSI定位
  9. [计算机组成原理(唐朔飞 第2版)]第三章 系统总线(学习复习笔记)
  10. M209.长度最小的子数组