Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24375
  • 博文数量: 11
  • 博客积分: 240
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 14:18
文章分类
文章存档

2011年(11)

我的朋友

分类: Oracle

2011-03-31 15:18:19

oracle 11g 007第2章 笔记
第一节、
1.retrieve all employees in department 90            -----------------在这样雇员表里查出 department=90的内容查出来。
SQL> select last_name,salary,department_id
  2  from employees
  3  where department_id=90;
 
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
King                        24000.00            90
Kochhar                     17000.00            90
De Haan                     17000.00            90
2.where condition                        ------------------介绍where子句表达式。
注意:在where子句后面不能用别名(alias).
在where子句使用字符串、和日期。
1)字符串表示:
SQL> select last_name,job_id,department_id
  2  from employees
  3  where last_name='Whalen';
 
LAST_NAME                 JOB_ID     DEPARTMENT_ID
------------------------- ---------- -------------
Whalen                    AD_ASST               10
注意:在字符串中是大小写敏感的。
 
2)日期表示:
SQL> select last_name,job_id,hire_date
  2  from employees
  3  where hire_date=to_date('1996/2/17','yyyy/mm/dd');
 
LAST_NAME                 JOB_ID     HIRE_DATE
------------------------- ---------- -----------
Hartstein                 MK_MAN     1996/2/17
3)如果想字符串中选择全部大写或小写可以用(UPPER、LOWER函数)
UPPER使用:
SQL> select last_name,job_id,salary
  2  from employees
  3  where upper(last_name)='WHALEN';
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
Whalen                    AD_ASST       4400.00
upper里的值全部替换成大写在跟WHALEN比较得出以上的值。
LOWER使用:
SQL> select last_name,job_id,salary
  2  from employees
  3  where lower(last_name)='whalen';
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
Whalen                    AD_ASST       4400.00
LOWER里的值全部替换成小写在跟whalen比较得出以上的值。
第二节
comparison operators 算式优先级分为
(= 、> 、 >= 、< 、<= 、<>)还有(Between。。。and)、IN(set)、like、is null
举个例子使用<=运算符计算:
SQL> select last_name,job_id,department_id
  2  from employees
  3  where department_id <=20;
 
LAST_NAME                 JOB_ID     DEPARTMENT_ID
------------------------- ---------- -------------
Whalen                    AD_ASST               10
Hartstein                 MK_MAN                20
Fay                       MK_REP                20
以上是列出部门号小于等于20之间的数据。
Between。。。and用法:
SQL> select last_name,job_id,salary
  2  from employees
  3  where salary between 2500 and 3500;
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
OConnell                  SH_CLERK      2600.00
Grant                     SH_CLERK      2600.00
Khoo                      PU_CLERK      3100.00
Baida                     PU_CLERK      2900.00
Tobias                    PU_CLERK      2800.00
Himuro                    PU_CLERK      2600.00
Colmenares                PU_CLERK      2500.00
Nayer                     ST_CLERK      3200.00
Mikkilineni               ST_CLERK      2700.00
Bissot                    ST_CLERK      3300.00
Atkinson                  ST_CLERK      2800.00
以上的结果是取工资2500到3500之间的内容;
IN(set)用法·:
SQL> select last_name,job_id,salary
  2  from employees
  3  where salary in (2600,3100,2800);
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
OConnell                  SH_CLERK      2600.00
Grant                     SH_CLERK      2600.00
Khoo                      PU_CLERK      3100.00
Tobias                    PU_CLERK      2800.00
Himuro                    PU_CLERK      2600.00
Atkinson                  ST_CLERK      2800.00
Davies                    ST_CLERK      3100.00
Matos                     ST_CLERK      2600.00
Fleaur                    SH_CLERK      3100.00
Geoni                     SH_CLERK      2800.00
Jones                     SH_CLERK      2800.00
Walsh                     SH_CLERK      3100.00
 
以上是IN的用法,IN是里面的值是一个集合。
如果在IN取字符串的值如下:
SQL> select last_name,job_id,salary
  2  from employees
  3  where job_id in ('SH_CLERK','ST_CLERK');
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
OConnell                  SH_CLERK      2600.00
Grant                     SH_CLERK      2600.00
Nayer                     ST_CLERK      3200.00
Mikkilineni               ST_CLERK      2700.00
Landry                    ST_CLERK      2400.00
Markle                    ST_CLERK      2200.00
Bissot                    ST_CLERK      3300.00

like是一个模糊的查询(pattern模式),like中的字符串是区分大小写的。使用如下:
SQL> select first_name,hire_date
  2  from employees
  3  where hire_date like '%96%';
 
