oracle中select查询与空值

1、select查询

1.1 设置行间距

SYS@OCPLHR1> set linesize 200;

1.2 查询所有列

SYS@OCPLHR1> select * from scott.emp;

     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK	      7902 17-DEC-80	    800 		   20
      7499 ALLEN      SALESMAN	      7698 20-FEB-81	   1600        300	   30
      7521 WARD       SALESMAN	      7698 22-FEB-81	   1250        500	   30
      7566 JONES      MANAGER	      7839 02-APR-81	   2975 		   20
      7654 MARTIN     SALESMAN	      7698 28-SEP-81	   1250       1400	   30
      7698 BLAKE      MANAGER	      7839 01-MAY-81	   2850 		   30
      7782 CLARK      MANAGER	      7839 09-JUN-81	   2450 		   10
      7788 SCOTT      ANALYST	      7566 19-APR-87	   3000 		   20
      7839 KING       PRESIDENT 	   17-NOV-81	   5000 		   10
      7844 TURNER     SALESMAN	      7698 08-SEP-81	   1500 	 0	   30
      7876 ADAMS      CLERK	      7788 23-MAY-87	   1100 		   20
      7900 JAMES      CLERK	      7698 03-DEC-81	    950 		   30
      7902 FORD       ANALYST	      7566 03-DEC-81	   3000 		   20
      7934 MILLER     CLERK	      7782 23-JAN-82	   1300 		   10

14 rows selected.

1.3 查询某一列

SYS@OCPLHR1> select job from scott.emp;
JOB
---------
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

14 rows selected.

1.4 给表加别名

SYS@OCPLHR1> select a.empno,a.ename,a.* from scott.emp a;

     EMPNO ENAME	   EMPNO ENAME	    JOB 	     MGR HIREDATE	  SAL	    COMM     DEPTNO
---------- ---------- ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH	    7369 SMITH	    CLERK	    7902 17-DEC-80	  800			 20
      7499 ALLEN	    7499 ALLEN	    SALESMAN	    7698 20-FEB-81	 1600	     300	 30
      7521 WARD 	    7521 WARD	    SALESMAN	    7698 22-FEB-81	 1250	     500	 30
      7566 JONES	    7566 JONES	    MANAGER	    7839 02-APR-81	 2975			 20
      7654 MARTIN	    7654 MARTIN     SALESMAN	    7698 28-SEP-81	 1250	    1400	 30
      7698 BLAKE	    7698 BLAKE	    MANAGER	    7839 01-MAY-81	 2850			 30
      7782 CLARK	    7782 CLARK	    MANAGER	    7839 09-JUN-81	 2450			 10
      7788 SCOTT	    7788 SCOTT	    ANALYST	    7566 19-APR-87	 3000			 20
      7839 KING 	    7839 KING	    PRESIDENT		 17-NOV-81	 5000			 10
      7844 TURNER	    7844 TURNER     SALESMAN	    7698 08-SEP-81	 1500	       0	 30
      7876 ADAMS	    7876 ADAMS	    CLERK	    7788 23-MAY-87	 1100			 20
      7900 JAMES	    7900 JAMES	    CLERK	    7698 03-DEC-81	  950			 30
      7902 FORD 	    7902 FORD	    ANALYST	    7566 03-DEC-81	 3000			 20
      7934 MILLER	    7934 MILLER     CLERK	    7782 23-JAN-82	 1300			 10
14 rows selected.

1.5 算术表达式(加减乘除)

给empno表中的数据加1000

SYS@OCPLHR1> select empno+1000 from scott.emp;

EMPNO+1000
----------
      8369
      8499
      8521
      8566
      8654
      8698
      8782
      8788
      8839
      8844
      8876
      8900
      8902
      8934

14 rows selected.

1.6 升序与降序

默认是升序

SYS@OCPLHR1> select * from scott.emp order by comm asc;		##升序排序,空值最小
SYS@OCPLHR1> select * from scott.emp order by comm desc;	##降序排序,空值最大

1.7 列别名

列别名不能使用在where子句中,若要使用,则需要使用子查询多嵌套一层
别名中包含空格或特殊字符(#、&)或者大小写敏感,将别名放在英文双引号中

SYS@OCPLHR1> select sal,sal+2000 "new sal" from scott.emp;
       SAL    new sal
---------- ----------
       800	 2800
      1600	 3600
      1250	 3250
      2975	 4975
      1250	 3250
      2850	 4850
      2450	 4450
      3000	 5000
      5000	 7000
      1500	 3500
      1100	 3100
       950	 2950
      3000	 5000
      1300	 3300
14 rows selected.

1.8 连字运算符

连接几个列:||

SYS@OCPLHR1> select ename || ' sal is ' || sal name_sal from scott.emp;

NAME_SAL
----------------------------------------------------------
SMITH sal is 800
ALLEN sal is 1600
WARD sal is 1250
JONES sal is 2975
MARTIN sal is 1250
BLAKE sal is 2850
CLARK sal is 2450
SCOTT sal is 3000
KING sal is 5000
TURNER sal is 1500
ADAMS sal is 1100
JAMES sal is 950
FORD sal is 3000
MILLER sal is 1300

14 rows selected.

1.9 去重(distinct)

注意:

1.oracle对内容是区分大小写的,a与A是不同的
2.当distinct修饰多列时,将多列的内容同时作为一个对象去提交,只要有一方不同。就看做一行不同的记录
3.默认下,查询会返回所有的行,包括重复行
4.在select子句中使用关键字distinct删除重复行

练习

SYS@OCPLHR1> select distinct deptno from scott.emp;

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

SYS@OCPLHR1> select distinct deptno,comm from scott.emp;

    DEPTNO	 COMM
---------- ----------
	30
	30	    0
	30	  500
	20
	30	 1400
	10
	30	  300

7 rows selected.

2、空值

2.1 定义空值

空值和数值型的列或者常量进行计算的结果为空,但是可以和字符串类型的列和常量进行连接,连接后的结果不变

2.1.1 空值和任何数字计算都是空值

SYS@OCPLHR1> select 1+null from dual;
    1+NULL
----------

2.1.2 空值也可以用 ’ ’ 表示

SYS@OCPLHR1> select 3*'' from dual;
      3*''
----------

2.1.3 空值与字符串的连接

SYS@OCPLHR1> select 'hello'||'' from dual;

'HELL
-----
hello

2.1.4 判断空值是否为空

SYS@OCPLHR1> select * from scott.emp where mgr is null;	##只能使用is null或is not null。不能使用mgr=''来判断空值

     EMPNO ENAME      JOB	       MGR		 HIREDATE	    SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7839 KING       PRESIDENT 	   		17-NOV-81	   5000 		   10

下面这种方法是错误的,不能查询空值
 SYS@OCPLHR1> slect * from scott.emp where mgr='';

2.2 空值不参与求平均值

SYS@OCPLHR1> select sum(comm) from scott.emp;	##求和
 SUM(COMM)
----------
      2200

SYS@OCPLHR1> select avg(comm) from scott.emp;	##求平均值
 AVG(COMM)
----------
       550

SYS@OCPLHR1> select 2200/13 from scott.emp;	
   2200/13
----------
169.230769

SYS@OCPLHR1> select count(comm) from scott.emp;	##计数
COUNT(COMM)
-----------
	  4

SYS@OCPLHR1> select count(*) from scott.emp;
  COUNT(*)
----------
	14

SYS@OCPLHR1> select 2200/4 from scott.emp;
    2200/4
----------
       550

2.3 空值在子查询中必须保证不为空,否则会报错

SYS@OCPLHR1> select * from scott.emp a
  2  where a.comm not in
  3  (select b.comm from scott.emp b
  4  where b.sal in (800,1600)
  5  and b.comm is not null);

     EMPNO ENAME      JOB	       MGR HIREDATE	    SAL      		 COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7521 WARD       SALESMAN	      7698 22-FEB-81	   1250        500	   30
      7844 TURNER     SALESMAN	      7698 08-SEP-81	   1500 		 0	   30
      7654 MARTIN     SALESMAN	      7698 28-SEP-81	   1250       1400	   30
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值