Oracle安装时可选择初始化一些模拟数据。
传统的数据库之中采用的是表作为存储的基本单元,在一个数据库里面会存在有大量的数据表。而在整个学习之中scott用户是主要的数据来源,所以首先来观察此用户下的四张数据表,及其表的结构;
范例:要想查询一个用户的所有表,使用如下命令
SELECT * FROM tab ; |
此时显示一共有四张表:dept、emp、salgrade和bonus,下面来观察四张表的结构。(查看表结构语法: DESC 表名)
1、部门表:dept
NO | 字段 | 类型 | 描述 |
1 | DEPTNO | NUMBER(2) | 部门编号,最多只能由两位数所组成 |
2 | DNAME | VARCHAR2(14) | 部门名称,由14个字节长度所组成 |
3 | LOC | VARCHAR2(13) | 部门位置,由13个字节长度所组成 |
2、雇员表:emp
NO | 字段 | 类型 | 描述 |
1 | EMPNO | NUMBER(4) | 雇员编号,最多由四位数字所组成 |
2 | ENAME | VARCHAR2(20) | 雇员姓名 |
3 | JOB | VARCHAR2(9) | 职位,多个雇员的职位数据一定会重复 |
4 | MGR | NUMBER(4) | 领导编号,领导也一定是公司的雇员 |
5 | HIREDATE | DATE | 雇佣日期,DATE包括年、月、日、时、分、秒数据, |
6 | SAL | NUMBER(7,2) | 基本工资,表示由2位小数和5位整数所组成 |
7 | COMM | NUMBER(7,2) | 佣金,销售人员才会存在佣金 |
8 | DEPTNO | NUMBER(2) | 雇员所在的部门编号,与dept表对应 |
3、工资等级表:salgrade
每位雇员都有自己的工资数据,那么工资在公司之中会划分等级。
NO | 字段 | 类型 | 描述 |
1 | GRADE | NUMBER | 等级编号 |
2 | LOSAL | NUMBER | 此等级的最低工资 |
3 | HISAL | NUMBER | 此等级的最高工资 |
4、工资表
NO | 字段 | 类型 | 描述 |
1 | EANME | VARCHAR2(10) | 雇员姓名 |
2 | JOB | VARCHAR2(9) | 职位 |
3 | SAL | NUMBER | 工资 |
4 | COMM | NUMBER | 佣金 |
其中三张数据表(emp、dept、salgrade)都存在有数据,但是只有bonus表之中不包含任何的数据。
SQL(Structured Query Language,结构化查询语言)是一个功能强大的数据库语言 。 SQL通常用于与数据库的通讯,ANSI声称,SQL是关系数据库管理系统的标准语言。
SQL是在七十年代的时候由IBM研发出来的,其目的是为了同一数据库的操作方式。实际上最初的数据库环境非常不乐观,因为各个数据库的生产商都有着自己的数据库操作标准。后来在80年代的时候Oracle公司开始将Oracle数据库提供了SQL的支持(Oracle是世界上最早支持SQL标准的大型数据库)。到了今天,几乎所有的数据库都支持了SQL,而这样可以大大简化程序人员的开发困难(学习的时候只学习标准SQL)。
PS:SQL的操作属于长期以来历史的发展产物,同时也是现在有可能依然被延续下去的技术,不过在SQL产生初期,有部分人员认为SQL并不方便(传统的基于行、列的数据表的存储结构不方便)。于是最早产生了一个NOSQL(不使用SQL)技术,但是到现在为止NOSQL翻译为“Not Only SQL”,其中代表作:MongoDB(Node JS,淘宝),采用的一种文档的方式进行存储的。
SQL功能强大,概括起来,它可以分成以下几组:
·DML(Data Manipulation Language数据操作语言):指的是实现数据库的查询与更新操作,数据库的查询有部分人员会将其成为DQL,因为最麻烦的部分就是查询。
·DDL(Data Definition Language数据定义语言):定义数据库对象。例如:在一些系统设计人员的工作里面需要进行数据表的定义。
·DCL(Data Control Language数据控制语言):控制用户的操作权限,一般由DBA负责。
对于查询一共分为:简单查询、限定查询、多表查询、统计查询,四类查询,其中简单插叙是初步,而简单查询的语法如下:
SELECT [DISTINCT] *|列 [别名],列 [别名],... à 2、控制要显示的数据列 FROM 表名称 [别名] ; à 1、确定查询的数据来源 |
数据表的组成是行与列,而简单查询的最大特征在于会将一张数据表之中的全部数据进行显示,而用户可以选择控制SELECT来控制显示的数据列。
其中及格参数的作用如下:
·DISTINCT :表示去除重复行数据。
·“*” :表示查询所有的列,如果不想查询所有列,则编写具体的列名称。
范例:查询所有雇员的信息(所有雇员一定包括行和列的所有数据)
SELECT * FROM emp ; |
范例:查询每个雇员的编号(empno)、姓名(ename)、职位(job)、基本工资(sal)
SELECT empno,ename,job,sal FROM emp ; |
通过以上的查询可以清楚的发现,数据表所有行都显示,而列只显示需要的部分。除了这样的基本查询功能之外,在进行简单查询的过程之中,SELECT字句之中也可以进行各种数学计算(加减乘除)
范例:查询每个雇员的编号,姓名,基本年薪
SELECT empno,ename,sal*12 年薪FROM emp ; |
但是现在有个问题出现了,发现计算处的列名称很怪异,并没有想其他的列意思明确,所以此时可以起一个别名。
范例:为查询起别名
SELECT empno 编号,ename 姓名,sal*12 年薪 FROM emp ; |
SELECT empno,ename,sal*12 income FROM emp ; |
此处的程序是为了演示采用中文的处理方式,但是在开发之中一定要记住:回避中文。
范例:现在查询每个雇员的编号、姓名、职位、年薪,而且每位雇员,每个月有200元的饭食补助、200元的汽车补助,夏天四个月每月300元的高温补贴、年底的狮虎可以领到15个月的基本工资。
SELECT empno,ename,job, (sal+400)*12 +300*4 + sal*3 income FROM emp ; |
四则运算的过程之中,也一定有自己的优先级,先乘除后加减。
范例:查询所有雇员的职位
SELECT job FROM emp ; |
非常明显的发现,此时的查询结果之中出现了重复数据,因为多个雇员一定从事于同一职位,那么如果要想清除掉重复列,则可以使用DISTINCT关键字处理,此关键字只能够出现在SELECT字句之中。
范例:去除重复数据
SELECT DISTINCT job FROM emp ; |
虽然此时可以消除重复数据,但是对于重复的数据是有一个基本的原则:只有在所有列的数据都重复的情况下才叫重复数据。
范例:关于重复消除的小问题——查询每个雇员的姓名、职位
SELECT DISTINCT ename,job FROM emp ; |
以上的操作都属于SQL的基本操作,但是在Oracle里面,增加了一个“||”的连接符,可以进行数据的连接。
范例:观察连接符
SELECT empno || ename FROM emp ; |
但是这样的合并意义并不是很大,所以下面可以增加以下描述的文字,例如:现在希望有这样的数据显示:
编号:7369、姓名:SMITH、工资:800 |
其中红色字体的数据应该是灵活可变的,而蓝色的数据应该是固定的,那么在程序之中,把固定的数据都成为字符串,而对于字符串的数据库表示应该使用“’”(单引号)。
select '编号:'||empno||'、姓名:'||ename||'、工资:'||sal info from emp ; |
提示:关于数据的表示问题
·在进行查询的时候如果取别名,那么可以直接编写,不需要使用任何的修饰符,单 引号、双引号都不需要;
·在进行查询的时候如果需要直接编写字符串,则字符串要使用“’”(单引号)声明, 如果是数字,则直接编写;
select '编号:'||empno||'、姓名:'||ename||'、工资:'||sal||90 info from emp ; |
·在SELECT字句之中出现的字符串和数字都会固定的显示,有多少行就重复多少行。
Select *,’string’ from emp ; |