oracleクエリ結果のソート、ASC/DESC、昇順、降順、複数列ソート、ORDER BY、いくつかの練習問題


クエリー結果のソート
EMPテーブルの異なる部門番号が表示されます.
クエリとともに結果を並べ替える場合は、次の文を使用します.
SELECT      FROM    WHERE   
		ORDER BY    1 [ASC|DESC][,   2 [ASC|DESC]...];

ORDER BYは文の後からソートする列に続く.ORDER BY従属文はSELECT文の最後に現れる.
ソートには昇順と降順の区分があり、ASCは昇順ソートを表し、DESCは降順ソートを表す.ソート順を指定しない場合は、
デフォルトのソート順は昇順ASCです.降順にするにはDESCキーを書く必要があります
1.昇順ソート
【訓練1】従業員の名前と給与を調べ、給与の小さい順に並べ替える.
クエリーを入力して実行するには、次の手順に従います.
SELECT ename, sal FROM emp ORDER BY sal;

実行結果:
ENAME            SAL
		------------- --------------------
		SMITH             800
		JAMES             950

注意:ASCとDESCを省略すると、デフォルトはASC、すなわち昇順ソートです.
2.降順ソート
【トレーニング2】従業員の名前と雇用日を照会し、雇用日順に並べ替え、雇用の先を表示します.
クエリーを入力して実行するには、次の手順に従います.
SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;

結果は次のとおりです.
ENAME       HIREDATE
		------------- -----------------------
		ADAMS    	23-5  -87
		SCOTT      	19-4  -87
MILLER     	23-1  -82
		JAMES      	03-12 -81
		FORD       	03-12 -81

注意:DESCは降順ソートを表し、省略できません.
3.複数列ソート
複数の列でソートできます.最初の列を押してから、2番目の列、3番目の列......を押します.
【訓練3】従業員情報を照会し、部門別に小から大まで並べ替え、雇用時間の前後順に並べ替える.
クエリーを入力して実行するには、次の手順に従います.
SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;

結果は次のとおりです.
ENAME       DEPTNO HIREDATE
		---------------- ----------------- ---------------
		CLARK           	   10 09-6  -81
		KING             	   10 17-11 -81
		MILLER           	   10 23-1  -82
		SMITH            	   20 17-12 -80
		JONES            	   20 02-4  -81
		FORD            	   20 03-12 -81
		SCOTT            	   20 19-4  -87

説明:このソートは、部門別にソートされ、部門が同じ場合、雇用時間別にソートされます.
4.ソートで別名を使用
計算カラムをソートする場合は、計算カラムの別名を指定し、別名でソートできます.
【訓練4】給与と勤務月の積で並べ替えます.
クエリーを入力して実行するには、次の手順に従います.
SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp 
		ORDER BY total;

実行結果:
 EMPNO ENAME         TOTAL
		------------ ------------- ----------------------
    		7876	ADAMS     	221526.006
    		7369 	SMITH      	222864.661
    		7900 	JAMES      	253680.817
   		 7654 	MARTIN    	336532.484

sysdateは現在の日付を取得します.
練習問題:
1.SQL言語でデータベース・オブジェクトの作成、削除および変更に使用される部分を以下と呼びます.
A.データベース制御言語(DCL)
B.データベース定義言語(DDL)
C.データベース操作言語(DML)
D.データベース取引言語
2.ヘッダーが次のように表示されるクエリーを実行します.
   
 SELECT sal "Employee Salary" FROM emp

     A. EMPLOYEE SALARY B. employee salary
     C. Employee Salary D. "Employee Salary“
3.次の2つのクエリを実行します.結果は次のとおりです.
SELECT ename name,sal salary FROM emp order by salary;
		SELECT ename name,sal "SALARY" FROM emp order by sal ASC;

A.両クエリの結果はまったく同じである
B.2つのクエリの結果が異なる
C.1番目のクエリが正しい、2番目のクエリが間違っている
D.2番目のクエリが正しい、1番目のクエリが間違っている
4.この章のempテーブルの内容を参照して、次のクエリ文を実行します.最初の行に表示される人は次のとおりです.
SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;

A. SMITH B. KING
C. MILLER D. CLARK
5.どの関数が||演算と同じ機能を持っているか:
A. LTRIM B. CONCAT
C. SUBSTR D. INSTR
6.次の文を実行すると、正しい結論は次のとおりです.
SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11 -1980')-100

A.指定日から100日以内に雇用された従業員情報を表示する
B.所定日前100日以内に雇用された従業員情報を表示する
C.所定日から100日後に雇用された従業員情報を表示する
D.所定日より100日前に雇用された従業員情報を表示する
7.次の文でエラーが発生した行は次のとおりです.
     
SELECT deptno,max(sal) FROM emp 
		     WHERE job IN('CLERK','SALEMAN','ANALYST')
		     GROUP BY deptno
		      HAVING sal>1500;

A.1行目B.2行目
C.3行目D.4行目
8.次の文でエラーが発生した行は次のとおりです.
SELECT deptno,max(avg(sal)) 
		FROM emp 
		WHERE sal>1000
		Group by deptno;

A.1行目B.2行目
C.3行目D.4行目
9.次の文でエラーが発生した行は次のとおりです.
SELECT deptno,dname,ename,sal 
FROM emp,dept
WHERE emp.deptno=dept.deptno
AND sal>1000;

A.1行目B.2行目
C.3行目D.4行目
10.次の文でエラーが発生しました.どの変更が正しく実行されますか.
SELECT   deptno, max(sal)
FROM emp
GROUP BY deptno
WHERE   max(sal)>2500;

A.WHEREとGROUP BY文を順番に入れ替える
B.WHERE max(sal)>2500文をHAVING max(sal)>2500文に変更
C.WHERE max(sal)>2500文をWHERE sal>2500に変更
D.WHERE max(sal)>2500文をHAVING sal>2500に変更
11.次の文の役割は次のとおりです.
SELECT ename,sal FROM emp
		WHERE sal<(SELECT min(sal) FROM emp)+1000;

A.給与が1000元未満の従業員情報を表示する
B.従業員の給料が1000元未満の給料を1000元増加した後に表示する
C.最低賃金1000元を超える従業員情報を表示する
D.最低賃金1000元以下の従業員情報を表示する
12.次の文の役割は次のとおりです.
SELECT  job FROM emp WHERE deptno=10
		MINUS
		SELECT  job FROM emp WHERE deptno=20;

A.部署10の従業員役職と20の従業員役職を表示する
B.表示部門10と部門20の共通の従業員職務
C.表示部門10と部門20の異なる従業員の職務
D.部門10に現れ、部門20に現れない従業員の職務を表示する
黒い髪:http://heisetoufa.iteye.com/