FIRST_NAME           HIRE_DATE
-------------------- -----------
Michael              1996/2/17
Matthew              1996/7/18
Jason                1996/6/14
John                 1996/10/1
Janette              1996/1/30
Patrick              1996/3/4
Allan                1996/8/1
Ellen                1996/5/11
Nandita              1996/1/27
Sarah                1996/2/4
在like也可以是用‘-’这个代表是一个字符。使用如下:
SQL> select first_name,hire_date
  2  from employees
  3  where first_name like '_o%';
 
FIRST_NAME           HIRE_DATE
-------------------- -----------
Donald               1999/6/21
Douglas              2000/1/13
John                 1997/9/28
Jose Manuel          1998/3/7
Mozhe                1997/10/30
John                 1998/2/12
Joshua               1998/4/6
John                 1996/10/1
Louise               1997/12/15
Jonathon             1998/3/24
 
以上是输出first_name第2个字符带有o的雇员名字。

is null 空值表达式的用法:
SQL> select last_name,manager_id
  2  from employees
  3  where manager_id is null;
 
LAST_NAME                 MANAGER_ID
------------------------- ----------
King                     
 
举一反三取不属于Null的值如下:
SQL> select last_name,manager_id
  2  from employees
  3  where manager_id is not null;
 
LAST_NAME                 MANAGER_ID
------------------------- ----------
OConnell                         124
Grant                            124
Whalen                           101
Hartstein                        100
Fay                              201
Mavris                           101
Baer                             101
Higgins                          101
Gietz                            205
Kochhar                          100
De Haan                          100
第三节
逻辑运算符 and、or、not(not是最高级、其次and、or最低)
and 意思就是而且;
or 意思就是或者;
not 意思就是不属于。
我们来个and的例子:
SQL> select employee_id,last_name,job_id,salary
  2  from employees
  3  where salary >=10000 and job_id like '%MAN%';
 
EMPLOYEE_ID LAST_NAME                 JOB_ID         SALARY
----------- ------------------------- ---------- ----------
        201 Hartstein                 MK_MAN       13000.00
        114 Raphaely                  PU_MAN       11000.00
        145 Russell                   SA_MAN       14000.00
        146 Partners                  SA_MAN       13500.00
        147 Errazuriz                 SA_MAN       12000.00
        148 Cambrault                 SA_MAN       11000.00
        149 Zlotkey                   SA_MAN       10500.00
 
7 rows selected
以上的是取employees雇员表中工资大于等于10000而且JOB_ID(头衔)带有MAN的字符。
or的用法如下:
SQL> select employee_id,last_name,job_id,salary
  2  from employees
  3  where salary >=10000 or job_id like '%MAN%';
 
EMPLOYEE_ID LAST_NAME                 JOB_ID         SALARY
----------- ------------------------- ---------- ----------
        201 Hartstein                 MK_MAN       13000.00
        204 Baer                      PR_REP       10000.00
        205 Higgins                   AC_MGR       12000.00
        100 King                      AD_PRES      24000.00
        101 Kochhar                   AD_VP        17000.00
        102 De Haan                   AD_VP        17000.00
        108 Greenberg                 FI_MGR       12000.00
        114 Raphaely                  PU_MAN       11000.00
        120 Weiss                     ST_MAN        8000.00
        121 Fripp                     ST_MAN        8200.00
        122 Kaufling                  ST_MAN        7900.00
        123 Vollman                   ST_MAN        6500.00
        124 Mourgos                   ST_MAN        5800.00
        145 Russell                   SA_MAN       14000.00
        146 Partners                  SA_MAN       13500.00
        147 Errazuriz                 SA_MAN       12000.00
        148 Cambrault                 SA_MAN       11000.00
        149 Zlotkey                   SA_MAN       10500.00
        150 Tucker                    SA_REP       10000.00
        156 King                      SA_REP       10000.00
 
EMPLOYEE_ID LAST_NAME                 JOB_ID         SALARY
----------- ------------------------- ---------- ----------
        162 Vishney                   SA_REP       10500.00
        168 Ozer                      SA_REP       11500.00
        169 Bloom                     SA_REP       10000.00
        174 Abel                      SA_REP       11000.00
 
24 rows selected
这里的or的意思是取employees(雇员表)中工资大于等于10000或JOB_ID(头衔)带有MAN的值。
not的用法:
SQL> select last_name,job_id,salary
  2  from employees
  3  where job_id not in('IT_PROG','ST_CLERK','SA_REP');
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
OConnell                  SH_CLERK      2600.00
Grant                     SH_CLERK      2600.00
Whalen                    AD_ASST       4400.00
Hartstein                 MK_MAN       13000.00
Fay                       MK_REP        6000.00
Mavris                    HR_REP        6500.00
Baer                      PR_REP       10000.00
Higgins                   AC_MGR       12000.00
Gietz                     AC_ACCOUNT    8300.00
King                      AD_PRES      24000.00
Kochhar                   AD_VP        17000.00
De Haan                   AD_VP        17000.00
Greenberg                 FI_MGR       12000.00
Faviet                    FI_ACCOUNT    9000.00
Chen                      FI_ACCOUNT    8200.00
Sciarra                   FI_ACCOUNT    7700.00
Urman                     FI_ACCOUNT    7800.00
Popp                      FI_ACCOUNT    6900.00
Raphaely                  PU_MAN       11000.00
Khoo                      PU_CLERK      3100.00
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
Baida                     PU_CLERK      2900.00
Tobias                    PU_CLERK      2800.00
Himuro                    PU_CLERK      2600.00
Colmenares                PU_CLERK      2500.00
Weiss                     ST_MAN        8000.00
Fripp                     ST_MAN        8200.00
Kaufling                  ST_MAN        7900.00
Vollman                   ST_MAN        6500.00
Mourgos                   ST_MAN        5800.00
Russell                   SA_MAN       14000.00
Partners                  SA_MAN       13500.00
Errazuriz                 SA_MAN       12000.00
Cambrault                 SA_MAN       11000.00
Zlotkey                   SA_MAN       10500.00
Taylor                    SH_CLERK      3200.00
Fleaur                    SH_CLERK      3100.00
Sullivan                  SH_CLERK      2500.00
Geoni                     SH_CLERK      2800.00
Sarchand                  SH_CLERK      4200.00
Bull                      SH_CLERK      4100.00
Dellinger                 SH_CLERK      3400.00
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
Cabrio                    SH_CLERK      3000.00
Chung                     SH_CLERK      3800.00
Dilly                     SH_CLERK      3600.00
Gates                     SH_CLERK      2900.00
Perkins                   SH_CLERK      2500.00
Bell                      SH_CLERK      4000.00
Everett                   SH_CLERK      3900.00
McCain                    SH_CLERK      3200.00
Jones                     SH_CLERK      2800.00
Walsh                     SH_CLERK      3100.00
Feeney                    SH_CLERK      3000.00
 
52 rows selected
以上就是not的用法,意思是取employees(雇员表)中不属于'IT_PROG','ST_CLERK','SA_REP'(JOB_ID的头衔)列出来。
我们已经知道怎么用第一节和第二节讲到的用法,但是这样都要考虑到优先的,如果你要让“or”比“and”优先的话就得用(),比如如下:
 
SQL> select last_name,job_id,salary
  2  from employees
  3  where (job_id ='SA_REP' or job_id='AD_PRES')
  4  and salary >=10000;
 
LAST_NAME                 JOB_ID         SALARY
------------------------- ---------- ----------
King                      AD_PRES      24000.00
Tucker                    SA_REP       10000.00
King                      SA_REP       10000.00
Vishney                   SA_REP       10500.00
Ozer                      SA_REP       11500.00
Bloom                     SA_REP       10000.00
Abel                      SA_REP       11000.00
 
7 rows selected
以上的意思是说:取雇员表(employees)中的JOB_ID为'SA_REP'或'AD_PRES'的值,且在'SA_REP'或'AD_PRES'的值中大于等于10000的值。
第三节介绍:order by子句
order by 按照次序执行,但它分为升序和降序排列,默认情况是按照升序排列;
1.在select的表中order by 是放在最后的。比如以下例子:
SQL> select last_name,job_id,department_id
  2  from employees
  3  order by department_id desc;                       ------这里是按照(desc)降序排列
 
LAST_NAME                 JOB_ID     DEPARTMENT_ID
------------------------- ---------- -------------
Grant                     SA_REP    
Higgins                   AC_MGR               110
Gietz                     AC_ACCOUNT           110
Urman                     FI_ACCOUNT           100
Faviet                    FI_ACCOUNT           100
Chen                      FI_ACCOUNT           100
Popp                      FI_ACCOUNT           100
Greenberg                 FI_MGR               100
Sciarra                   FI_ACCOUNT           100
De Haan                   AD_VP                 90
Kochhar                   AD_VP                 90
King                      AD_PRES               90
Tuvault                   SA_REP                80
Livingston                SA_REP                80
Taylor                    SA_REP                80
Hutton                    SA_REP                80
Abel                      SA_REP                80
Kumar                     SA_REP                80
Russell                   SA_MAN                80
Partners                  SA_MAN                80
注意:order by 是可以引用别名的,但where子句中是不可以引用别名的。
2.order by 引用别名的例子如下:
SQL> select last_name,salary,salary+300 annsal
  2  from employees
  3  order by annsal asc;                             -------这里是按照(asc)升序排列
 
LAST_NAME                     SALARY     ANNSAL
------------------------- ---------- ----------
Olson                        2100.00       2400
Philtanker                   2200.00       2500
Markle                       2200.00       2500
Landry                       2400.00       2700
Gee                          2400.00       2700
Perkins                      2500.00       2800
Colmenares                   2500.00       2800
Patel                        2500.00       2800
Vargas                       2500.00       2800
Sullivan                     2500.00       2800
Marlow                       2500.00       2800
OConnell                     2600.00       2900
Grant                        2600.00       2900
Himuro                       2600.00       2900
Matos                        2600.00       2900
Mikkilineni                  2700.00       3000
Seo                          2700.00       3000
Tobias                       2800.00       3100
Geoni                        2800.00       3100
Atkinson                     2800.00       3100
3.order by 后面跟 1、2、3、。。。。意思是以3为例是说按照第3列进行排序。如果大家不明白的话请看下面例子:
SQL> select last_name,job_id,department_id
  2  from employees
  3  order by 3;                           -----3代表第3列默认按照升序进行排序
 
LAST_NAME                 JOB_ID     DEPARTMENT_ID
------------------------- ---------- -------------
Whalen                    AD_ASST               10
Hartstein                 MK_MAN                20
Fay                       MK_REP                20
Raphaely                  PU_MAN                30
Colmenares                PU_CLERK              30
Khoo                      PU_CLERK              30
Baida                     PU_CLERK              30
Tobias                    PU_CLERK              30
Himuro                    PU_CLERK              30
Mavris                    HR_REP                40
OConnell                  SH_CLERK              50
Grant                     SH_CLERK              50
Weiss                     ST_MAN                50
Fripp                     ST_MAN                50
Kaufling                  ST_MAN                50
Vollman                   ST_MAN                50
Mourgos                   ST_MAN                50
Nayer                     ST_CLERK              50
Mikkilineni               ST_CLERK              50
Landry                    ST_CLERK              50

第四节引用变量  substitution variable
1.引用变量是oracle 客户端做的事,oracle服务器只知道正确的值是多少。
2.变量符号式(&)和(&&)
3.变量符号可以在 where子句、order by子句、column(列)、table_name(表名)之中用到;来个例子如下:
SQL> select employee_id,salary,last_name,department_id
  2  from employees
  3  where employee_id = &employee_num;               -----&employee_num是一个变量;
 
输入 employee_num 的值:  100
原值    3: where employee_id = &employee_num
新值    3: where employee_id = 100
EMPLOYEE_ID     SALARY LAST_NAME                 DEPARTMENT_ID
----------- ---------- ------------------------- -------------
        100      24000 King                                 90
如果是字符串的话就要加 ''号 比如以下:
SQL> select last_name,salary,department_id
  2  from employees
  3  where last_name = &last_name;
输入 last_name 的值:  'Landry'
原值    3: where last_name = &last_name
新值    3: where last_name = 'Landry'                ----注意要加''号;
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Landry                          2400            50
(&&)用法跟(&)有一定的区别看例子如下:
SQL> select &&last_name,salary,department_id
  2  from employees
  3  where last_name = && last_name;
原值    1: select &&last_name,salary,department_id
新值    1: select 'Landry',salary,department_id
原值    3: where last_name = && last_name
新值    3: where last_name = 'Landry'
'LANDR     SALARY DEPARTMENT_ID
------ ---------- -------------
Landry       2400            50
两个(&&)就是会自动是替换不要手动输入两遍。
DEFINE 这个函数可以定义一个变量,如下例子:
SQL> define salary_num = 2600                      ---定义salary_num=2600
SQL> select last_name,salary,department_id
  2  from employees
  3  where salary = &salary_num;
&salary_num: 2600                            ---这个是因为可以显示出2600的值因为使用了 set verify on|off开关
 
LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
OConnell                     2600.00            50
Grant                        2600.00            50
Himuro                       2600.00            30
Matos                        2600.00            50
 
阅读(589) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:oracle 11g 007 sql 第3章 函数 笔记

给主人留下些什么吧!~~