本文谢绝转载原文来自http://990487026.blog.51cto.com

<大纲>数据库编程1 Oracle 过滤 函数 分组 外连接 自连接本文实验基于的数据表:winsows安装好Oracle11g之后,开始实验SQLplus 登陆 ORaclesqlplus 退出的方式查看用户之下有什么表查看表的所有记录,不区分大小写设置SQLplus行宽,页宽,列宽:清屏命令select as 语法1,as别名的使用2,没有引号带有空格的别名,无法识别:3,带有空格的别名解决办法:年收入抛出问题,年收入显示为空解决办法,nvl(a,b)函数1,NULL空值 任何数与NULL运算都是NULL2,空值不是空 null != null ed修改上一条命令:保存退出,/开始执行    where 过滤,查询奖金为空的员工: ||连接符,与虚表   dual虚表  DISTINCT 删除重复行  DISTINCT修饰多个字段时,当两个数据完全一样才认为是重复的    SQLplus工具的 help edit的帮助:    Oracle系统常用的参数   默认的时间显示 临时修改系统时间的显示方式:  where过滤字句 > 大于   where过滤字句between and    where过滤字句between A  and B,A 必须小于等于 B    where过滤字句 in    where过滤字句 not in    where过滤字句 not in 与null在一起,受影响   where like模糊查询,查询员工姓名S开头的信息:    where like模糊查询,查询员工姓名是4个字母  where like模糊查询,转义字符 where order by 工资排序,默认升序    where order by 别名   order by 遇到null1,任何表达式与null运算都为空2,null!=nullnulls last 把null放在最后   order修饰多个列,desc的作用范围只是最近的哪一个!   count函数字符函数大小写转换函数  LOWER   UPPER   INITCAP字符串连接:   concatsubstr(a,b) 从a中第b位开始取字符串  length 字符数lengthb 字节数instr求子串的位置lpad,rpad左填充右填充:trim去除前后指定字符:replace 字符串替换数字函数round 四舍五入tuec截断函数mod求余函数to_char格式化输出两个日期相减,返回日期之间相差的天数   精确显示员工入职月数,时间运算months_between   add_months()向指定的日期中加若干的月数   3,1隐式转换,字符串转日期  3,1显示转换,字符串转日期  字符串与字符串比较   to_char()对数字转字符 to_number()字符转数字    通用函数    nvl2(a,b,c)当a为null时返回c,否则返回bnullif(a,b)当a,b相等时返回NULL,否则返回a案例:总裁涨1000,经理涨800,其他涨500  方法1,SQL规范方法:方法2:Oracle专有方法组函数:  avg sum max min count 组函数与null在一起组函数会自动过滤空值:修正:分组数据:    求出各个部门的平均工资分组最难的地方: having 分组过滤:    求10号部门的平均工资的两种方法    1,先分组再过滤2,先过滤再分组SQL优化问题:    多表查询:   [等值连接],显示员工信息,员工号,姓名,月薪 [不等值连接]显示员工信息,员工号,姓名,月薪,薪水级别    多表查询4,求每个部门的人数:(需要分组)   [少了一个部门,这个方法有漏洞,因为40号部门没有员工]    [外连接]技术引出:  右外连接,+在等号的左边左外连接,+在等号的右边[难点]:[自连接]显示老板的信息:[优化显示][再优化][难点]:查询每个部门的人数   

[说明]本文实验基于以下数据表

dept表;
emp表;
salgrade表;
______________________________________________________________________________
SQL> select * from dept;DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------10 ACCOUNTING                   NEW YORK20 RESEARCH                     DALLAS30 SALES                        CHICAGO40 OPERATIONS                   BOSTON
______________________________________________________________________________SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 101 tom_abc                                                                 8000                    10已选择15行。
______________________________________________________________________________SQL> select * from salgrade;GRADE      LOSAL      HISAL
---------- ---------- ----------1        700       12002       1201       14003       1401       20004       2001       30005       3001       9999
______________________________________________________________________________

winsows安装好Oracle11g之后,

实验基于[OracleServiceORCL]后台服务进程的开启:

以超级用户方式登录:

C:\Users\VMware>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 8月 24 22:03:26 2016
Copyright (c) 1982, 2010, Oracle.  All rights reserved.SQL> connect /as sysdba
已连接。
SQL>

1,SQLplus 登陆 ORacle:

winsows安装好Oracle11g之后,修改scott的密码

C:\Users\VMware>sqlplus请输入用户名:  scott
输入口令:tiger
ERROR:
ORA-28001: the password has expired
更改 scott 的口令
新口令:
重新键入新口令:
口令已更改连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

输入账户和密码,直接登录

C:\Users\VMware>sqlplus scott/11SQL*Plus: Release 11.2.0.1.0 Production on 星期三 8月 24 22:00:50 2016Copyright (c) 1982, 2010, Oracle.  All rights reserved.连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>

sqlplus 退出的方式:

C:\Users\VMware>sqlplus scott/11
SQL> quit
SQL> exit

查看用户之下有什么表:

tab是关键字
C:\Users\VMware>sqlplus scott/11
SQL> select * from tab;TNAME                                                        TABTYPE
------------------------------------------------------------ --------------CLUSTERID
----------
BONUS                                                        TABLEDEPT                                                         TABLEEMP                                                          TABLETNAME                                                        TABTYPE
------------------------------------------------------------ --------------CLUSTERID
----------
SALGRADE                                                     TABLESQL>


查看表的所有记录,不区分大小写

SQL> select * from dept;DEPTNO DNAME                        LOC
---------- ---------------------------- --------------------------10 ACCOUNTING                   NEW YORK20 RESEARCH                     DALLAS30 SALES                        CHICAGO40 OPERATIONS                   BOSTONSQL>

查看表结构:

SQL> desc dept;名称                                      是否为空? 类型----------------------------------------- -------- ----------------------------DEPTNO                                    NOT NULL NUMBER(2)DNAME                                              VARCHAR2(14)LOC                                                VARCHAR2(13)SQL>

设置SQLplus行宽,页宽,列宽:

设置行宽前:
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------SAL       COMM     DEPTNO
---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80800                    207499 ALLEN                SALESMAN                 7698 20-2月 -811600        300         307521 WARD                 SALESMAN                 7698 22-2月 -811250        500         30EMPNO ENAME                JOB                       MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------SAL       COMM     DEPTNO
---------- ---------- ----------7566 JONES                MANAGER                  7839 02-4月 -812975                    20
设置行宽后:
SQL> set linesize 999;
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 20EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10已选择14行。SQL>      设置页宽:
SQL> set pagesize 999;
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10已选择14行。设置数字的列宽:
oracle 9代表占位:
SQL> set linesize 199;
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10已选择14行。SQL> col empno for 9999999999999999999
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
-------------------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         307566 JONES                MANAGER                  7839 02-4月 -81           2975                207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                307782 CLARK                MANAGER                  7839 09-6月 -81           2450                107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                207839 KING                 PRESIDENT                     17-11月-81           5000                107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         307876 ADAMS                CLERK                    7788 23-5月 -87           1100                207900 JAMES                CLERK                    7698 03-12月-81            950                307902 FORD                 ANALYST                  7566 03-12月-81           3000                207934 MILLER               CLERK                    7782 23-1月 -82           1300                10已选择14行。设置字符的列宽:60个字符的宽度
SQL> col ename for a60;
SQL> select * from emp;EMPNO ENAME                                                        JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
-------------------- ------------------------------------------------------------ ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                                                        CLERK                    7902 17-12月-80            800                    207499 ALLEN                                                        SALESMAN                 7698 20-2月 -81           1600        300         307521 WARD                                                         SALESMAN                 7698 22-2月 -81           1250        500         307566 JONES                                                        MANAGER                  7839 02-4月 -81           2975                    207654 MARTIN                                                       SALESMAN                 7698 28-9月 -81           1250       1400         307698 BLAKE                                                        MANAGER                  7839 01-5月 -81           2850                    307782 CLARK                                                        MANAGER                  7839 09-6月 -81           2450                    107788 SCOTT                                                        ANALYST                  7566 19-4月 -87           3000                    207839 KING                                                         PRESIDENT                 17-11月-81       5000                    107844 TURNER                                                       SALESMAN                 7698 08-9月 -81           1500          0         307876 ADAMS                                                        CLERK                    7788 23-5月 -87           1100                    207900 JAMES                                                        CLERK                    7698 03-12月-81            950                    307902 FORD                                                         ANALYST                  7566 03-12月-81           3000                    207934 MILLER                                                       CLERK                    7782 23-1月 -82           1300                    10已选择14行。恢复,便于后面做实验:
SQL> col ename for a20;
SQL> col empno for 999999
SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10已选择14行。

清屏命令:

SQL> host cls

select 语法:

select 参与运算语法:

SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      307521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      307566 JONES                MANAGER                  7839 02-4月 -81           2975                 207654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400      307698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0      307876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10
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

select as 语法

as 可以省略
冒号可以省略
别名之间不能有空格1,as别名的使用
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行。

2,没有引号带有空格的别名,无法识别:

SQL> select ename as "员工编号", empno "编号", job 工作 , sal 月 薪 , sal*12 年薪  from emp;
select ename as "员工编号", empno "编号", job 工作 , sal 月 薪 , sal*12 年薪  from emp*
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字

3,带有空格的别名解决办法:

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行。

年收入抛出问题,年收入显示为空

SQL> select ename as "员工编号", empno "编号", job 工作 , sal "月  薪" , sal*12+comm 年收入  from emp;员工编号                   编号 工作                   月  薪     年收入
-------------------- ---------- ------------------ ---------- ----------
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



1,NULL空值 任何数与NULL运算都是NULL

2,空值不是空 null != null


解决办法,nvl(a,b)函数,当a是null是返回b,b可以是数字/字符串

SQL> select ename,empno, job, sal, nvl(sal*12+comm,0) from emp;ENAME                     EMPNO JOB                       SAL NVL(SAL*12+COMM,0)
-------------------- ---------- ------------------ ---------- ------------------
SMITH                      7369 CLERK                     800                  0
ALLEN                      7499 SALESMAN                 1600              19500
WARD                       7521 SALESMAN                 1250              15500
JONES                      7566 MANAGER                  2975                  0
MARTIN                     7654 SALESMAN                 1250              16400
BLAKE                      7698 MANAGER                  2850                  0
CLARK                      7782 MANAGER                  2450                  0
SCOTT                      7788 ANALYST                  3000                  0
KING                       7839 PRESIDENT                5000                  0
TURNER                     7844 SALESMAN                 1500              18000
ADAMS                      7876 CLERK                    1100                  0
JAMES                      7900 CLERK                     950                  0
FORD                       7902 ANALYST                  3000                  0
MILLER                     7934 CLERK                    1300                  0已选择14行。SQL> select ename,empno, job, sal, nvl(sal*12+comm,0) "年收入" from emp;ENAME                     EMPNO JOB                       SAL     年收入
-------------------- ---------- ------------------ ---------- ----------
SMITH                      7369 CLERK                     800          0
ALLEN                      7499 SALESMAN                 1600      19500
WARD                       7521 SALESMAN                 1250      15500
JONES                      7566 MANAGER                  2975          0
MARTIN                     7654 SALESMAN                 1250      16400
BLAKE                      7698 MANAGER                  2850          0
CLARK                      7782 MANAGER                  2450          0
SCOTT                      7788 ANALYST                  3000          0
KING                       7839 PRESIDENT                5000          0
TURNER                     7844 SALESMAN                 1500      18000
ADAMS                      7876 CLERK                    1100          0
JAMES                      7900 CLERK                     950          0
FORD                       7902 ANALYST                  3000          0
MILLER                     7934 CLERK                    1300          0已选择14行。SQL> select ename,empno, job, sal, nvl(sal*12+comm,0)as  "年收入" from emp;ENAME                     EMPNO JOB                       SAL     年收入
-------------------- ---------- ------------------ ---------- ----------
SMITH                      7369 CLERK                     800          0
ALLEN                      7499 SALESMAN                 1600      19500
WARD                       7521 SALESMAN                 1250      15500
JONES                      7566 MANAGER                  2975          0
MARTIN                     7654 SALESMAN                 1250      16400
BLAKE                      7698 MANAGER                  2850          0
CLARK                      7782 MANAGER                  2450          0
SCOTT                      7788 ANALYST                  3000          0
KING                       7839 PRESIDENT                5000          0
TURNER                     7844 SALESMAN                 1500      18000
ADAMS                      7876 CLERK                    1100          0
JAMES                      7900 CLERK                     950          0
FORD                       7902 ANALYST                  3000          0
MILLER                     7934 CLERK                    1300          0已选择14行。

