您的位置:首页 > 数据库 > Oracle

Oracle之基本select语句

2017-08-14 21:35 162 查看
1、显示所有列
SQL> select * from dept;

DEPTNO DNAME          LOC
--------- -------------- -------------
10 ACCOUNTING     NEW YORK
20 RESEARCH       DALLAS
30 SALES          CHICAGO
40 OPERATIONS     BOSTON
2、显示部分列
SQL> select dname from dept;

DNAME
--------------
ACCOUNTING
RESEARCH
SALES
OPERATIONS
3、使用表达式
SQL>  select ename,empno,job,sal,sal*12 from emp;

ENAME           EMPNO JOB              SAL     SAL*12
---------- ---------- --------- ---------- ----------
SMITH            7369 CLERK            800       9600
ALLEN            7499 SALESMAN        1600      19200
WARD             7521 SALESMAN        1250      15000
JONES            7566 MANAGER         2975      35700
MARTIN           7654 SALESMAN        1250      15000
BLAKE            7698 MANAGER         2850      34200
CLARK            7782 MANAGER         2450      29400
SCOTT            7788 ANALYST         3000      36000
KING             7839 PRESIDENT       5000      60000
TURNER           7844 SALESMAN        1500      18000
ADAMS            7876 CLERK           1100      13200
JAMES            7900 CLERK            950      11400
FORD             7902 ANALYST         3000      36000
MILLER           7934 CLERK           1300      15600

已选择14行。
4、使用别名
SQL> select ename as "姓名",empno "编号",job 职位,sal 月薪,sal*12 年薪 from emp;

姓名             编号 职位            月薪       年薪
---------- ---------- --------- ---------- ----------
SMITH            7369 CLERK            800       9600
ALLEN            7499 SALESMAN        1600      19200
WARD             7521 SALESMAN        1250      15000
JONES            7566 MANAGER         2975      35700
MARTIN           7654 SALESMAN        1250      15000
BLAKE            7698 MANAGER         2850      34200
CLARK            7782 MANAGER         2450      29400
SCOTT            7788 ANALYST         3000      36000
KING             7839 PRESIDENT       5000      60000
TURNER           7844 SALESMAN        1500      18000
ADAMS            7876 CLERK           1100      13200
JAMES            7900 CLERK            950      11400
FORD             7902 ANALYST         3000      36000
MILLER           7934 CLERK           1300      15600

已选择14行。

注:别名可以省掉""和as,但是列名中如果有空格,则不能省略""
5、空值问题
(1)问题:有的员工的年薪为空?
SQL> select ename,empno,job,sal,sal*12+comm from emp;

ENAME           EMPNO JOB              SAL SAL*12+COMM
---------- ---------- --------- ---------- -----------
SMITH            7369 CLERK            800
ALLEN            7499 SALESMAN        1600       19500
WARD             7521 SALESMAN        1250       15500
JONES            7566 MANAGER         2975
MARTIN           7654 SALESMAN        1250       16400
BLAKE            7698 MANAGER         2850
CLARK            7782 MANAGER         2450
SCOTT            7788 ANALYST         3000
KING             7839 PRESIDENT       5000
TURNER           7844 SALESMAN        1500       18000
ADAMS            7876 CLERK           1100
JAMES            7900 CLERK            950
FORD             7902 ANALYST         3000
MILLER           7934 CLERK           1300

已选择14行。
(2)规则:
<1>任何数和空值运算都为空;
<2>空值不为空,即null != null;
(3)解决办法:滤空函数
<1>nvl(a,b):当a是null的时候返回b(b可以是数字,也可以是字符串,字符串用单引号括起来);
<2>如何解决之前的年薪问题
SQL> select ename,empno,job,sal,sal*12+nvl(comm,0) from emp;

ENAME           EMPNO JOB              SAL SAL*12+NVL(COMM,0)
---------- ---------- --------- ---------- ------------------
SMITH            7369 CLERK            800               9600
ALLEN            7499 SALESMAN        1600              19500
WARD             7521 SALESMAN        1250              15500
JONES            7566 MANAGER         2975              35700
MARTIN           7654 SALESMAN        1250              16400
BLAKE            7698 MANAGER         2850              34200
CLARK            7782 MANAGER         2450              29400
SCOTT            7788 ANALYST         3000              36000
KING             7839 PRESIDENT       5000              60000
TURNER           7844 SALESMAN        1500              18000
ADAMS            7876 CLERK           1100              13200
JAMES            7900 CLERK            950              11400
FORD             7902 ANALYST         3000              36000
MILLER           7934 CLERK           1300              15600

已选择14行。
6、查询为空和不为空的数据
(1)查询为空数据
SQL> select * from emp where comm is null;

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
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
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
7934 MILLER     CLERK           7782 23-1月 -82           1300                   10

已选择10行。
(2)查询不为空的数据
SQL> select * from emp where comm is not null;

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
7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0        30
7、连接符(||)和伪表(dual)
SQL> select 'hello' || 'world' from dual;

'HELLO'||'
----------
helloworld
8、删除重复行(distinct)
(1)修饰单个字段
SQL> select distinct deptno from dept;

DEPTNO
---------
10
20
30
40
(2)修饰多个字段:会显示多个字段中都不重复的记录
SQL> select distinct deptno,job from emp;

DEPTNO JOB
--------- ---------
20 CLERK
30 SALESMAN
20 MANAGER
30 CLERK
10 PRESIDENT
30 MANAGER
10 CLERK
10 MANAGER
20 ANALYST

已选择9行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: