oracle的基本查询

Posted 孙崇武

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle的基本查询相关的知识,希望对你有一定的参考价值。

1、清屏操作:

SQL> host cls

2、查看当前用户:

SQL> show user;
USER 为 "SCOTT"        当前用户为Scott

3、当前用户下的表:

SQL> select * from tab;               tab数据字典(管理员提供的表)

TNAME                                                        TABTYPE       CLUSTERID      
------------------------------------------------------------ -----------------------

BONUS                                                        TABLE


DEPT                                                         TABLE


EMP                                                          TABLE



TNAME                                                        TABTYPE         CLUSTERID
------------------------------------------------------------ --------------------------

SALGRADE                                                     TABLE

4、查看表结构:

SQL> desc emp;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)            员工代号
 ENAME                                              VARCHAR2(10)          员工名字
 JOB                                                VARCHAR2(9)            职位
 MGR                                                NUMBER(4)              上级领导
 HIREDATE                                           DATE                    入职时间
 SAL                                                NUMBER(7,2)             薪资
 COMM                                               NUMBER(7,2)             奖金
 DEPTNO                                             NUMBER(2)               部门代号

5、查询所有员工的所有信息

SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80
       800                    20

      7499 ALLEN                SALESMAN                 7698 20-2月 -81
      1600        300         30

      7521 WARD                 SALESMAN                 7698 22-2月 -81
      1250        500         30


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7566 JONES                MANAGER                  7839 02-4月 -81
      2975                    20

      7654 MARTIN               SALESMAN                 7698 28-9月 -81
      1250       1400         30

      7698 BLAKE                MANAGER                  7839 01-5月 -81
      2850                    30


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7782 CLARK                MANAGER                  7839 09-6月 -81
      2450                    10

      7788 SCOTT                ANALYST                  7566 19-4月 -87
      3000                    20

      7839 KING                 PRESIDENT                     17-11月-81
      5000                    10


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7844 TURNER               SALESMAN                 7698 08-9月 -81
      1500          0         30

      7876 ADAMS                CLERK                    7788 23-5月 -87
      1100                    20

      7900 JAMES                CLERK                    7698 03-12月-81
       950                    30


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7902 FORD                 ANALYST                  7566 03-12月-81
      3000                    20

      7934 MILLER               CLERK                    7782 23-1月 -82
      1300                    10


已选择14行。

6、设置行宽  每一行显示120个字符:

SQL> set linesize 120

7、设置ename列宽  a表示字符串 8表示字符串的宽度是8:

SQL> col ename for a8

8、设置ename列宽   一个9代表一个数字,薪水是四个数字所以是四个9:

SQL> col sal for 9999

9、执行上一条sql语句:

SQL> /

     EMPNO ENAME    JOB                       MGR HIREDATE         SAL       COMM     DEPTNO
---------- -------- ------------------ ---------- -------------- ----- ---------- ----------
      7369 SMITH    CLERK                    7902 17-12月-80       800                    20
      7499 ALLEN    SALESMAN                 7698 20-2月 -81      1600        300         30
      7521 WARD     SALESMAN                 7698 22-2月 -81      1250        500         30
      7566 JONES    MANAGER                  7839 02-4月 -81      2975                    20
      7654 MARTIN   SALESMAN                 7698 28-9月 -81      1250       1400         30
      7698 BLAKE    MANAGER                  7839 01-5月 -81      2850                    30
      7782 CLARK    MANAGER                  7839 09-6月 -81      2450                    10
      7788 SCOTT    ANALYST                  7566 19-4月 -87      3000                    20
      7839 KING     PRESIDENT                     17-11月-81      5000                    10
      7844 TURNER   SALESMAN                 7698 08-9月 -81      1500          0         30
      7876 ADAMS    CLERK                    7788 23-5月 -87      1100                    20

     EMPNO ENAME    JOB                       MGR HIREDATE         SAL       COMM     DEPTNO
---------- -------- ------------------ ---------- -------------- ----- ---------- ----------
      7900 JAMES    CLERK                    7698 03-12月-81       950                    30
      7902 FORD     ANALYST                  7566 03-12月-81      3000                    20
      7934 MILLER   CLERK                    7782 23-1月 -82      1300                    10

已选择14行。

10、通过列名查询:

SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;

     EMPNO ENAME    JOB                       MGR HIREDATE         SAL       COMM     DEPTNO
---------- -------- ------------------ ---------- -------------- ----- ---------- ----------
      7369 SMITH    CLERK                    7902 17-12月-80       800                    20
      7499 ALLEN    SALESMAN                 7698 20-2月 -81      1600        300         30
      7521 WARD     SALESMAN                 7698 22-2月 -81      1250        500         30
      7566 JONES    MANAGER                  7839 02-4月 -81      2975                    20
      7654 MARTIN   SALESMAN                 7698 28-9月 -81      1250       1400         30
      7698 BLAKE    MANAGER                  7839 01-5月 -81      2850                    30
      7782 CLARK    MANAGER                  7839 09-6月 -81      2450                    10
      7788 SCOTT    ANALYST                  7566 19-4月 -87      3000                    20
      7839 KING     PRESIDENT                     17-11月-81      5000                    10
      7844 TURNER   SALESMAN                 7698 08-9月 -81      1500          0         30
      7876 ADAMS    CLERK                    7788 23-5月 -87      1100                    20

     EMPNO ENAME    JOB                       MGR HIREDATE         SAL       COMM     DEPTNO