ed修改上一条命令:保存退出,/开始执行

SQL> ed
已写入 file afiedt.buf1* select ename,empno, job, sal, nvl(sal*12+comm,0)as  "年 入" from emp
SQL> /ENAME                     EMPNO JOB                       SAL      年 入
-------------------- ---------- ------------------ ---------- ----------
SMITH                      7369 CLERK                     800          0
ALLEN                      7499 SALESMAN                 1600      19500
WARD                       7521 SALESMAN                 1250      15500
JONES                      7566 MANAGER                  2975          0
MARTIN                     7654 SALESMAN                 1250      16400
BLAKE                      7698 MANAGER                  2850          0
CLARK                      7782 MANAGER                  2450          0
SCOTT                      7788 ANALYST                  3000          0
KING                       7839 PRESIDENT                5000          0
TURNER                     7844 SALESMAN                 1500      18000
ADAMS                      7876 CLERK                    1100          0
JAMES                      7900 CLERK                     950          0
FORD                       7902 ANALYST                  3000          0
MILLER                     7934 CLERK                    1300          0已选择14行。

where 过滤,查询奖金为空的员工:

SQL> select * from emp where comm is null;EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 17-12月-80            800                 207566 JONES                MANAGER                  7839 02-4月 -81           2975                 207698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 307782 CLARK                MANAGER                  7839 09-6月 -81           2450                 107788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 207839 KING                 PRESIDENT                     17-11月-81           5000                 107876 ADAMS                CLERK                    7788 23-5月 -87           1100                 207900 JAMES                CLERK                    7698 03-12月-81            950                 307902 FORD                 ANALYST                  7566 03-12月-81           3000                 207934 MILLER               CLERK                    7782 23-1月 -82           1300                 10已选择10行。

||连接符,与虚表

SQL> select 'Hello ' || 'World' from emp;'HELLO'||'WORLD'
----------------------
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World已选择14行。


dual虚表:

SQL> select 'Hello ' || 'World' from dual;'HELLO'||'WORLD'
----------------------
Hello World

利用伪表,显示系统时间

SQL> select sysdate from dual;SYSDATE
--------------
25-8月 -16

DISTINCT 删除重复行,显示部门个数:

SQL> select DISTINCT deptno from emp;DEPTNO
----------302010


DISTINCT修饰多个字段时,当两个数据完全一样才认为是重复的

SQL> select deptno,job from emp;DEPTNO JOB
---------- ------------------20 CLERK30 SALESMAN30 SALESMAN20 MANAGER30 SALESMAN30 MANAGER10 MANAGER20 ANALYST10 PRESIDENT30 SALESMAN20 CLERK30 CLERK20 ANALYST10 CLERK已选择14行。SQL> select DISTINCT deptno,job from emp;DEPTNO JOB
---------- ------------------20 CLERK30 SALESMAN20 MANAGER30 CLERK10 PRESIDENT30 MANAGER10 CLERK10 MANAGER20 ANALYST已选择9行。

SQLplus工具的 help

SQL> help topicHelp is available on the following topics:/
@
@@
ACCEPT
APPEND
ARCHIVE LOG
ATTRIBUTE
BREAK
BTITLE
CHANGE
CLEAR
COLUMN
COMPUTE
CONNECT
COPY
DEFINE
DEL
DESCRIBE
DISCONNECT
EDIT
EXECUTE
EXIT
GET
HELP
HOST
INDEX
INPUT
LIST
MENU
PASSWORD
PAUSE
PRINT
PROMPT
QUIT
RECOVER
REMARK
REPFOOTER
REPHEADER
RESERVED WORDS (PL/SQL)
RESERVED WORDS (SQL)
RUN
SAVE
SET
SHOW
SHUTDOWN
SPOOL
SQLPLUS
START
STARTUP
STORE
TIMING
TOPICS
TTITLE
UNDEFINE
VARIABLE
WHENEVER OSERROR
WHENEVER SQLERROR
XQUERYSQL>


edit的帮助:

SQL> ? editEDIT----Invokes an operating system text editor on the contents of thespecified file or on the contents of the SQL buffer. The bufferhas no command history list and does not record SQL*Plus commands.ED[IT] [file_name[.ext]]SQL>

Oracle系统常用的参数

SQL> set pagesize 299
SQL> set linesize 299
SQL> select * from v$nls_parameters;PARAMETER                         VALUE
----------------------------- -----------
NLS_LANGUAGE                      SIMPLIFIED CHINESE
NLS_TERRITORY                     CHINA
NLS_CURRENCY                      ¥
NLS_ISO_CURRENCY                  CHINA
NLS_NUMERIC_CHARACTERS            .,
NLS_CALENDAR                      GREGORIAN
NLS_DATE_FORMAT                   DD-MON-RR
NLS_DATE_LANGUAGE                 SIMPLIFIED CHINESE
NLS_CHARACTERSET                  AL32UTF8
NLS_SORT                          BINARY
NLS_TIME_FORMAT                   HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT              DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT                HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT           DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY                 ¥
NLS_NCHAR_CHARACTERSET            AL16UTF16
NLS_COMP                          BINARY
NLS_LENGTH_SEMANTICS              BYTE
NLS_NCHAR_CONV_EXCP               FALSE已选择19行。


默认的时间显示

SQL> select sysdate from dual;SYSDATE
--------------
25-8月 -16


临时修改系统时间的显示方式:

SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';会话已更改。SQL> select sysdate from dual;SYSDATE
----------
2016-08-25SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207499 ALLEN                SALESMAN                 7698 1981-02-20       1600        300         307521 WARD                 SALESMAN                 7698 1981-02-22       1250        500         307566 JONES                MANAGER                  7839 1981-04-02       2975                    207654 MARTIN               SALESMAN                 7698 1981-09-28       1250       1400         307698 BLAKE                MANAGER                  7839 1981-05-01       2850                    307782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107844 TURNER               SALESMAN                 7698 1981-09-08       1500          0         307876 ADAMS                CLERK                    7788 1987-05-23       1100                    207900 JAMES                CLERK                    7698 1981-12-03        950                    307902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择14行。

where过滤字句 > 大于:

查询入职比80年1月1号晚的员工:日期格式是敏感的

