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

【01】-Oracle基本select语句

程序员文章站 2022-03-19 20:56:44
一、登陆. 1. 超级用户登陆: i. sqlplus /nolog ii. connect /as sysdba     2. 普通用户...

一、登陆.

1. 超级用户登陆:

i. sqlplus /nolog

ii. connect /as sysdba

 

【01】-Oracle基本select语句

 

2. 普通用户登陆(使用Oracle的用户Scott登陆):

i. sqlplus scott/123 (用户名:scott密码:123)

 

【01】-Oracle基本select语句

 

ii. sqlplus scott(当然,为了安全在后面输入密码),再输入密码

 

【01】-Oracle基本select语句

 

3. 退出:quit,exit

SQL> exit

从 Oracle Database 10g Enterprise Edition Release 10.2.0

With the Partitioning, OLAP and Data Mining options 断开

二、 基本设置与基本select语句.

1. Oracle数据库:用户-->用户下的表;

2.

3. tab是数据字典:oracle超级管理员分配给普通用的资源。它记录着用户所有的表。 * 接下来我们用select查看scott用户下的所有表:

SQL> select * from tab;(可以看出,大小写并不影响)

 

【01】-Oracle基本select语句

 

4. 可以看到Scott用户下有7张表,接下来查询表dept的所有记录

SQL> select * from dept;

 

【01】-Oracle基本select语句

 

基本设置:

5. 有时候表的结构比较复杂,显示出来很乱,这时候可以设置行(Line)宽和页(Page)的 大小:

SQL> set linesize 150

SQL> set pagesize 140

6. 当看到上面的表dept的DEPTNO,觉得不需要这么宽,可以列宽(column)。

这里涉及数字与字符的区别:

SQL> col deptno for 999999999; (9代表数字)

SQL> col dname for a20; (a代表字符,20代表宽度)

7. 清屏:SQL> host cls ;

检索:

8. 检索所有列、部分列、表达式、别名.

i. 所有列: 检索所有列可以用*号,也可以分别列出列名:

SQL> select * from dept;

SQL> select deptno, dname, loc from dept;

 

【01】-Oracle基本select语句

 

ii. 部分列: 检索部分列就要分别列出来了:

SQL > select deptnl, loc from;

 

【01】-Oracle基本select语句

 

iii. 表达式: 在检索中使用表达式(这里检索emp的EMPNO,ENAME,SAL(月薪),年薪(表达式),如果没有设置过上面提到的行宽页宽,可能会分成好几页挤在一起,可以看看上面的设置下),表达式直接使用比较简单:

SQL> select empno, ename, sal, sal*12 from emp;

 

【01】-Oracle基本select语句

 

iv. 别名: 什么是别名,顾名思义就是另外取个名字,当然一般是取比较简单明了的:

SQL> select empno, ename, sal, sal*12 AS “年薪” from emp; (记得不区分大小写,这里的AS和双引号””都可以省略, 当年薪中有其他符号如空格, 则不能省 略)

 

【01】-Oracle基本select语句

 

SQL> select empno, ename, sal, sal*12 AS "年 薪" from emp;

 

【01】-Oracle基本select语句

 

SQL> select empno 编号, ename 姓名, sal "月 薪" from emp;

 

【01】-Oracle基本select语句

 

三、空值问题.

9. 空值(NULL): 任何数和null运算都为null

10. 空值不是空: 即null IS NOT NULL

11. 当遇到空值时, 可以使用滤空函数nvl(src, dest), 当src为空时nvl函数返回dest(dest 可以是数字或者字符串, 字符串和日期在sql语言用单引号扩起来)

12. 示例: 上面检索的年薪其实是不准的, 应该加上comm(奖金)列, 但是可以看出很多 人没有奖金, 这时候就有null空值干扰了, 可以使用滤空来解决:

emp:

 

【01】-Oracle基本select语句

 

未滤空时, 很多员工奖金都为空了:

 

【01】-Oracle基本select语句

 

使用nvl()函数滤空之后(空即为0元):

 

【01】-Oracle基本select语句

 

13. 使用条件语句where来找空值: 查询奖金为空(不空)的员工.

不能直接找comm = null, 否则结果为空

 

【01】-Oracle基本select语句

 

SQL> select * from emp where comm is null;

 

【01】-Oracle基本select语句

 

SQL> select * from emp where comm is not null;

 

【01】-Oracle基本select语句

 

四、四、其他 (dual, 连接符||, DISTINCT, 单双引号使用)

14. 前面提到的tab是数据字典, 记录着用户所建立的表. 这里在介绍一个伪表dual, 也 是oracle超级管理员分配给普通用的资源. 如需要查看日期时, 可以用伪表来代替:

SQL> select sysdate from dual;

 

【01】-Oracle基本select语句

 

如果直接在emp等用户的表上查询, 则该表有几个记录就重复几个结果:

 

【01】-Oracle基本select语句

 

15. 连接符||. 这里借用伪表dual来应用连接符(顾名思义, 链接字符):

SQL> select 'Hello ' || 'Taylor !' from dual; (这样就不会出现14行结果了)

 

【01】-Oracle基本select语句

 

16. 第14点提到的重复现象, 当检索其他列如deptno(部门编号)时, 同样会出现重复现 象, 但这里必须在emp表中检索, 这是就只能用distinct(有区别的) 来过滤了:

SQL> select deptno from emp;

 

【01】-Oracle基本select语句

 

SQL> select DISTINCT deptno from emp;

 

【01】-Oracle基本select语句

 

17. 单双引号使用: 在select语句中, 别名使用双引号, 字符串和日期使用单引号