欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle数据库整理-(前篇)

程序员文章站 2024-01-20 16:47:34
Oracle数据库整理一.概述1.一个认知2.二个概念3.三个名词4.四种对象5.五种分类二.数据查询操作1.使用select语句查询某张表的所有数据内容2.select语句可以对指定的列的所有值进行算术运算3.给查询的列起别名4.对null值得替换运算5.排序6.限制查询7.多表查询一.概述1.一个认知认知什么是oracle? oracle:商业运用第一的关系型数据库 实质:关系型数据库2.二个概念数据库:数据存储的仓库关系型数据库:数据库中保存的对象之间可以存在一定的关联关...

一.概述

1.一个认知

  • 认知什么是oracle? oracle:商业运用第一的关系型数据库 实质:关系型数据库

2.二个概念

  • 数据库:数据存储的仓库
  • 关系型数据库:数据库中保存的对象之间可以存在一定的关联关系,并非完全独立。主要反映到以后学习的主外键.

3.三个名词

  • sql: 结构化的查询语句,操作oracle数据库的语言
  • sqlplus:oracle软件自带的可以输入sql,且将sql执行结果显示的终端
  • pl/sql:程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如if for…,使之成为一个sql块,完成一定的功能

4.四种对象

  • table:表格,由行和列组成,列又称字段,每一行内容为表格的一条完整的数据。

  • view: 视图,一张表或者多张表的部分或者完整的映射,好比表格照镜子,镜子里面的虚像就是view

  • sequence:序列

  • index:索引,提高数据的访问效率

  • synonym:同义,方便对象的操作

  • program unit:程序单元,pl/sql操作的对象

5.五种分类

  • Data retrieval:数据查询 select
  • DML:数据操纵语言(行级操作语言):操作的是表格当中一条一条的数据 insert update delete
  • DDL:数据定义语言(表级操作语言):操作的内容为表格(对象)
    create alter drop truncate rename
  • transaction control:事务控制 commit(提交) rollback(回滚) savepoint()
  • DCL:数据控制语言 如:grant revoke
    -delete: 删除表中的一条或者多条记录,该操作需要提交事务 truncate:清空表格,该操作不需要提交事务

二.数据查询操作

以下例子都会用到两张表 s_emp:员工表 s_dept: 部门表

1.使用select语句查询某张表的所有数据内容

语法:
select [distinct] *{col_name1,col_name2,…}
from tb_name;
注意:语法中出现的中括号[],表示该部分可有可无
* :表示所有列,在企业用语中不出现,因为效率低下且可读性差
col_name1:列名,将需要查阅的数据字段列举出来,可以查看多列值,列名之间用,进行分割即可
tb_name: 表名,要查询哪个表

例:查看s_dept表中的所有记录的id和name

select id,name  from s_dept;

2.select语句可以对指定的列的所有值进行算术运算

例:查看每个员工的员工id,名字和月薪涨100以后的年薪

select id,last_name,(salary+100)*12  from s_emp;

3.给查询的列起别名

例: 查看员工的员工id,名字和年薪,年薪列名为annual

select id,last_name,salary as annual from s_emp;

4.对null值得替换运算

语法:nvl()函数
select nvl(col_name,change_value)  from tb_name;
例: 查看所有员工的员工id,名字和提成,如果提成为空,显示成0
select id,last_name,nvl(commission_pct,0) commission_pct from s_emp;

语法:
select distinct col_name,col_name…from tb_name;
注意1:distinct关键词只能放在select关键词后面
例: 查看所有员工的职位名称和部门id,同职位同部门的只显示一次

select distinct title,dept_id from s_emp;

5.排序

1.排序:所谓排序,就是根据某个字段的值按照升序或者降序的情况将记录查询出来
语法:
select col_name,…from tb_name order by col_name [asc|desc],…
注意:1.排序使用order by字句,该子句只对查询记录显示调整,并不改变查询结果,所以执行权最低,即最后执行。
2.排序关键词:
asc:升序(默认,默认的意思是不加关键词的时候默认为生序排序)
desc:降序
3.如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。
例:test表

id id2
1 2
2 3
3 4
4 1
4 2
语句:
select id,id2 from test order by id,id2 desc;

结果:

id id2
1 2
2 3
3 4
4 2
4 1

