1.Oracle数据库的介绍

  ORACLE 数据库系统是美国ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。比如SilverStream  就是基于数据库的一种中间件。ORACLE  数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库, 它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只 要在一种机型上学习了 ORACLE 知识,便能在各种类型的机器上使用它。

2.Oracle数据库的体系结构

<1>数据库(Database)
Oracle 数据库是数据的物理存储。这就包括(数据文件ORA 或者 DBF、控制文件、联机日志、参数文件)。其实Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle 就只有一个大数据库。
<2>实例(Instance)
一个 Oracle 实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。
<3>用户
用户是在实例下建立的。不同实例可以建相同名字的用户。
<4>表空间
表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每 个数据库至少有一个表空间(称之为system 表空间)。

3.创建表空间创建用户以及用户授权

可以利用navicat实现,具体操作步骤见:https://www.cnblogs.com/luckyplj/p/11365245.html

4.Oracle的数据类型

5.Oracle自带的Scott用户

默认密码:tiger

注意:默认情况下,scott用户是锁着的,需要利用SYSTEM这个超级管理员用户进行解锁。

进入如下界面:

6.Oracle的单行函数

(1)字符函数

<1>把小写的字符转换成大写的字符

SELECT UPPER('yes') FROM dual;

<2>把大写字符变成小写字符

SELECT LOWER('LUCKY') FROM dual;

(2)数值函数

<1>四舍五入函数:ROUND()

SELECT ROUND(56.12) FROM dual;

<2>直接截取,不看小数部分

SELECT TRUNC(56.12) FROM dual;

(3)日期函数

<1>查询scott用户下的数据库emp表中所有员工的入职距离现在几天

SELECT SYSDATE-e.HIREDATE FROM EMP e;

注意:EMP e是给EMP表取了一个别名。

<2>将日期类型转换为yyyy-mm-dd hh:mm:ss的格式的字符串

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MM:SS') FROM dual;

(4)通用函数

案例:算出emp表中所有员工的年薪,奖金里面有null值,又因为null值和任何数字做算数运算,结果都为null,所有会出现异常现象。

初始sql:

SELECT e.sal*12+e.comm FROM EMP e;

出现如下现象:

应将sql语句修改为:

SELECT e.sal*12+NVL(e.COMM,0) FROM EMP e;

7.Oracle的条件表达式

(1)案例:给emp表中的员工起别名

SELECT
e.ENAME,
CASE
e.ENAME
WHEN 'SMITH' THEN
'曹操'
WHEN 'ALLEN' THEN
'刘备'
WHEN 'WARD' THEN
'司马懿' ELSE '无名'
END
FROM
EMP e;

结果:

8.多行函数(聚合函数) 

(1)统计记录数 count()

范例:查询出所有员工的记录数

SELECT COUNT(1) FROM emp;

查询结果图:

(2)最小值查询 min()

范例:查询出来员工最低工资

SELECT MIN(sal) FROM emp;

查询结果图:

(3)最大值查询 max()

范例:查询出员工的最高工资

SELECT MAX(sal) FROM emp;

查询结果图:

(4)查询平均值 avg()

范例:查询出员工的平均工资

SELECT AVG(sal) FROM emp;

查询结果图:

(5)求和函数 sum()

范例:查询出 20 号部门的员工的工资总和

SELECT SUM(sal) FROM emp e WHERE e.DEPTNO=20;

查询结果图:

9.分组查询

分组查询需要使用 GROUP BY 来分组

分组查询中,出现在group by 后面的原始列,才能出现在select后面,没有出现在group by 后面的列,想加在select后面,必须加上聚合函数。聚合函数有一个特性,可以把多行记录变成一个值。

范例1:查询出每个部门的平均工资。

SELECT
e.DEPTNO,
AVG( sal )
FROM
emp e
GROUP BY
e.DEPTNO;

查询结果图:

范例2:查询出平均工资高于2000的部门信息。(该案例还涉及到了SQL语言中的having函数)

SELECT
e.DEPTNO,
AVG( sal )
FROM
emp e
GROUP BY
e.DEPTNO
HAVING AVG(sal)>2000;

查询结果图:

范例3:查询出每个部门工资高于800的员工的平均工资。

SELECT
e.DEPTNO,
AVG( sal )
FROM
emp e
WHERE e.SAL>800
GROUP BY
e.DEPTNO

查询结果图:

where条件语句和having语句的区别:
where是过滤分组前的数据,having是过滤分组后的数据。
表现形式:where必须在group by 之前,having是在group by 之后。

10.多表查询

使用一张以上的表做查询就是多表查询。

范例:查询出雇员的编号,姓名,部门的编号和名称,地址

SELECT
e.EMPNO,
e.ENAME,
d.DEPTNO,
d.dname,
d.loc
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO;

查询结果图:

11.自连接

自连接概念:其实就是站在不同的角度把一张表看成多张表。

范例1:查询出员工姓名和员工领导姓名

SELECT e1.ENAME,e2.ENAME
FROM emp e1,emp e2
WHERE e1.MGR=e2.EMPNO;

sql语句解释:e1表的领导是e2表的员工,可以将e1表看成员工表,e2表看成领导表。

查询结果图:

范例2:查询出员工姓名、员工部门名称、员工领导名称、员工领导部门名称

SELECT
e1.ENAME,
d1.DNAME,
e2.ENAME,
d2.dname
FROM
emp e1,
emp e2,
dept d1,
dept d2
WHERE
e1.MGR = e2.EMPNO
AND e1.DEPTNO = d1.DEPTNO
AND e2.DEPTNO = d2.DEPTNO;

