Oracle中的SQL语言

本文深入探讨了数据库的重要性及数据库管理系统(DBMS)的作用,详细介绍了SQL语言的基础知识,包括查询、条件筛选、数据操作等功能,以及Oracle数据库的使用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 了解数据库

随着互联网时代的到来,需要持久化数据呈现井喷式发展,常规的 io 操作虽然可以满足持久化的需求,但是,对于持久化的目的,对数据的操纵,显然力不从心,且操作的复杂度很大,不利于大规模的发展,审时度势,数据库应运而生。

在这里插入图片描述

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库;随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

数据库现在已经成为数据管理的重要技术,也是计算机的重要分支。由于数据库具有数据结构化,最低冗余度、较高的程序与数据独立性,易于扩展、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。数据库的运用从一般管理扩大到计算机辅助技术、人工智能以及科技计算等领域。

随着数据库技术的发展,计算机技术也随着得到了很大的发展,数据库为我们提供了可以快速存储以及检索的便利,它也为近几年软件可以如此普及贡献不小的力量。

常用的数据库有:

在这里插入图片描述
在这里插入图片描述

2. DBMS

数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过 DBMS 访问数据库中的数据,数据库管理员也通过 dbms 进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分 DBMS 提供数据定义语言DDL(Data Definition Language)数据操作语言 DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

根据存储模型可将数据库划分为关系型数据库和非关系型数据库。关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。标准数据查询语言 SQL 就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。

当前主流的关系型数据库有 Oracle、DB2、Microsoft SQL Server、MicrosoftAccess、MySQL 等。

Oracle Database,又名 Oracle RDBMS,或简称 Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说 Oracle 数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。

3. SQL 语言介绍

SQL(Structured Query Language)为数据库的语言,在 1974 年由 Boyce【博伊 斯】和 Chamberlin【钱伯林】提出的一种介于关系代数与关系演算之间的结构化查询 语言,是一个通用的、功能极强的关系型数据库语言。它包含三部分:

在这里插入图片描述

命令分类操作:
在这里插入图片描述

4. 表(Table)

在这里插入图片描述
表是从属于用户的 ,查询表(用户名.表名),当前用户查询自己的表时,用户名. 可以省略,其他用户查询 别的用户表 ,不能省略,同时必须存在权限。
在这里插入图片描述

表是逻辑表(概念表),不是物理表,块(8k) —>区(连续块)–>段(连续区) -->表(多个段) ,数据段不全是表,表一定是数据段。还 有其他段:如索引段

在这里插入图片描述

  1. 表结构
    表由表名、字段(名称+类型+约束)、记录 组成。与 java 相对应:

在这里插入图片描述

Scott用户表

在Oracle数据库中为我们提供了四张表

  • dept : 用户表
  • emp : 雇员表
  • salgrade : 工资等级表
  • bonus : 奖金表
    用户表说明
dept 部门表

在这里插入图片描述

emp 雇员信息表

在这里插入图片描述

salgrade 工资等级表

在这里插入图片描述

Oracle 的命令不区分大小写的(SELECT 与 select),存储数据或者内容是区分大小写的.(虽然命令不区分大小写,但是最好不要大小写混着写,不美观.)

在在select的语法中, 键盘上的两个 减号 – 后面的内容为注释
如下图:
在这里插入图片描述
使用命令

举例:
查询所有员工的名字
思路:
 查询的数据为: ename
数据来源为:emp 雇员表
输入命令并且执行如下图:

在这里插入图片描述
在这里插入图片描述
举例:

--如何查询所有部门的部门信息
--思路:
--要查询的信息:deptno,dname,loc
--信息来源: emp
--代码格式为: 
select deptno,dname,loc from dept;

在这里插入图片描述
由上面的代码我们可得知查询合适为:select 字段名1,字段名2,字段… from 表名
**然而我们有更简便的方式来查询啊一个表格的所有信息,所以重写代码为:

select * from emp;

--(* 号匹配from后面的表名中的所有字段)
--得到的结果和上面一致

在这里插入图片描述
**查询有员工存在的部门的编号

select deptno from emp;

代码执行后效果如下图:**
在这里插入图片描述

从上面的图片中,我们发现,部门编号有很多重复的,这时我们可以选择去重,这里用到 distinct 
如何使用呢?


代码:
delect distinct  deptno from emp;

代码执行效果如下图:
在这里插入图片描述
这里需要注意一点:去重的前提是 select 的结果集(select 查询后的数据为结果集)必须是多条数据完全相同才能去重.

如何起别名?

  • 别名 如果别名中出现空格等特殊符号,或者想要原封不动显示 使用" "中的内容原封不动使用
  • " "不是字符串
  • 给字段别名 字段名 (as) 别名 (给字段起别名 as 可以省略)
  • 给表其别名 表名 别名 切记:不能使用as (给表起别名 as 不能使用)

代码示例:

起别名格式为:字段名1(空格)别名1,字段名2(空格)别名2
select ename 姓名,sal "薪 资",comm as "Sum" from emp;
--薪资之间有空格,但是用" "双引号包裹起来,可以显示.

在这里插入图片描述

如何进行字符串拼接?
这里的字符串拼接和java中的+号不同,而是用 || 标识,
举例:

给所有员工的名称前添加一个'YAMAHA'
代码:select 'YAMAHA'||ename 员工姓名 from emp;

代码执行后如下图

在这里插入图片描述
如和去除null值?

处理null值 格式为:nvl(参数1,参数2) 如果参数1null,函数最终的结果为参数2 ,
如果参数1不为null,结果还是参数1

查询所有员工的姓名,薪资,和奖金,在原奖金上多发100
select ename , sal, comm, nvl(comm,0)+100 "实际奖金" from emp;
由于奖金有0,也有null,所以用nvl(com,0)来处理就可以得到想要的结果.

代码运行后结果如下图:
在这里插入图片描述
虚表 dual

一行不显示的表格,基本上用于开发人员计算,当做计算器使用
如:
代码格式:
select 5*5 from deal;

代码运行后如下图:
在这里插入图片描述
虚表的其他作用如:

打印日期当前日期和时间
代码格式:
select sysdate from dual;

代码运行结果如下图:
在这里插入图片描述

SQL中的条件查询:


 按条件查询
格式为:   select 内容 fromwhere 条件;
执行流程:  from  where  select

a) =><>=<=!=<>between and   
b) andornot、
c)all(数据)
d)some() , any()   
 1. =  等于
 2. > 大于
 3. < 小于
 4. >= 大于等于
 5. <= 小于等于
 6. !=  <> (两个符号都是)不等于
 7. between and......之间
 8. or9. not  ! 不 非
 10.all()  括号里放同一数据类型(一般是int类型) 
 11.some() , any()   的意思是一些,一些数据中的任意一个

-- 查询工资小于1000的员工的姓名 工作岗位  工资   所属部门编号
--查询数据: ename, job, sal , deptno
--数据来源: emp
--条件: sal<1000
--格式: select 内容 from 表 where 条件;
select ename, job, sal , deptno from emp where sal<1000;

代码运行后结果如下图:
在这里插入图片描述

-- 查询不在20部门工作的员工信息
--要查询的数据: emp 表中的所有信息      * 号匹配所有
--数据来源: emp
--条件: deptno 不等于 20
--格式: select * from 表 where 条件;
select * from emp where deptno != 20;
select * from emp where deptno <> 20;
select * from emp where not deptno = 20;
-- 上面三个代码运行显示同一个信息      不等于有三种写法

代码运行结果如下图:
在这里插入图片描述

-- 查询员工的年薪大于20000的 员工名称、岗位 年薪
--要查询的数据: emp表中的 员工名称、岗位 年薪
--数据来源: emp表
--判断条件: 年薪>20000
--这里需要处理null值 格式为: nvl(comm,0)
select ename,job,(sal+nvl(comm,0))*12 from emp where (sal+nvl(comm,0))*12>20000;

代码运行结果如下图:
在这里插入图片描述

-- 假设现在 900,1000,1100
--all()  所有
-- 查询工资比我们三个人都高的那些员工的信息
--用all() 把数据放进all后面的括号里
--要查询的数据来源: emp表
--判断条件:工资比900高,比1000高,比1100高 
select * from emp where sal>all(900,1000,1100);

代码运行结果如下图:
在这里插入图片描述
如果要查询工资低于900,1000,1100的,只需要把上述代码中的> 改成< 即可

--some() any()
--some() , any()   的意思是一些,一些数据中的任意一个
-- 查询比我们中随便一个工资高的员工信息
select * from emp where sal> some(900,1000,1100);
select * from emp where sal> any(900,1000,1100);
 

代码运行结果如下图:
在这里插入图片描述
上述的代码 都是根据条件进行判断来查询对应的信息,不同的条件使用不同的判断,要做到灵活多变.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值