注意:先排第一列,如果第一列有重复的值再排第二列,以此类推
需求:查看员工的id,名字和薪资,按照薪资的降序排序显示。

4.order by 后面还可以跟数字,表示使用select后面的第几个列进行排序
例: //使用last_name列进行排序

select last_name,salary from s_emp order by 1;

6.限制查询

语法:
select col_name,… from tb_name
where col_name 比较操作表达式 逻辑操作符 col_name 比较操作表达式
注意:

  • 限制查询条件,使用where子句
  • 条件可以多个,使用逻辑操作符和()进行条件的逻辑整合
  • where子句的优先级别最高
  • 比较操作表达式由操作符和值组成
  • sql比较操作符SQL comparison operators
    BETWEEN … AND…
    IN(list)
    LIKE
    IS NULL
  • 逻辑比较操作符 : = > < >= <=
  • 不等于:三个都表示不等于的意思(经常用的是!=) != <> ^=

例: 查看名字为Ngao或者Smith的员工信息

select id,last_name,salary
from s_emp
where last_name in ('Ngao','Smith');

例:查看员工名字以C字母开头的员工的id,工资。
like:模糊查询,即值不是精确的值的时候使用
通配符,即可以代替任何内容的符号
% :通配0到多个字符
_ : 当且仅当通配一个字符
转义字符: 默认为,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符

select id,last_name,salary
from s_emp
where last_name like 'C%';

例:查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字

select id,last_name,dept_id,title
from s_emp
where dept_id = 41 and title = 'Stock Clerk';

例: 查看员工提成不为空的员工信息

select id,last_name,commission_pct
from s_emp
where commission_pct is not null;

例:查看员工名字不是以C字母开头的员工信息。

select id,last_name,salary
from s_emp
where last_name not like 'C%';

7.多表查询

多表查询,又称表联合查询,即一条sql语句涉及到的表有多张,数据通过特定的连接进行联合显示.

笛卡尔积 : 在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y.
假设集合A={a,b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1),(b, 2)}。
在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积

连接查询
为了在多表查询中避免笛卡尔积的产生,我们可以使用连接查询来解决这个问题.
连接查询分为:

  1. 等值连接
  2. 不等值连接
  3. 外连接
    左外连接
    右外连接
    全连接
  4. 自连接

1)等值连接
利用一张表中某列的值和另一张表中某列的值相等的关系,把俩张表连接起来。
例: 查询员工的名字、部门编号、部门名字

select last_name,dept_id,name
from s_emp,s_dept
where s_emp.dept_id=s_dept.id;

2)不等值连接
假设数据库中还有一张工资等级表:salgrade
工资等级表salgrade:
gradeName列表示等级名称
losal 列表示这个级别的最低工资数
hisal 列表示这个级别的最高工资数
表中的数据类似于下面内容:
id salgrade losal hisal
1 初级程序员 2000 4000
2 中级程序员 4000 6000
例:查询出员工的名字、职位、工资、工资等级名称

SELECT  e.last_name, e.title, e.salray, s.gradeName
		FROM    s_emp e, salgrade s
		WHERE   e.salray BETWEEN s.losal AND s.hisal

3)左外连接
例:查询所有员工 以及对应的部门的名字,没有部门的员工也要显示出来

select last_name,dept_id,name 
from s_emp,s_dept
where s_emp.dept_id=s_dept.id(+);

或者 俩者是等价的

select last_name,dept_id,name 
from s_emp left outer join s_dept
on s_emp.dept_id=s_dept.id;

注意:outer可以省去不写
4)右外连接
例:查询所有员工 以及对应的部门的名字,没有任何员工的部门也要显示出来

select last_name,dept_id,name 
from s_emp right outer join s_dept
on s_emp.dept_id=s_dept.id;

5)全连接
例: 查询所有员工 以及对应的部门的名字,没有任何员工的部门也要显示出来,没有部门的员工也要显示出来

select last_name,dept_id,name 
from s_emp full outer join s_dept 
on s_emp.dept_id=s_dept.id;

6)自连接:一张表,自己和自己连接
例: 查询每个员工的名字以及员工对应的管理者的名字

select s1.last_name,s2.last_name manager_name
from s_emp s1,s_emp s2
where s1.manager_id = s2.id;

本文地址:https://blog.csdn.net/weixin_43977265/article/details/107288091