---------- -------- ------------------ ---------- -------------- ----- ---------- ----------
      7900 JAMES    CLERK                    7698 03-12月-81       950                    30
      7902 FORD     ANALYST                  7566 03-12月-81      3000                    20
      7934 MILLER   CLERK                    7782 23-1月 -82      1300                    10

已选择14行。

11、SQL优化:尽量使用列名代替* 查询要快

12、注释  ( 单行用 -- 多行用 /* */)

13、查询员工号 姓名 月薪 年薪:

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

     EMPNO ENAME      SAL     SAL*12
---------- -------- ----- ----------
      7369 SMITH      800       9600
      7499 ALLEN     1600      19200
      7521 WARD      1250      15000
      7566 JONES     2975      35700
      7654 MARTIN    1250      15000
      7698 BLAKE     2850      34200
      7782 CLARK     2450      29400
      7788 SCOTT     3000      36000
      7839 KING      5000      60000
      7844 TURNER    1500      18000
      7876 ADAMS     1100      13200

     EMPNO ENAME      SAL     SAL*12
---------- -------- ----- ----------
      7900 JAMES      950      11400
      7902 FORD      3000      36000
      7934 MILLER    1300      15600

已选择14行。

14、查询员工号 姓名 月薪 年薪 年收入:

SQL> select empno,ename,sal,sal*12 年薪,comm 奖金,sal*12+comm 年收入 from emp;

     EMPNO ENAME      SAL       年薪       奖金     年收入
---------- -------- ----- ---------- ---------- ----------
      7369 SMITH      800       9600
      7499 ALLEN     1600      19200        300      19500
      7521 WARD      1250      15000        500      15500
      7566 JONES     2975      35700
      7654 MARTIN    1250      15000       1400      16400
      7698 BLAKE     2850      34200
      7782 CLARK     2450      29400
      7788 SCOTT     3000      36000
      7839 KING      5000      60000
      7844 TURNER    1500      18000          0      18000
      7876 ADAMS     1100      13200

     EMPNO ENAME      SAL       年薪       奖金     年收入
---------- -------- ----- ---------- ---------- ----------
      7900 JAMES      950      11400
      7902 FORD      3000      36000
      7934 MILLER    1300      15600

已选择14行。

15、SQL中null值:

1. 包含null的表达式都为null

所以进行修改:

SQL> ed
已写入 file afiedt.buf

  1* select empno,ename,sal,sal*12 年薪,comm 奖金,sal*12+nvl(comm,0) 年收入 from emp

SQL> /

EMPNO ENAME SAL 年薪 奖金 年收入
---------- -------------------- ---------- ---------- ---------- ----------
7369 SMITH 800 9600 9600
7499 ALLEN 1600 19200 300 19500
7521 WARD 1250 15000 500 15500
7566 JONES 2975 35700 35700
7654 MARTIN 1250 15000 1400 16400
7698 BLAKE 2850 34200 34200
7782 CLARK 2450 29400 29400
7788 SCOTT 3000 36000 36000
7839 KING 5000 60000 60000
7844 TURNER 1500 18000 0 18000
7876 ADAMS 1100 13200 13200

EMPNO ENAME SAL 年薪 奖金 年收入
---------- -------------------- ---------- ---------- ---------- ----------
7900 JAMES 950 11400 11400
7902 FORD 3000 36000 36000
7934 MILLER 1300 15600 15600

已选择14行。

 2. SQL中,null != null:

SQL> select * from emp where comm=null;

未选定行

此时进行修改 :  要用is 或者用 is not

SQL> ed
已写入 file afiedt.buf

  1* select * from emp where comm is null
SQL> /

     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80
       800                    20

      7566 JONES                MANAGER                  7839 02-4月 -81
      2975                    20

      7698 BLAKE                MANAGER                  7839 01-5月 -81
      2850                    30


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7782 CLARK                MANAGER                  7839 09-6月 -81
      2450                    10

      7788 SCOTT                ANALYST                  7566 19-4月 -87
      3000                    20

      7839 KING                 PRESIDENT                     17-11月-81
      5000                    10


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7876 ADAMS                CLERK                    7788 23-5月 -87
      1100                    20

      7900 JAMES                CLERK                    7698 03-12月-81
       950                    30

      7902 FORD                 ANALYST                  7566 03-12月-81
      3000                    20


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7934 MILLER               CLERK                    7782 23-1月 -82
      1300                    10


已选择10行。
SQL> ed
已写入 file afiedt.buf

  1* select * from emp where comm is  not null
SQL>
SQL> /

     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81
      1600        300         30

      7521 WARD                 SALESMAN                 7698 22-2月 -81
      1250        500         30

      7654 MARTIN               SALESMAN                 7698 28-9月 -81
      1250       1400         30


     EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
       SAL       COMM     DEPTNO
---------- ---------- ----------
      7844 TURNER               SALESMAN                 7698 08-9月 -81
      1500          0         30

16、去掉重复的记录:

SQL> select deptno from emp;

    DEPTNO
----------
        20
        30
        30
        20
        30
        30
        10
        20
        10
        30
        20

    DEPTNO
----------
        30
        20
        10

已选择14行。

SQL> select DISTINCT deptno from emp;

    DEPTNO
----------
        30
        20
        10

注意:

 

SQL> select job from emp;

JOB
------------------
CLERK
SALESMAN
SALESMAN
MANAGER

以上是关于oracle的基本查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Toad for Oracle 中使用自定义代码片段?

如何查询一个oracle数据库中所有表的所有字段哪个包含特定字符串?

Huawei_Netconf_Ncclient

ORCLE-Select 语句执行顺序以及如何提高Oracle 基本查询效率

oracle分组查询

oracle分组查询