selectの基本
データベース上に作成されている表は “select” を使用することで表に格納されている情報を表示さることができます。
前回解説したSCOTTスキーマを使用していきます。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
表をselectするときの基本的なコマンドは以下です。
select <列名>,<列名>,… from <表名> ;
SQL> select empno,ename,job from emp;
EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7788 SCOTT ANALYST
7839 KING PRESIDENT
7844 TURNER SALESMAN
7876 ADAMS CLERK
EMPNO ENAME JOB
---------- ---------- ---------
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
14 rows selected.
また、列名を “*” とすることで、表に構成されているすべての列を出力することができます。
select * from <表名> ;
SQL> select * from salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
[参考]
SQL言語リファレンス – SELECT
SELECT 文についてはコチラ。
set linesize
例えば以下のselect文を実行すると以下のように1つの行が2段になってしまいました。
SQL> 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
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
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
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
14 rows selected.
これでは表の情報が見づらくなってしまいますが、set linesizeを使用することで出力が折り返されずに1行に表示されるように制御することができます。
set linesize <数値>
※<数値>は1行に表示される文字数
SQL> set linesize 1000
SQL> 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 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
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.
上記のようにset linesizeで表示する行の文字数を調整することで見やすく表示することができました。
set linesizeはset linと略すことも可能です。
例) set lin 1000
[参考]
ユーザーズ・ガイドおよびリファレンス – 12.41.30 SET LIN[ESIZE] {80 | n | WINDOW}
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
set pagesize
例えば以下のselect文を実行すると以下のように5ページ分の出力になっています。
SQL> select sid,serial#,username,status from v$session;
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
2 22566 ACTIVE
3 18326 ACTIVE
4 13395 ACTIVE
5 19897 ACTIVE
6 10100 ACTIVE
7 60413 ACTIVE
8 55769 ACTIVE
9 6209 ACTIVE
10 32399 ACTIVE
11 37986 ACTIVE
12 10973 ACTIVE
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
13 23331 SYS ACTIVE
14 40389 ACTIVE
15 58392 ACTIVE
16 56349 ACTIVE
17 43493 ACTIVE
18 35438 ACTIVE
19 47930 ACTIVE
20 27615 ACTIVE
21 49519 ACTIVE
22 59177 ACTIVE
23 10365 ACTIVE
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
24 40204 ACTIVE
25 25689 ACTIVE
27 40404 ACTIVE
28 5415 ACTIVE
30 46307 ACTIVE
31 17373 ACTIVE
32 56869 ACTIVE
34 61469 ACTIVE
35 18416 ACTIVE
38 53517 ACTIVE
39 54285 ACTIVE
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
40 47315 ACTIVE
43 65330 ACTIVE
45 28442 ACTIVE
50 17129 ACTIVE
51 31197 ACTIVE
56 37981 ACTIVE
67 27277 ACTIVE
69 21250 ACTIVE
77 8465 ACTIVE
88 55448 ACTIVE
90 29170 SYS ACTIVE
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
93 54092 ACTIVE
100 6162 ACTIVE
101 52139 ACTIVE
103 15013 ACTIVE
104 7669 ACTIVE
49 rows selected.
SET PAGESIZE コマンドは、SQL*Plusで出力される1ページあたりの行数を指定するための設定です。
これにより、出力が複数ページに分かれる際の行数制御や、ページ毎に表示される列名の頻度を調整できます。
set pagesize <数値>
※<数値>は1ページあたりの最大行数を指定します。
SQL> set pagesize 1000
SQL> select sid,serial#,username,status from v$session;
SID SERIAL# USERNAME STATUS
---------- ---------- ---------- --------
2 22566 ACTIVE
3 18326 ACTIVE
4 13395 ACTIVE
5 19897 ACTIVE
6 10100 ACTIVE
7 60413 ACTIVE
8 55769 ACTIVE
9 6209 ACTIVE
10 32399 ACTIVE
11 37986 ACTIVE
12 10973 ACTIVE
13 23331 SYS ACTIVE
14 40389 ACTIVE
15 58392 ACTIVE
16 56349 ACTIVE
17 43493 ACTIVE
18 35438 ACTIVE
19 47930 ACTIVE
20 27615 ACTIVE
21 49519 ACTIVE
22 59177 ACTIVE
23 10365 ACTIVE
24 40204 ACTIVE
25 25689 ACTIVE
27 40404 ACTIVE
28 5415 ACTIVE
30 46307 ACTIVE
31 17373 ACTIVE
32 56869 ACTIVE
34 61469 ACTIVE
35 18416 ACTIVE
38 53517 ACTIVE
39 54285 ACTIVE
40 47315 ACTIVE
43 65330 ACTIVE
45 28442 ACTIVE
50 17129 ACTIVE
51 31197 ACTIVE
56 37981 ACTIVE
67 27277 ACTIVE
69 21250 ACTIVE
77 8465 ACTIVE
88 55448 ACTIVE
90 29170 SYS ACTIVE
93 54092 ACTIVE
100 6162 ACTIVE
101 52139 ACTIVE
103 15013 ACTIVE
104 7669 ACTIVE
49 rows selected.
上記のようにset pagesizeで表示する1ページのの行数を調整することで見やすく表示することができました。
set pagesizeはset pagesと略すことも可能です。
例) set pages 1000
また、linesizeとpagesizeは同時に設定することも可能です。
例) set lin 1000 pages 1000
[参考]
ユーザーズ・ガイドおよびリファレンス – 12.41.41 SET PAGES[IZE] {14 | n}
column
set linesizeで1行で表示できる文字数を設定すると、列によっては以下のようにかなり長い文字数になり出力され見にくくなってしまう場合があります。
SQL> select instance_name,family,status from v$instance;
INSTANCE_NAME FAMILY STATUS
---------------- -------------------------------------------------------------------------------- ------------
orcl OPEN
そこで clumn を使用して特定の列の表示幅を設定することができます。
以下のように設定します。
<文字列の場合>
column <列名> format a<文字数>
<数値列の場合>
column <列名> format 999999….
※9の数で有効桁数を指定する
SQL> column family format a20
SQL> select instance_name,family,status from v$instance;
INSTANCE_NAME FAMILY STATUS
---------------- -------------------- ------------
orcl OPEN
上記のようにcolumnで表示する列の文字数を調整することで見やすく表示することができました。
また、columnはcol、formatはforと省略することも可能です。
例) col <列数> for a<文字数>
[参考]
ユーザーズ・ガイドおよびリファレンス – 12.13 COLUMN
まとめ
SET LINESIZE
- データが折り返されて表示される問題は、
SET LINESIZEコマンドで制御できます。- 形式:
SET LINESIZE 数値 - 例:
SET LINESIZE 1000
- 形式:
SET PAGESIZE
- 表示されるページの行数を制御するためには、
SET PAGESIZEコマンドを使用します。- 形式:
SET PAGESIZE 数値 - 例:
SET PAGESIZE 1000
- 形式:
COLUMN
- 長い列を見やすくするために、特定の列の表示幅を
COLUMNコマンドで設定できます。- 文字列列の形式:
COLUMN 列名 FORMAT a文字数 - 数値列の形式:
COLUMN 列名 FORMAT 999999...
- 文字列列の形式:
これらの設定を適用することで、SQLの出力をより見やすく、効率的に表示することが可能です。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント