クラシックORACLE SQL検索練習第二篇   Leave a comment

こんにちは、Linouです。今日もSQL検索練習のブログを書きます。

皆さんと一緒に良く使うSQLを共有します、良いSQLがあったら、共有してください。

それから、本文中の問題について、良い解決方法があれば、ぜひコメントしてくいただければ。

第一篇:http://orafox.blog.fc2.com/blog-entry-11.html

今日の練習は第一篇より簡単たと思います、もし誰か出来ない場合、良くSQL基礎をちゃんと勉強しなきゃ。

本文中に、使っている表とデータは同じ:

sys@ORCL> conn scott/tiger
Connected.
scott@ORCL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
—————————— ——- ———-
BONUS                          TABLE
DEPT                           TABLE
DUMMY                          TABLE
EMP                            TABLE
SALGRADE                       TABLE

scott@ORCL> desc emp
Name                                                  Null?    Type
—————————————————– ——– ————————————
EMPNO                                                 NOT NULL NUMBER(4) 従業員番号
ENAME                                                          VARCHAR2(10) 従業員名前
JOB                                                            VARCHAR2(9) 作業
MGR                                                            NUMBER(4) 上司番号
HIREDATE                                                       DATE 入社日付
SAL                                                            NUMBER(7,2) 給与
COMM                                                           NUMBER(7,2) ボラス
DEPTNO                                                         NUMBER(2) 部門番号

scott@ORCL> desc dept
Name                                                  Null?    Type
—————————————————– ——– ————————————
DEPTNO                                                         NUMBER(2) 部門番号
DNAME                                                          VARCHAR2(14) 部門名前
LOC                                                            VARCHAR2(13) ロケーション

Tips:
total salary=SAL+COMM
emp表でのデータ:

scott@ORCL> select * from 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 09-DEC-82       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 12-JAN-83       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.

dept表でのデータ:

scott@ORCL> select * from dept;

    DEPTNO DNAME          LOC
———- ————– ————-
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

 

練習問題は:

1. EMP表に、名前(ENAME)第三文字は「A」の従業員を検索する。
2. EMP表に、名前の中に、AとNが含まれている従業員を検索する。
3. ボラス―がある従業員を検索し、その名前、給与、ボラス―をリストし、給与はローからハイまで、それから、ボラス―はハイからローまで並んでください。
4. 部門番号は20のJOBをリストする。
5. SALES以外の部門を検索する。
6. 給与は1000-1500以外の従業員を検索し、その名前、給与をリスト、給与はハイからローまで。
7. ManagerとSALESMANのJOBを検索し、条件:年収は15,000~20,000、名前、JOB、年収をリストする。
8. 次の2つのSQL文の出力を説明:
SELECT EMPNO、COMMがNULL IS EMP FROM COMM;
EMP FROM SELECT EMPNO、COMM WHERE COMM= NULL;
9. SELECT ENAME,SAL FROM EMP WHERE SAL > ‘1500’ エラーになるでしょうか、なぜですか。

 

◆◆◆◆◆1. EMP表に、名前(ENAME)第三文字は「A」の従業員を検索する。◆◆◆◆◆

scott@ORCL> select * from emp where ename like ‘__A%’;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
———- ———- ——— ———- ——— ———- ———- ———-
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7876 ADAMS      CLERK           7788 12-JAN-83       1100                    20

◆◆◆◆◆2. EMP表に、名前の中に、AとNが含まれている従業員を検索する。◆◆◆◆◆

scott@ORCL>  SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE ‘%A%’ AND ENAME LIKE ‘%N%’;

ENAME
———-
ALLEN
MARTIN

 

◆◆◆◆◆3. ボラス―がある従業員を検索し、その名前、給与、ボラス―をリストし、給与はローからハイまで、それから、ボラス―はハイからローまで並んでください。◆◆◆◆◆

scott@ORCL> select ename,sal,comm from emp where comm is not null and comm <> 0 order by comm desc;

ENAME             SAL       COMM
———- ———- ———-
MARTIN           1250       1400
WARD             1250        500
ALLEN            1600        300

 

◆◆◆◆◆4. 部門番号は20のJOBをリストする。◆◆◆◆◆

scott@ORCL> select distinct job from emp where deptno=20;

JOB
———
CLERK
MANAGER
ANALYST

 

◆◆◆◆◆5. SALES以外の部門を検索する。◆◆◆◆◆

scott@ORCL> select * from dept where dname <> ‘SALES’;

    DEPTNO DNAME          LOC
———- ————– ————-
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        40 OPERATIONS     BOSTON

 

◆◆◆◆◆6. 給与は1000-1500以外の従業員を検索し、その名前、給与をリスト、給与はハイからローまで。◆◆◆◆◆

scott@ORCL> select ename,sal from emp where sal<1000 or sal>1500 order by sal desc;

ENAME             SAL
———- ———-
KING             5000
SCOTT            3000
FORD             3000
JONES            2975
BLAKE            2850
CLARK            2450
ALLEN            1600
JAMES             950
SMITH             800

9 rows selected.

 

◆◆◆◆◆7. ManagerとSALESMANのJOBを検索し、条件:年収は15,000~20,000、名前、JOB、年収をリストする。◆◆◆◆◆

scott@ORCL> select ename,job,(sal+nvl(comm,0))*12 as salary from emp where job=’MANAGER’ or job =’SALESMAN’ order by salary desc;

ENAME      JOB           SALARY
———- ——— ———-
JONES      MANAGER        35700
BLAKE      MANAGER        34200
MARTIN     SALESMAN       31800
CLARK      MANAGER        29400
ALLEN      SALESMAN       22800
WARD       SALESMAN       21000
TURNER     SALESMAN       18000

7 rows selected.

 

◆◆◆◆◆8. 次の2つのSQL文の出力を説明:
SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;
SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;

◆◆◆◆◆

scott@ORCL> SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;

     EMPNO       COMM
———- ———-
      7369
      7566
      7698
      7782
      7788
      7839
      7876
      7900
      7902
      7934

10 rows selected.

scott@ORCL> SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;

no rows selected

 

◆◆◆◆◆9. SELECT ENAME,SAL FROM EMP WHERE SAL > ‘1500’ エラーになるでしょうか、なぜですか。◆◆◆◆◆

scott@ORCL> SELECT ENAME,SAL FROM EMP WHERE SAL > 1500;

ENAME             SAL
———- ———-
ALLEN            1600
JONES            2975
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
FORD             3000

7 rows selected.

Posted 2013/05/01 by linou518 in Oracle Base

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: