【01】-Oracle基本select语句
一、登陆.
1. 超级用户登陆:
i. sqlplus /nolog
ii. connect /as sysdba
2. 普通用户登陆(使用Oracle的用户Scott登陆):
i. sqlplus scott/123 (用户名:scott密码:123)
ii. sqlplus scott(当然,为了安全在后面输入密码),再输入密码
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;(可以看出,大小写并不影响)
4. 可以看到Scott用户下有7张表,接下来查询表dept的所有记录
SQL> select * from dept;
基本设置:
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;
ii. 部分列: 检索部分列就要分别列出来了:
SQL > select deptnl, loc from;
iii. 表达式: 在检索中使用表达式(这里检索emp的EMPNO,ENAME,SAL(月薪),年薪(表达式),如果没有设置过上面提到的行宽页宽,可能会分成好几页挤在一起,可以看看上面的设置下),表达式直接使用比较简单:
SQL> select empno, ename, sal, sal*12 from emp;
iv. 别名: 什么是别名,顾名思义就是另外取个名字,当然一般是取比较简单明了的:
SQL> select empno, ename, sal, sal*12 AS “年薪” from emp; (记得不区分大小写,这里的AS和双引号””都可以省略, 当年薪中有其他符号如空格, 则不能省 略)
SQL> select empno, ename, sal, sal*12 AS "年 薪" from emp;
SQL> select empno 编号, ename 姓名, sal "月 薪" from emp;
三、空值问题.
9. 空值(NULL): 任何数和null运算都为null
10. 空值不是空: 即null IS NOT NULL
11. 当遇到空值时, 可以使用滤空函数nvl(src, dest), 当src为空时nvl函数返回dest(dest 可以是数字或者字符串, 字符串和日期在sql语言用单引号扩起来)
12. 示例: 上面检索的年薪其实是不准的, 应该加上comm(奖金)列, 但是可以看出很多 人没有奖金, 这时候就有null空值干扰了, 可以使用滤空来解决:
emp:
未滤空时, 很多员工奖金都为空了:
使用nvl()函数滤空之后(空即为0元):
13. 使用条件语句where来找空值: 查询奖金为空(不空)的员工.
不能直接找comm = null, 否则结果为空
SQL> select * from emp where comm is null;
SQL> select * from emp where comm is not null;
四、四、其他 (dual, 连接符||, DISTINCT, 单双引号使用)
14. 前面提到的tab是数据字典, 记录着用户所建立的表. 这里在介绍一个伪表dual, 也 是oracle超级管理员分配给普通用的资源. 如需要查看日期时, 可以用伪表来代替:
SQL> select sysdate from dual;
如果直接在emp等用户的表上查询, 则该表有几个记录就重复几个结果:
15. 连接符||. 这里借用伪表dual来应用连接符(顾名思义, 链接字符):
SQL> select 'Hello ' || 'Taylor !' from dual; (这样就不会出现14行结果了)
16. 第14点提到的重复现象, 当检索其他列如deptno(部门编号)时, 同样会出现重复现 象, 但这里必须在emp表中检索, 这是就只能用distinct(有区别的) 来过滤了:
SQL> select deptno from emp;
SQL> select DISTINCT deptno from emp;
17. 单双引号使用: 在select语句中, 别名使用双引号, 字符串和日期使用单引号