Yuens' blog
内容参考《李兴华Oracle数据库》的简单查询部分(链接见文末参考),本节主要包括:[toc]
传统数据库中使用的是表作为存储的基本单元,在一个数据库中有大量的数据表。而在整个学习中,scott用户是主要的数据来源,所以首先观察此用户下的四张数据表及其表结构。
SELECT * FROM tab;
此时显示有四张表:dept、emp、salgrade、bonus,观察四张表的结构(查看表结构语法:DESC 表)。
No. | 字段 | 类型 | 描述 |
1 | DEPTNO | NUMBER(2) | 部门编号,最多只能由两位数字组成 |
2 | DNAME | VARCHAR2(14) | 部门名称,由14个字节长度组成 |
3 | LOC | VARCHAR2(13) | 部门位置 |
No. | 字段 | 类型 | 描述 |
1 | EMPNO | NUMBER(4) | 雇员编号,最多由4位数字组成 |
2 | ENAME | VARCHAR2(10) | 雇员姓名 |
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表对应 |
每位雇员都有一个工资数据,工资在公司中会划分等级。
No. | 字段 | 类型 | 描述 |
1 | GRADE | NUMBER | 等级编号 |
2 | LOSAL | NUMBER | 此等级的最低工资 |
3 | HISAL | NUMBER | 此等级的最高工资 |
No. | 字段 | 类型 | 描述 |
1 | ENAME | VARCHAR2(10) | 雇员姓名 |
2 | JOB | VARCHAR2(9) | 职位 |
3 | SAL | NUMBER | 工资 |
4 | COMM | NUMBER | 佣金 |
其中三张数据表(emp、dept、salgrade)都存在数据,但是只有bonus表不包含任何数据(类似sh用户)。
SQL是一个功能强大的数据库语言。SQL通常用于与数据库的通讯,SQL是关系数据库管理系统的标准语言。
SQL是在70年代由IBM研发出来的,目的是统一数据库的操作方式(最早的是visual foxpro)。实际上最初的数据库厂商都有自己的操作标准。后来80年代,Oracle公司提供了SQL支持(Oracle是最早支持SQL标准的大型数据库)。到了今天,几乎所有的数据库都支持SQL,大大简化程序开发人员的负担(学习只学习标准SQL)。
PS:SQL的操作属于长期以来的历史发展产物,同时也是现有可能会被延续下去的产物,不过在SQL产生的部分人员认为SQL并不方便(传统的基于行、列的数据库的存储结构不方便),于是产生了一个NOSQL技术(最早的翻译是不使用SQL),但到现在为止NOSQL翻译为:“Not OnlySQL”,其中代表作:MongoDB(Node.JS,taobao),采用的是一种文档的方式进行存储的。
SQL功能强大,概括起来,它可以分成以下几组:
对于查询一共分为四类:
本节主要讲简单查询。
SELECT [DISTINCT] * | 列 [别名], 列[别名], … FROM 表名称 [别名] | 步骤二:控制要显示的数据列 |
步骤一:确定查询的数据源 |
数据表的组成是行与列,而简单查询的最大特征在于会将一张数据表之中的全部数据行进行显示,而用控制SELECT来控制显示的数据列。
其中几个参数的作用如下:
SELECT * FROM emp;
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;
此处的程序是为了演示才采用中文的处理方式,但是在开发之中一定要记住:回避中文。
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;
若在empno和ename字段中间将逗号替换为双竖线,那么两列将会合成为一列。
但这样的合并意义不大,所以下面可以增加一些描述文字,例如现在有这样的数据显示:
SELECT ‘编号:’ || enpno || ‘、姓名:’ || ename || ‘、工资:’ || sal info FROM emp;
注意:别名没有单引号,字符有单引号。
提示:关于数据的表示问题
『李兴华java培训01』Oracle数据库 - 网易云课堂 http://study.163.com/course/courseLearn.htm?courseId=932016#/learn/video?lessonId=1116379&courseId=932016