查询结果图:

12.子查询

子查询:在一个查询的内部还包括另一个查询,则此查询称为子查询。
Sql 的任何位置都可以加入子查询。

(1)子查询返回一个值

范例:查询出工资和员工SCOTT一样的员工信息。

SELECT
*
FROM
emp e
WHERE
e.SAL IN ( SELECT e.SAL FROM emp e WHERE e.ENAME = 'SCOTT' )

sql语句:*表示所有

查询结果图:

(2)子查询返回一个集合

范例:查询出工资和10号部门任意员工一样的员工信息。

SELECT
*
FROM
emp e
WHERE
e.SAL IN ( SELECT e.SAL FROM emp e WHERE e.DEPTNO=10 )

查询结果图:

(3)子查询返回一张表

范例:查询每个部门的最低工资和最低工资员工姓名和所在部门名称

SELECT
t.DEPTNO,
t.MSAL,
e.ename,
d.dname
FROM
( SELECT e.DEPTNO, MIN( e.SAL ) msal FROM emp e GROUP BY e.DEPTNO ) t,
emp e,
dept d
WHERE
t.deptno = e.DEPTNO
AND t.MSAL = e.SAL
AND e.DEPTNO = d.DEPTNO;

sql语句分析:

//这两句是找到每一个部门中工资最少的员工
t.deptno = e.DEPTNO
AND t.MSAL = e.SAL

查询结果图:

 

22 Oracle数据库基础入门的更多相关文章

  1. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  2. Oracle数据库基础入门《一》Oracle服务器的构成

    Oracle数据库基础入门<一>Oracle服务器的构成 Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一 个高效的 SQL 语句执行环境. Oracle ...

  3. 第一章 oracle数据库基础

    第一章   oracle数据库基础 1.oracle简介-->数据库管理系统    1.1:数据库    1.2:全局数据库名    1.3:数据库实例    1.4:表空间    1.5:数据 ...

  4. Oracle数据库从入门到精通 单行函数问题

    视频课程:李兴华 Oracle从入门到精通视频课程 学习者:阳光罗诺 视频来源:51CTO学院 Oracle数据库从入门到精通-单行函数 在数据库中,为了方便用户的数据开发,往往会提供一系列的支持函数 ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. Oracle 数据库基础——安装

    一.数据库基础知识 1.概念 数据库全称数据库管理系统,简称DBMS,是一种在计算机中,针对数据进行管理.存储.共享的一种技术. 2.分类 数据库的发展过程中,按逻辑模型可分为以下几种: 3.关系型数 ...

  7. 【学习笔记】Y2-1-1 Oracle数据库基础

    Oracle 简介关系型(二维表)数据库 用来存储海量数据在大数据量的并发检索的情况下,性能要高于其他同类数据库产品一般运行环境是Linux和UnixOracle版本中的I(Internet) G(G ...

  8. Oracle 数据库 基础学习 (一) SQL基本知识

    Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术.   一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...

  9. Oracle数据库 基础SQL语句练习

    一.说明 第一次使用Oracle,想做一些练习,熟悉一些oracle. 表:使用的是scott用户,默认的表 具体表讲解,可以参考该文档:https://www.cnblogs.com/xjcheng ...

随机推荐

  1. 什么是cdn?

    CDN加速意思就是在用户和我们的服务器之间加一个缓存机制, 通过这个缓存机制动态获取IP地址根据地理位置,让用户到最近的服务器访问. 那么CDN是个啥? 全称Content Delivery Netw ...

  2. day39线程

    复习: C/S架构: 客户端     服务器模式 B/S架构: 浏览器     服务器模式 B/S架构的客户端对PC机的性能要求比较低.统一了应用的接口 B/S架构隶属于C/S架构 TCP UDP的区 ...

  3. Cronicle 基于nodejs 的分布式任务调度工具

    Cronicle 是一款不多的分布式任务调度工具,基于nodejs 开发,同时包含看web UI,从官方介绍看到的UI还是 挺不错的,而且功能很丰富,值得试用下 参考资料 http://cronicl ...

  4. JS稀奇古怪题目

    JS稀奇古怪题目: 1.操作对象属性优先级高于普通赋值操作 var a = { n: 1 }; var b = a; //操作对象属性优先级高于普通赋值操作 a.x = a = { n: 2 }; c ...

  5. Django 基础篇(二)视图与模板

    视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...

  6. 第04组Alpha事后诸葛亮

    一.组长博客:地址 二.Postmortem模板 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的问题是让大学生可以通过福鱼网站将暂时无 ...

  7. IIS服务器简单搭建

     概况 系统:WIN10企业版 开发工具:VS2013 - VS2017 IIS版本:IIS6.0 安装 安装步骤如图: 这里需要注意一点信息服务器下默认web管理工具只有iis控制台勾上了,也就意味 ...

  8. c# 画正态分布图

    /// <summary> /// 提供正态分布的数据和图片 /// </summary> public class StandardDistribution { /// &l ...

  9. 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'TableName'中的标识列指定显式值

    当某表的一个列为自动增长列,是无法直接通过insert语句向给字段写入指定值,解决方法: SET IDENTITY_INSERT TABLE_NAME ON; INSERT INTO TABLE_NA ...

  10. win10安装ubuntu双系统遇到的问题

    安装过程学习了几个博客 Ubuntu 16.04与Win10双系统双硬盘安装图解:https://www.cnblogs.com/coxiseed/p/9945202.html?tdsourcetag ...