SQL> select * from emp where hiredate > '1980-01-01';EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207499 ALLEN                SALESMAN                 7698 1981-02-20       1600        300         307521 WARD                 SALESMAN                 7698 1981-02-22       1250        500         307566 JONES                MANAGER                  7839 1981-04-02       2975                    207654 MARTIN               SALESMAN                 7698 1981-09-28       1250       1400         307698 BLAKE                MANAGER                  7839 1981-05-01       2850                    307782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107844 TURNER               SALESMAN                 7698 1981-09-08       1500          0         307876 ADAMS                CLERK                    7788 1987-05-23       1100                    207900 JAMES                CLERK                    7698 1981-12-03        950                    307902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择14行。

where过滤字句between and,查询工资在1000 ~ 2000之间的

SQL> select * from emp where sal between 1000 and 2000;EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7499 ALLEN                SALESMAN                 7698 1981-02-20       1600        300         307521 WARD                 SALESMAN                 7698 1981-02-22       1250        500         307654 MARTIN               SALESMAN                 7698 1981-09-28       1250       1400         307844 TURNER               SALESMAN                 7698 1981-09-08       1500          0         307876 ADAMS                CLERK                    7788 1987-05-23       1100                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择6行。

where过滤字句between A  and B,A 必须小于等于 B

SQL> select * from emp where sal between 9000 and 200;未选定行SQL>

where过滤字句 and

SQL> select * from emp where sal <=9000 and sal > 2000;EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7566 JONES                MANAGER                  7839 1981-04-02       2975                    207698 BLAKE                MANAGER                  7839 1981-05-01       2850                    307782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107902 FORD                 ANALYST                  7566 1981-12-03       3000                    20已选择6行。


where过滤字句 in

SQL> select * from emp where deptno in (10,20);EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207566 JONES                MANAGER                  7839 1981-04-02       2975                    207782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107876 ADAMS                CLERK                    7788 1987-05-23       1100                    207902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择8行。

where过滤字句 not in

SQL> select * from emp where deptno not in (10,20);EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7499 ALLEN                SALESMAN                 7698 1981-02-20       1600        300         307521 WARD                 SALESMAN                 7698 1981-02-22       1250        500         307654 MARTIN               SALESMAN                 7698 1981-09-28       1250       1400         307698 BLAKE                MANAGER                  7839 1981-05-01       2850                    307844 TURNER               SALESMAN                 7698 1981-09-08       1500          0         307900 JAMES                CLERK                    7698 1981-12-03        950                    30已选择6行。

where过滤字句 not in 与null在一起,受影响

SQL> select * from emp where deptno in (10,20);EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207566 JONES                MANAGER                  7839 1981-04-02       2975                    207782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107876 ADAMS                CLERK                    7788 1987-05-23       1100                    207902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择8行。SQL> select * from emp where deptno in (10,20,null);EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207566 JONES                MANAGER                  7839 1981-04-02       2975                    207782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107876 ADAMS                CLERK                    7788 1987-05-23       1100                    207902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择8行。SQL> select * from emp where deptno not in (10,20,null);未选定行

where like模糊查询,查询员工姓名S开头的信息:

SQL> select * from emp;EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207499 ALLEN                SALESMAN                 7698 1981-02-20       1600        300         307521 WARD                 SALESMAN                 7698 1981-02-22       1250        500         307566 JONES                MANAGER                  7839 1981-04-02       2975                    207654 MARTIN               SALESMAN                 7698 1981-09-28       1250       1400         307698 BLAKE                MANAGER                  7839 1981-05-01       2850                    307782 CLARK                MANAGER                  7839 1981-06-09       2450                    107788 SCOTT                ANALYST                  7566 1987-04-19       3000                    207839 KING                 PRESIDENT                     1981-11-17       5000                    107844 TURNER               SALESMAN                 7698 1981-09-08       1500          0         307876 ADAMS                CLERK                    7788 1987-05-23       1100                    207900 JAMES                CLERK                    7698 1981-12-03        950                    307902 FORD                 ANALYST                  7566 1981-12-03       3000                    207934 MILLER               CLERK                    7782 1982-01-23       1300                    10已选择14行。SQL> select * from emp where ename like 'S%';EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------7369 SMITH                CLERK                    7902 1980-12-17        800                    207788 SCOTT                ANALYST                  7566 1987-04-19       3000                    20

