欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle之sql查詢二

此文章為http://huangsir007.blog.51cto.com/6159353/1854818該片的后續(xù)

成都創(chuàng)新互聯(lián)自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開(kāi)發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開(kāi)發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

關(guān)于數(shù)據(jù)庫(kù)語(yǔ)言查詢:

SQL> show parameter nls_language;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

nls_language                         string      AMERICAN       支持的是AMERICAN

SQL> select * from nls_session_parameters where parameter='NLS_LANGUAGE';

PARAMETER

--------------------------------------------------------------------------------

VALUE

--------------------------------------------------------------------------------

NLS_LANGUAGE

AMERICAN

還有一種時(shí)間語(yǔ)言:

SQL> show parameter nls_date_language;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

nls_date_language                    string

SQL> select * from nls_session_parameters where parameter='NLS_DATE_LANGUAGE';

PARAMETER

--------------------------------------------------------------------------------

VALUE

--------------------------------------------------------------------------------

NLS_DATE_LANGUAGE

AMERICAN             時(shí)間語(yǔ)言也是AMERICAN,所以這種1-1月-1982不允許的,月份必須是英文

否則會(huì)亂碼

關(guān)于時(shí)間的格式查詢:

SQL> select * from nls_session_parameters where parameter='NLS_DATE_FORMAT';       這是默認(rèn)的時(shí)間格式

PARAMETER

--------------------------------------------------------------------------------

VALUE

--------------------------------------------------------------------------------

NLS_DATE_FORMAT

DD-MON-RR                        這是默認(rèn)的時(shí)間格式DD-MON-RR

SQL> show parameter nls_date_format;        這種方式查不出來(lái)就用上面的方式

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

nls_date_format                      string

查看當(dāng)前時(shí)間格式

SQL> select * from student;

        XH XM                             SEX BIRTHDAY     CLASSID

---------- ------------------------------ --- --------- ----------

         1 ??????                         F   09-JUL-16          1

         2 xiaobai                        F   06-SEP-16          2

         3 xiaohua                        F                      2

然后臨時(shí)修改當(dāng)前會(huì)話的時(shí)間格式(修改的是當(dāng)前session會(huì)話的,關(guān)掉后將失去更改,修改之后才能yyyy-mm-dd格式)

SQL> alter session set nls_date_format='yyyy-mm-dd';

Session altered.

修改后再次查詢,如下

SQL> select * from student;

        XH XM                             SEX BIRTHDAY      CLASSID

---------- ------------------------------ --- ---------- ----------

         1 ??????                         F   2016-07-09          1

         2 xiaobai                        F   2016-09-06          2

         3 xiaohua                        F                       2

這樣時(shí)間格式的錯(cuò)誤之后遇到就好解決了

根據(jù)hiredate:入職時(shí)間; 受雇日期;做判斷來(lái)查詢

SQL> select ename,HIREDATE from emp where HIREDATE>'1982-1-1';  以此時(shí)間入職之后的雇員

ENAME      HIREDATE

---------- ----------

SCOTT      1987-04-19

ADAMS      1987-05-23

MILLER     1982-01-23

根據(jù)薪水的某個(gè)區(qū)間做查詢

SQL> select ename,sal from emp where sal>2000 and sal<5000;

ENAME             SAL

---------- ----------

JONES            2975

BLAKE            2850

CLARK            2450

SCOTT            3000

FORD             3000

關(guān)鍵字like,做匹配查詢

查詢手寫字母為S的雇員

SQL> select ename from emp where ename like 'S%';

ENAME

----------

SMITH

SCOTT

選出第三個(gè)字母為大寫O的雇員(下劃線為匹配任一個(gè),%匹配任意個(gè))

SQL> select ename from emp where ename like '__O%';

ENAME

----------

SCOTT

關(guān)鍵字in

查詢雇員號(hào)在某個(gè)區(qū)間

SQL> select empno,ename from emp where empno in (7900,7934);

     EMPNO ENAME

---------- ----------

      7900 JAMES

      7934 MILLER

以順序查詢,關(guān)鍵字order by(默認(rèn)為升序asc,降序?yàn)閐esc)

SQL> select ename,sal from emp order by sal;

ENAME             SAL

---------- ----------

SMITH             800

JAMES             950

ADAMS            1100

WARD             1250

MARTIN           1250

MILLER           1300

TURNER           1500

ALLEN            1600

CLARK            2450

BLAKE            2850

JONES            2975

SCOTT            3000

FORD             3000

KING             5000

按照雇員年薪進(jìn)行排序

SQL> select ename,sal*12 nianxin from emp order by nianxin(asc|desc);  別名的作用

ENAME         NIANXIN

---------- ----------

SMITH            9600

JAMES           11400

ADAMS           13200

WARD            15000

MARTIN          15000

MILLER          15600

TURNER          18000

ALLEN           19200

CLARK           29400

BLAKE           34200

JONES           35700

SCOTT           36000

FORD            36000

KING            60000

對(duì)同一個(gè)部門sal進(jìn)行降序,對(duì)部門號(hào)進(jìn)行升序

SQL> select ename,sal,deptno from emp order by sal desc,deptno;

ENAME             SAL     DEPTNO

---------- ---------- ----------

KING             5000         10

FORD             3000         20

SCOTT            3000         20

JONES            2975         20

BLAKE            2850         30

CLARK            2450         10

ALLEN            1600         30

TURNER           1500         30

MILLER           1300         10

WARD             1250         30

MARTIN           1250         30

ADAMS            1100         20

JAMES             950         30

SMITH             800         20

查詢最大值,最小值,平均值,關(guān)鍵字為max,min,avg

SQL> select max(sal),min(sal),avg(sal) from emp;

  MAX(SAL)   MIN(SAL)   AVG(SAL)

---------- ---------- ----------

      5000        800 2073.21429

查找出sal最大值的員工,先查詢出sal的最大值,然后使sal=sal的最大值做判斷查詢

SQL> select ename,sal from emp where sal=(select max(sal) from emp);

ENAME             SAL

---------- ----------

KING             5000

查詢出高出平均工資得雇員

1、先找出平均工資是多少?

SQL> select avg(sal) from emp;

  AVG(SAL)

----------

2073.21429

2、然后查詢sal與平均工資作比較

SQL> select ename,sal from emp where sal>(select avg(sal) from emp);

ENAME             SAL

---------- ----------

JONES            2975

BLAKE            2850

CLARK            2450

SCOTT            3000

KING             5000

FORD             3000

分組查詢每個(gè)部門的最大sal和最小sal,關(guān)鍵字group by

SQL> select max(sal),min(sal),deptno from emp group by deptno;

  MAX(SAL)   MIN(SAL)     DEPTNO

---------- ---------- ----------

      2850        950         30

      3000        800         20

      5000       1300         10

找出最大sal大于3000的部門號(hào),關(guān)鍵字having 某字段 做判斷

SQL> select max(sal),min(sal),deptno from emp group by deptno having max(sal)>3000;

  MAX(SAL)   MIN(SAL)     DEPTNO

---------- ---------- ----------

      5000       1300         10

1、分組函數(shù)只能出現(xiàn)在選擇列,having、order by字句中

2、如果在select語(yǔ)句中同時(shí)包含group by,having,order by那么他們的順序是group by,having,order by

3、在選擇列中如果有列、表達(dá)式和分組函數(shù),那么這些列和表達(dá)式必須有一個(gè)出現(xiàn)在group by字句中,否則就會(huì)出錯(cuò)

SQL> select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)>2000 order by avg(sal);

DEPTNO   AVG(SAL)   MAX(SAL)

------ ---------- ----------

    20       2175       3000

    10 2916.66666       5000

多表結(jié)合查詢

按照相同字段deptno查詢 如不按照這也條件就是14*4=56條記錄

SQL> select e.ename,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno;

ENAME      DNAME              DEPTNO

---------- -------------- ----------

CLARK      ACCOUNTING             10

KING       ACCOUNTING             10

MILLER     ACCOUNTING             10

JONES      RESEARCH               20

FORD       RESEARCH               20

ADAMS      RESEARCH               20

SMITH      RESEARCH               20

SCOTT      RESEARCH               20

WARD       SALES                  30

TURNER     SALES                  30

ALLEN      SALES                  30

JAMES      SALES                  30

BLAKE      SALES                  30

MARTIN     SALES                  30

查詢出部門號(hào)為10的員工名和薪水,以及所在部門(dname)

SQL> select e.ename,e.ename,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno=10;

select e.ename,e.ename,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno=10

                                                                                 *

ERROR at line 1:

ORA-00933: SQL command not properly ended

這樣的組合e.deptno=d.deptno=10是不被允許的,正確如下:

SQL> select e.ename,e.sal,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno and d.deptno=10;

ENAME             SAL DNAME              DEPTNO

---------- ---------- -------------- ----------

CLARK            2450 ACCOUNTING             10

KING             5000 ACCOUNTING             10

MILLER           1300 ACCOUNTING             10

表salgrade是薪水級(jí)別,如下:

SQL> select * from salgrade;

     GRADE      LOSAL      HISAL

---------- ---------- ----------

         1        700       1200      區(qū)間700-1200之間的薪水等級(jí)

         2       1201       1400

         3       1401       2000

         4       2001       3000

         5       3001       9999

查詢員工名及工資,以及工資所在的等級(jí),關(guān)鍵字between and

SQL> select e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

ENAME             SAL      GRADE

---------- ---------- ----------

SMITH             800          1

JAMES             950          1

ADAMS            1100          1

WARD             1250          2

MARTIN           1250          2

MILLER           1300          2

TURNER           1500          3

ALLEN            1600          3

CLARK            2450          4

BLAKE            2850          4

JONES            2975          4

SCOTT            3000          4

FORD             3000          4

KING             5000          5

多表查詢結(jié)合order by關(guān)鍵字

按照部門號(hào)排序查詢員工名,薪水,部門號(hào)以及所在部門

SQL> select e.ename,e.sal,d.dname,d.deptno from emp e,dept d where e.deptno=d.deptno order by d.deptno;

ENAME             SAL DNAME              DEPTNO

---------- ---------- -------------- ----------

CLARK            2450 ACCOUNTING             10

KING             5000 ACCOUNTING             10

MILLER           1300 ACCOUNTING             10

JONES            2975 RESEARCH               20

FORD             3000 RESEARCH               20

ADAMS            1100 RESEARCH               20

SMITH             800 RESEARCH               20

SCOTT            3000 RESEARCH               20

WARD             1250 SALES                  30

TURNER           1500 SALES                  30

ALLEN            1600 SALES                  30

JAMES             950 SALES                  30

BLAKE            2850 SALES                  30

MARTIN           1250 SALES                  30

找出emp表中,員工的各個(gè)上級(jí)員工名(一個(gè)表中的不同查詢)

SQL> select e.ename,m.ename from emp e,emp m where e.mgr=m.empno; 判斷條件是員工上級(jí)號(hào)等于員工號(hào),左邊是員工,右邊是員工對(duì)應(yīng)的上級(jí)號(hào)

ENAME      ENAME

---------- ----------

FORD       JONES

SCOTT      JONES

TURNER     BLAKE

ALLEN      BLAKE

WARD       BLAKE

JAMES      BLAKE

MARTIN     BLAKE

MILLER     CLARK

ADAMS      SCOTT

BLAKE      KING

JONES      KING

CLARK      KING

SMITH      FORD

查出某一個(gè)員工的上級(jí)

SQL> select e.ename,m.ename from emp e,emp m where e.mgr=m.empno and e.ename='WARD';

ENAME      ENAME

---------- ----------

WARD       BLAKE

子查詢

查出和Smith相同部門的員工,當(dāng)查出來(lái)的結(jié)果是當(dāng)行字句時(shí),選擇等于號(hào)=

1、線找出smith員工所在的部門號(hào)

SQL> select deptno from emp where ename='SMITH';

    DEPTNO

----------

        20

2、然后以部門號(hào)為判斷條件進(jìn)行查詢所在部門號(hào)的員工

SQL> select ename,deptno from emp where deptno=(select deptno from emp where ename='SMITH');

ENAME          DEPTNO

---------- ----------

SMITH              20

JONES              20

SCOTT              20

ADAMS              20

FORD               20

子查詢

當(dāng)查出來(lái)的結(jié)果是多行字句時(shí),選擇in進(jìn)行匹配其中某些

1、找出部門號(hào)為10的所有職位

SQL> select job from emp where deptno=10;   當(dāng)有重復(fù)的行時(shí),選擇關(guān)鍵字distinct

JOB

---------

MANAGER

PRESIDENT

CLERK

SQL> select distinct job from emp where deptno=10;

2、然后查出在所有職位的所有字段,滿足job

SQL> select * from emp where job in (select distinct job from emp where deptno=10);

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM

---------- ---------- --------- ---------- ---------- ---------- ----------

    DEPTNO

----------

      7782 CLARK      MANAGER         7839 1981-06-09       2450

        10

      7698 BLAKE      MANAGER         7839 1981-05-01       2850

        30

      7566 JONES      MANAGER         7839 1981-04-02       2975

        20

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM

找出所有員工工資比30號(hào)部門員工工資高的員工,關(guān)鍵字all

1、先查詢出部門號(hào)30得員工工資

SQL> select sal,deptno from emp where deptno=30;

       SAL     DEPTNO

---------- ----------

      1600         30

      1250         30

      1250         30

      2850         30

      1500         30

       950         30

2、然后再找出比這個(gè)部門號(hào)都高的員工

SQL> select ename,sal,deptno from emp where sal>all (select sal from emp where deptno=30);

ENAME             SAL     DEPTNO

---------- ---------- ----------

JONES            2975         20

SCOTT            3000         20

FORD             3000         20

KING             5000         10

當(dāng)然也有第二種方式表示,如下:

SQL> select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30);

ENAME             SAL     DEPTNO

---------- ---------- ----------

JONES            2975         20

SCOTT            3000         20

KING             5000         10

FORD             3000         20

找出任何一個(gè)員工工資比30號(hào)部門員工工資高的員工(比30號(hào)員工的最低工高就滿足條件)

運(yùn)用關(guān)鍵字any或者min(sal)

查找出和smith相同部門號(hào)相同職位的員工

1、線找出Smith所在的部門號(hào)和職位

SQL> select deptno,job from emp where ename='SMITH';

    DEPTNO JOB

---------- ---------

        20 CLERK

2、然后再按照要求查詢

SQL> select * from emp where (job,deptno)=(select deptno,job from emp where ename='SMITH');

select * from emp where (job,deptno)=(select deptno,job from emp where ename='SMITH')

                         *

ERROR at line 1:

ORA-01722: invalid number   查詢的判斷條件必須一一對(duì)應(yīng)job,deptno對(duì)應(yīng)后面的子查詢

SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM

---------- ---------- --------- ---------- ---------- ---------- ----------

    DEPTNO

----------

      7369 SMITH      CLERK           7902 1980-12-17        800

        20

      7876 ADAMS      CLERK           7788 1987-05-23       1100

        20

查出每個(gè)部門號(hào)的平均工資進(jìn)行分組,查出平均工資,以部門號(hào)進(jìn)行分組排序

SQL> select deptno,avg(sal) from emp group by deptno;

    DEPTNO   AVG(SAL)

---------- ----------

        30 1566.66667

        20       2175

        10 2916.66667

查找出自己部門,自己的工資比自己部門的平均工資高的員工

上面已經(jīng)查找出了平均值工資和部門號(hào)作為了一張表,然后結(jié)合兩表進(jìn)行查詢

SQL> select e.ename,e.sal,e.deptno,b.avg from emp e,(select deptno,avg(sal) avg from emp group by deptno) b where e.deptno=b.deptno and e.sal>b.avg;

ENAME             SAL     DEPTNO        AVG

---------- ---------- ---------- ----------

ALLEN            1600         30 1566.66667

JONES            2975         20       2175

BLAKE            2850         30 1566.66667

SCOTT            3000         20       2175

KING             5000         10 2916.66667

FORD             3000         20       2175

where e.deptno=b.deptno and e.sal>b.avg:兩張表查詢,條件一定得準(zhǔn)確,邏輯必須清楚

內(nèi)嵌視圖就是子查詢當(dāng)做一張表來(lái)使用,給這個(gè)子查詢這張表賦予一個(gè)別名

給表取別名不能加as,列可以加

oracle的分頁(yè)查詢

1、rownum分頁(yè)    rownum為oracle分配的獨(dú)有的

SQL> select e.*,rownum rn from (select * from emp) e;    rownum作為分頁(yè),添加一個(gè)字段rn作為分頁(yè)行號(hào),用其他值(xm)取代也可以,就是指分頁(yè)行號(hào)

select e.*,rownum xm from (select * from emp) e;   一樣的效果只是由rn變成了xm

SQL> select e.*,rownum rn from (select * from emp) e;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM

---------- ---------- --------- ---------- ---------- ---------- ----------

    DEPTNO         RN

---------- ----------

      7369 SMITH      CLERK           7902 1980-12-17        800

        20          1

SQL> select e.*,rownum xm from (select ename,sal from emp) e;

ENAME             SAL         XM

---------- ---------- ----------

SMITH             800          1

ALLEN            1600          2

WARD             1250          3

JONES            2975          4

rn和xm就是分頁(yè)的行數(shù),現(xiàn)在就可以基于條件來(lái)進(jìn)行每頁(yè)分配多少行,進(jìn)行分頁(yè)查詢

SQL> select e.*,rownum xm from (select ename,sal from emp) e where xm<4;

select e.*,rownum xm from (select ename,sal from emp) e where xm<4

                                                              *

ERROR at line 1:

ORA-00904: "XM": invalid identifier

這樣的查詢是錯(cuò)誤的,必須用rownum來(lái)進(jìn)行判斷,如下:

SQL> select e.*,rownum xm from (select ename,sal from emp) e where rownum<4;

ENAME             SAL         XM

---------- ---------- ----------

SMITH             800          1

ALLEN            1600          2

WARD             1250          3

SQL> SQL> select e.*,rownum xm from (select ename,sal from emp) e where rownum<4 and rownum >2;

SP2-0734: unknown command beginning "WARD      ..." - rest of line ignored.

這樣的操作是錯(cuò)誤的,正確做法如下:

SQL> select * from (select e.*,rownum xm from (select ename,sal from emp) e where rownum<4) where xm>2;

ENAME             SAL         XM

---------- ---------- ----------

WARD             1250          3

或者如下第二種:

將下面的查詢結(jié)果當(dāng)做又一張字表

SQL> select e.*,rownum xm from (select ename,sal from emp) e;

ENAME             SAL         XM

---------- ---------- ----------

SMITH             800          1

ALLEN            1600          2

WARD             1250          3

JONES            2975          4

MARTIN           1250          5

SQL> select * from (select e.*,rownum xm from (select ename,sal from emp) e) where xm>2 and xm<4;

ENAME             SAL         XM

---------- ---------- ----------

WARD             1250          3

函數(shù)count

一張表總共有多少行

SQL> select count(*) from emp;

  COUNT(*)

----------

        14

用查詢結(jié)果創(chuàng)建一張新表

SQL> create table myemp(id,ename,sal) as select empno,ename,sal from emp;   后面是查詢的結(jié)果

Table created

SQL> desc myemp;

Name  Type         Nullable Default Comments 

----- ------------ -------- ------- -------- 

ID    NUMBER(4)    Y                         

ENAME VARCHAR2(10) Y                         

SAL   NUMBER(7,2)  Y        創(chuàng)建的新表和查詢出來(lái)的結(jié)果一模一樣

合并查詢:

可以使用的操作符號(hào)union,union all,intersect,minus(減)

union:取得兩個(gè)結(jié)果的并集,去掉查詢相同的交集

SQL> select ename,sal,job from emp where sal>2500;

ENAME            SAL JOB

---------- --------- ---------

JONES        2975.00 MANAGER

BLAKE        2850.00 MANAGER

SCOTT        3000.00 ANALYST

KING         5000.00 PRESIDENT

FORD         3000.00 ANALYST

SQL> select ename,sal,job from emp where job='MANAGER';

ENAME            SAL JOB

---------- --------- ---------

JONES        2975.00 MANAGER

BLAKE        2850.00 MANAGER

CLARK        2450.00 MANAGER

然后將兩者進(jìn)行union,取并集,去掉交集部分

SQL> select ename,sal,job from emp where sal>2500 union

  2  select ename,sal,job from emp where job='MANAGER';

ENAME            SAL JOB

---------- --------- ---------

BLAKE        2850.00 MANAGER

CLARK        2450.00 MANAGER

FORD         3000.00 ANALYST

JONES        2975.00 MANAGER

KING         5000.00 PRESIDENT

SCOTT        3000.00 ANALYST

相同的部分取一次

union all不會(huì)取消重復(fù)行

SQL> select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job='MANAGER';

ENAME            SAL JOB

---------- --------- ---------

JONES        2975.00 MANAGER

BLAKE        2850.00 MANAGER

SCOTT        3000.00 ANALYST

KING         5000.00 PRESIDENT

FORD         3000.00 ANALYST

JONES        2975.00 MANAGER

BLAKE        2850.00 MANAGER

CLARK        2450.00 MANAGER

直接是兩者查詢的總和,不去掉重復(fù)行

intersect取交集

SQL> select ename,sal,job from emp where sal>2500 intersect select ename,sal,job from emp where job='MANAGER';

ENAME            SAL JOB

---------- --------- ---------

BLAKE        2850.00 MANAGER

JONES        2975.00 MANAGER

minus取差集,大的集合減去小的集合(誰(shuí)的查詢?cè)谇熬褪菧p去后面查詢的集合)

如果小的減去大的就是空集

集合操作速度快

網(wǎng)站題目:oracle之sql查詢二
URL分享:http://chinadenli.net/article36/gishpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站服務(wù)器托管網(wǎng)站設(shè)計(jì)品牌網(wǎng)站建設(shè)云服務(wù)器App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化