转载于:https://blog.51cto.com/990487026/1843080

数据库编程1 Oracle 过滤 函数 分组 外连接 自连接相关推荐

  1. Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)

    Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+) 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大 ...

  2. 非等值连接,外连接,自连接,子查询

    非等值连接,外连接,自连接,子查询 非等值连接: select empno,ename,sal,grade from emp,salgrade where sal between salgrade.l ...

  3. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

  4. win7如何配置远程连接oracle数据库,没装oracle win764位安装plsql 连接远程数据库服务器...

    oracle 数据库太重,如果我们只需要连接到远程数据库服务器,那么我们只需要安装plsql客户端,它轻便,步骤如下: 1.下载32位的oracle客户端  http://pan.baidu.com/ ...

  5. MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union

    接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...

  6. oracle10数据库链接失败,oracle 10g Enterprise Manager 无法连接到数据库实例分析

    1 问题描述 客户端通过IE 浏览器登陆oracle 10g em console时不能显示登陆界面,页面显示"Enterprise Manager 无法连接到数据库实例.下面列出组件状态& ...

  7. python数据库编程:Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    本文实例讲述了Python基于Pymssql模块实现连接SQL Server数据库的方法.分享给大家供大家参考,具体如下: 数据库版本:SQL Server 2012. 按照Python版本来选择下载 ...

  8. Oracle→分组函数、GROUP BY、HAVING、多表查询、连接、外连接、自连接、子查询单行多行、ROWNUM、ANY、ALL、NOT IN(...IS NOT NULL)、条件求和、DUAL

    分组函数 GROUP BY HAVING GROUP BY ROLLUP() 多表查询 等值连接 不等值连接 外连接 自连接 层次查询 子查询 子查询伪劣ROWNUM ROWID NOT IN(-IS ...

  9. Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

    Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...

最新文章

  1. ionic 获取input的值
  2. leetcode13. 罗马数字转整数
  3. Redis 过期策略与源码分析
  4. VSCODE 一键编译运行
  5. Npm安装node-sass包依赖时报错 Cannot download “https://github.com/sass/node-sass/releases/download
  6. layui 日期范围选择器_UI设计素材模板|完美日期选择器
  7. 【个人笔记】OpenCV4 C++ 快速入门 11课
  8. win10下安装Mysql5.7
  9. SpringBoot @Condition 注解
  10. Java模拟http上传文件请求(HttpURLConnection,HttpClient4.4,RestTemplate)
  11. 热血传说复古传奇老显示服务器维护,《复古传奇之热血传说》新系列地图,新的装备即将出现...
  12. tp5 html页面使用if else,tp5.0和tp3.2中前台模板IF标签和FOREACH的区别
  13. 微信公众号之微信退款
  14. 使用n2n实现内网访问
  15. angular使用jqwidgets注意事项
  16. 平面设计中的简约设计到底指什么?
  17. 【Uinty3d】常用API
  18. Programmer-如何从菜鸟变成老鸟?
  19. 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——02
  20. Unity变换矩阵之如何构建变换矩阵

热门文章

  1. Redis(四):Spring + JedisCluster操作Redis(集群)
  2. C#令人迷惑的DateTime:世界标准时间还是本地时间?
  3. Linux基础系列:常用命令(5)_samba服务与nginx服务
  4. Java 1.8 HashMap源码探究
  5. 洛谷P1198 [JSOI2008]最大数
  6. 基于Hbase的用户评分协同过滤推荐算法
  7. baidu的服务器数据里面装的都是垃圾!
  8. C语言面试高频问题:自己代码实现字符串相关的常用API
  9. 全国计算机等级考试题库二级C操作题100套(第27套)
  10. 前端 js 非控件 使用标签打印机 打印二维码和文本_青岛Web前端(HTML5)面试题分享...