실습용 테이블 살펴보기
시작 전 SQL명령문을 통해 다음 데이터를 추가해준다.
Oracle 11g버전을 사용하며 , Oracle SQL Developer를 사용하였다.
Rem Copyright (c) 1990 by Oracle Corporation
Rem NAME
REM UTLSAMPL.SQL
Rem FUNCTION
Rem NOTES
Rem MODIFIED
Rem gdudey 06/28/95 - Modified for desktop seed database
Rem glumpkin 10/21/92 - Renamed from SQLBLD.SQL
Rem blinden 07/27/92 - Added primary and foreign keys to EMP and DEPT
Rem rlim 04/29/91 - change char to varchar2
Rem mmoore 04/08/91 - use unlimited tablespace priv
Rem pritto 04/04/91 - change SYSDATE to 13-JUL-87
Rem Mendels 12/07/90 - bug 30123;add to_date calls so language independent
Rem
rem
rem $Header: utlsampl.sql 7020100.1 94/09/23 22:14:24 cli Generic<base> $ sqlbld.sql
rem
SET TERMOUT OFF
SET ECHO OFF
rem CONGDON Invoked in RDBMS at build time. 29-DEC-1988
rem OATES: Created: 16-Feb-83
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER;
ALTER USER SCOTT DEFAULT TABLESPACE USERS;
ALTER USER SCOTT TEMPORARY TABLESPACE TEMP;
CONNECT SCOTT/TIGER
DROP TABLE DEPT;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-7-1987','dd-mm-yyyy')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-7-1987','dd-mm-yyyy')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
DROP TABLE BONUS;
CREATE TABLE BONUS
(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;
DROP TABLE SALGRADE;
CREATE TABLE SALGRADE
( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;
SET TERMOUT ON
SET ECHO ON
사원 정보가 들어 있는 EMP 테이블
EMP는 employee의 약어이며 사원 데이터를 보관 및 관리하는 데이블이다. DESC명령어를 사용하여 EMP 테이블의 구성을 살펴보자.
DESC EMP;
==================
이름 널? 유형
-------- -------- ------------
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)
EMPNO : 사원 번호 : 네자리 숫자 : EMP 테이블에서 각 사원의 데이터를 구분할 수 있는 유일한 값을 저장하는 열이며 기본키로 사용한다.
ENAME : 사원 이름 : 10byte의 크기의 가변형 문자열 : SCOTT, JONES 등
JOB : 사원 직책 : 9byte 크기의 가변형 문자열 : MANAGER, CLERK 등
MGR : 직속 상관의 사원 번호 : 네자리 숫자 : MGR은 manager의 약어로 현재 행에 해당하는 사원의 상급자의 네 자리 사원번호를 저장하는 열이다.
HIREDATE : 입사일 : 날짜데이터 : HIREDATE는 입사일을 나타내는 날짜 데이터이다.
SAL : 급여 : 두 자리 소수점을 포함하는 일곱자리 숫자 : 800,1600,5000 등
COMM : 급여 외 추가 수당 : 두 자리 소수점을 포함하는 일곱자리 숫자 : COMM은 commission의 약어로 월 급여 외 추가 수당을 의미한다.
DEPTNO : 사원이 속한 부서 번호 : 두자리 숫자 : DEPTNO는 department number의 약어이며 사원이 속해있는 부서의 고유 번호를 의미한다.
10byte크기일 경우 영문은 10글자, 한글은 5글자가 들어갈 수 있다.
가변형 문자열이란 여러 문자가 모여있는 문자열이다. 만약 출력하는 문자열이 가변형 문자열이라면, 문자열 데이터가 10byte보다 작은 공간을 차지할 경우에 데이터가 차지하는 공간만큼만 저장공간을 할당한다.
- 가변형 문자열과 반대로 저장 공간을 무조건 할당하는 방식인 고정형 저장 방식도 있다.
회사 부서 정보가 들어 있는 DEPT 테이블
DEPT는 department의 약어이며 회사를 구성하는 부서 데이터를 관리하는 테이블이다. 이 테이블도 DESC명령어를 통해 구성을 확인할 수 있다.
DESC DEPT;
=================
이름 널? 유형
------ -------- ------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
DEPT 테이블을 구성하는 각 열의 의미는 다음과 같다.
DEPTNO : 부서 번호 : 두 자리 숫자
DNAME : 부서 이름 : 14byte 크기의 가변형 문자열
LOC : 부서가 위치한 지역 : 13byte크기의 가변형 문자열
DEPT테이블의 DEPTNO열은 각 부서 데이터가 구분하는 유일한 값이며 기본키이다.
EMP 테이블을 구성하는 DEPTNO열이 DEPT 테이블의 DEPTNO열을 참조하여 부서 관련 데이터를 확인 할 수 있다. 즉 DEPT테이블의 DEPTNO 열은 EMP 테이블의 외래키로 사용할 수 있다.
사원들의 급여 정보가 들어 있는 SALGRADE테이블
SALGRADE테이블은 EMP 테이블에서 관리하는 사원들의 급여와 관련된 테이블이다.
DESC SALGRADE;
===================
이름 널? 유형
----- -- ------
GRADE NUMBER
LOSAL NUMBER
HISAL NUMBER
SALAGRADE 테이블이 구성하는 각 열의 의미는 다음과 같다.
GRADE : 급여 등급 : 숫자
LOSAL : 급여 등급의 최소 급여액 : 숫자
HISAL : 급여 등급의 최대 급여액 : 숫자
SQL문을 작성할 때 테이블 이름과 열 이름은 대문자로 쓰기를 권장한다. 하지만 SQL문은 대/소문자를 구문하지 않는다. 대/소문자가 섞여 있는 프로그래밍 언어와 SQL을 구분하고 가독성을 높이기 위해 SQL문 전체를 대문자로 작성한다.
데이터를 조회하는 3가지 방법 - 셀렉션, 프로젝션, 조인
데이터베이스에 보관되어 있는 데이터를 조회할 때 사용하는 SELECT 문은 출력 데이터를 선정하는 방식에 따라 크게 세가지 방식으로 나뉜다.
행 단위로 조회하는 셀렉션
셀렉션(selection)은 행 단위로 원하는 데이터를 조회하는 방식이다. 테이블 전체 데이터 중 몇ㅁ쳐 가로줄의 데이터만 선택할 때 사용된다.
- SELECT문을 사용하여 특정 행만 선별하여 조회하는 방식이 셀렉션
예를 들어 셀렉션을 사용하여 전체 학생 중 졸업생들의 데이터만 골라 출력할 수 있다.
열 단위로 조회하는 프로젝션
프로젝션(projection)은 열 단위로 원하는 데이터를 조회하는 방식이다.
- SELECT문을 사용하여 특정 열만 선별하여 조회하는 방식이 프로젝션
예를 들어 학생 테이블을 구성하는 전체 항목 중 학번과 이름, 학과코드만을 조회할 떄 프로젝션을 사용한다.
셀렉션과 프로젝션 함께 사용하기
특정 테이블에서 조회하려는 행과 열을 모두 선별할 때 셀렉션과 프로젝션을 함께 사용할 수 있다.
- 셀력션과 프로젝션을 함께 사용하면 원하는 행과 특정 열만 조회가 가능
예를 들어 전체 학생 중 졸업생만 조회하되 학번, 이름, 코드 항목만 출력되도록 선택하는 것이다.
이와 같이 셀렉션과 프로젝션을 함께 사용하면 더욱 상세한 데이터 조회가 가능하다.
두 개 이상의 테이블을 사용하여 조회하는 조인
조인(join)은 두 개 이상의 테이블을 양 옆에 연결하여 마치 하나의 테이블인 것처럼 데이터를 조회하는 방식이다. 조인은 관계형 데이터베이스에서 흔히 사용하는 방식으로 여러 테이블의 데이터를 하나의 테이블처럼 조회할 수 있다.
관계형 데이터베이스에서 데이터를 조회하는 3가지 방식
1. 셀렉션은 조회하려는 가로 데이터, 즉 행을 선별하는 방식을 의미
2. 프로젝션은 조회할 테이블의 세로 영역, 즉 출력 테이블의 열을 선택하는 방식을 의미
3. 조인은 두 개 이상의 테이블을 옆으로 연결하여 하나의 테이블처럼 데이터를 조회하는 방식
SQL의 기본 뼈대, SELECT절과 FROM 절
SELECT문은 데이터베이스에 보관되어 있는 데이터를 조회하는 데 사용된다. SELECT절과 FROM절을 기본 구성으로 SELECT문을 작성하는데, FROM절은 조회할 데이터가 저장된 테이블 이름을 명시한다. 그리고 SELECT절은 FROM절에 명시한 테이블에서 조회할 열이나 여러 열에 저장된 데이터의 조합 또는 연산식을 지정할 수 있다.
SELECT [조회할 열1 이름], [열 이름] , ... [열N 이름]
FROM [조회할 테이블 이름];
필수 요소
SELECT : 조회할 열 이름 또는 출력할 데이터를 하나 이상 지정 도는 애스터리스크(*)로 전체 열을 지정
FROM : 조회할 테이블 이름
설명 :
SELECT절, 조회할 열을 지정함
FROM절, 조회할 테이블을 지정함
*로 테이블 전체 열 출력하기
SELECT * FROM EMP;
=====================
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 87/05/23 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
위의 쿼리를 진행하면 EMP 테이블에 14명의 사원 데이터가 저장된 것을 확인할 수 있다.
테이블 부분 열 출력하기
EMP 테이블에서 사원번호, 이름, 사원이 속한 부서 번호만 조회하고 싶다면 어떻게 해야 할까?
SELECT EMPNO, ENAME, DEPTNO
FROM EMP;
=========================
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
7934 MILLER 10
- SELECT문은 기본적으로 출력되는 데이터의 정렬 순서를 보정하지 않는다.
위의 예제의 SELECT절을 살펴보면 EMP테이블의 전체 열 중 사원 번호(EMPNO), 사원 이름(ENAME), 부서 번호( DEPTNO)를 쉼표(,)로 구분하여 사용하고 있다.
중복 데이터를 삭제하는 DISTINCT
SELECT 문으로 데이터를 조회한 후, DISTINCT를 사용하여 중복을 제거한다. DISTINCT는 SELECT절에 열 이름을 명시하기 전에 선택적으로 사용할 수 있따.
SELECT DEPTNO FROM EMP; 다음 쿼리를 실행하면 부서 종류는 얼마 없지만 같은 데이터가 중복되어 출력되고 있음을 알 수 있다. DISTINCT는 조회한 데이터의 내용에서 불필요한 중복을 제거하고 특정 데이터 종류만 확인하고 싶을 때 유용하다.
DISTINCT로 열 중복 제거하기(열이 한 개인경우)
SELECT DISTINCT DEPTNO
FROM EMP;
-------------------------------
30
20
10
DISTINCT를 사용하면 SQL문의 출력결과로 SELECT절에 명시한 열 중에서 같은 내용이 두 개 이상일 경우, 중복 행은 한개만 남겨 두고, 그 밖의 행은 모두 제거한다.
- DISTINCT를 사용하면 중복이 제거되어 특정 열을 구성하는 데이터의 종류를 편하게 확인할 수 있다.
DISTINCT로 열 중복 제거하기(열이 여러 개인 경우)
SELECT DISTINCT JOB, DEPTNO
FROM EMP;
===================================
MANAGER 20
PRESIDENT 10
CLERK 10
SALESMAN 30
ANALYST 20
MANAGER 30
MANAGER 10
CLERK 30
CLERK 20
위의 결과를 보면 JOB열의 값이 MANAGER인 데이터가 세번 출력되고 있다. 하지만 각 MANAGER의 부서 번호는 20, 30, 10으로 다르기 때문에 중복 데이터가 아니다. 그래서 세 행이 모두 출력되었다.
- 직책(JOB)과 부서 번호( DEPTNO)가 모두 중복된 데이터는 한 번만 출력된다.
즉 두 개의 조건이 걸리는 것이다.
ALL 로 중복되는 열 제거 없이 그대로 출력
SELECT ALL JOB, DEPTNO
FROM EMP;
===============
CLERK 20
SALESMAN 30
SALESMAN 30
MANAGER 20
SALESMAN 30
MANAGER 30
MANAGER 10
ANALYST 20
PRESIDENT 10
SALESMAN 30
CLERK 20
CLERK 30
ANALYST 20
CLERK 10
ALL은 DISTINCT와 반대로 데이터 중복을 제거하지 않고 그대로 출력한다.
하지만 SELECT절에서 중복설정이 없을 경우 기본적으로 ALL을 사용하기 떄문에 ALL없이도 똑같이 동작한다.
한눈에 보기 좋게 별칭 설정하기
앞에서 배운 SELECT문의 결과를 보면 SELECT절에 명시한 열 이름이 결과 화면의 위쪽에 출력되는 것을 확인할 수 있다. SQL문에서는 최종 출력되는 열 이름을 임의로 지정할 수 있다. 이렇게 본래 열 이름 대신 붙이는 이름을 별칭(alias)이라고 한다.
열과 연산식
SELECT ENAME, SAL, SAL*12+COMM, COMM
FROM EMP;
=======================================
파란색으로 표시한 부분은 다른 열과는 다르게 하나 이상의 열,숫자, 연산식을 함께 사용하고 있다. 연산식에서 사용하는 *는 곱하기를, +는 더하기를 의미한다.
SAL열은 EMP테이블의 급여 데이터를 ,COMM열은 급여 외 추가 수당을 저장한다.
즉 연산식 SAL*12+COMM은 급여에 12를 곱하고 급여 외 추가 수당을 더한 값을 출력하는 뜻이다. 이렇게 계산된 내용은 사원의 '연간 총 수입'이다.
위의 결과에서 가장 윗부분 이름을 보면 SAL*12+COMM으로 이름이 출력된것을 확인할 수 있다.
- SELECT 절에 *를 하나만 사용했을 경우 모든 열을 조회하라는 의미이다. 하지만 숫자나 다른 열과 함께 사용되면 곱하라는 뜻이 된다.
열의 데이터가 출력되지 않는 이유
위의 결과를 살펴보면 네 사람외에 사원들은 SAL*12+COMM 열에 데이터가 출력되지 않는다. 이는 COMM 열에 NULL값이 들어있기 때문이다. NULL값이 들어간 열은 값이 존재하지 않는다는 뜻이다.
별칭을 지정하는 방식
오라클에서 별칭을 지정하려면 다음과 같이 4가지 방식 중 하나를 선택하여 SELECT절에 사용한다. 그럼 SAL*12+COMM의 별칭을 ANNSAL로 하여 별칭을 지정하는 4가지 방식을 알아보자.
SAL*12+COMM ANNSAL
SAL*12+COMM "ANNSAL"
SAL*12+COMM AS ANNSAL
SAL*12+COMM AS "ANNSAL"
이번에는 별칭을 지정하는 4가지 방식중 세번째 방식으로 다음쿼리를 진행해보자.
SELECT ENAME, SAL, SAL+12+COMM AS ANNSAL, COMM
FROM EMP;
세번째 열의 이름을 살펴보면 별칭으로 지정했던 ANNSAL로 출력되고 있는 것을 확인할 수 있다. 그리고 이러한 출력 결과는 연간 총 수입 계산을 덧셈으로만 해도 마찬가지이다. 이와 같이 별칭은 최종적으로 출력되기를 원하는 열 이름을 직접 지정할 때 주로 사용한다.
또 단순히 긴 열 이름의 불편함 외에도 보안이나 데이터 노출 문제 때문에 별칭을 사용해야할 때도 있다. 만약 별칭을 사용하지 않으면 계산식 자체가 열에 노출된다. 즉 현재 데이터가 나오기까지의 진행과정을 숨기는 용도로 별칭을 사용할 수 있다.
별칭을 지정하는 4가지 방식중 세번째 방식을 선호는 경향이 있다. AS가 붙은 형식을 선호하는 이유는 조회해야 할 열이 수십, 수백 개일 경우에 어떤 단어가 별칭인지 알아보기 편하기 때문이다.
그리고 다른 한가지이유는 다른 프로그래밍 코드에서의 큰따옴표는 문자열의 데이터의 시작과 끝을 알리는 기호로 나타내기 때문이다.
SQL문은 프로그래밍 코드에서도 그래도 사용하기 때문에 따로 추가 작업을 더 해줘야 오류나 예외상황이 발생하지 않는다.
원하는 순서로 출력 데이터를 정렬하는 ORDER BY
SELECT 문을 사용하여 데이터를 조회할 때 시간이나 이름 순서 또는 어떤 다른 기준으로 데이터를 정렬해서 출력해야 하는 경우가 종종 생긴다. 이때 데이터를 정렬된 상태로 출력하기 위해 ORDER BY절을 사용한다. 그리고 ORDER BY절은 SELECT문을 작성할 때 사용할 수 있는 여러 절 중 가장 마지막 부분에 쓴다.
SELECT [조회할 열1 이름], [열2 이름], ..., [열N 이름]
FROM [조회할 테이블 이름]
.... (그밖의 절)
ORDER BY [정렬하려는 열 이름(여러 열 지정 가능)] [정렬 옵션];
ORDER BY 의 필수요소 : 정렬하려는 열 이름을 하나 이상 지정
ORDER BY의 선택요소 : 정렬하는 열마다 오름차순(ASC), 내림차순(DESC)지정
ORDER BY절에 지정한 열은 먼저 지정한 열을 우선으로 정렬한다. 만약 정렬 옵션을 지정하지 않을 경우 기본값으로 오름차순(ASC)이 설정된다.
- 내림차순을 뜻하는 desc는 descending의 약자이고, 오름차순을 뜻하는 asc는 ascending의 약자이다.
오름차순 사용하기
ORDER BY절에는 정렬 기준이 되는 열 이름을 지정한다. 그리고 열 이름은 하나 또는 여러개의 열을 지정할 수 있다.
SELECT*
FROM EMP
ORDER BY SAL;
결과 화면을 보면 ORDER BY절에 명시한 SAL열을 기준으로 EMP의 모든 열이 급여가 낮은 사원부터 급여가 높은 사원으로, 즉 오름차순으로 정렬되는것을 알 수 있다.
내림차순 사용하기
급여가 높은 사원부터 낮은 사원 순으로 내림차순 정렬이 되도록 출려갛려면 어떻게 해야 할까?
SELECT*
FROM EMP
ORDER BY SAL DESC;
- VARCHAR2같은 문자 데이터 역시 알파벳순(사전 순서)으로 정렬할 수 있으며, 날짜 데이터를 의미하는 DATE역시 이전 날짜, 이후 날짜로 크기를 부여하여 정렬 할 수 있다.
각각의 열에 내림차순과 올림차순 동시에 사용하기
ORDER BY절에는 우선순위를 고려하여 여러 개의 정렬 기준을 지정할 수 있다. 예를 들어 부서번호(DEPNO)를 오름차순으로 정렬하고, 부서 번호가 같은 사원일 경우 급여(SAL)를 기준으로 내림차순으로 정렬할 수도 있다. 다음과 같이 ORDER BY절에 부서 번호 열과 급여 열을 명시하고 각각의 열에 정렬 옵션을 지정해 보자.
SELECT*
FROM EMP
ORDER BY DEPTNO ASC, SAL DESC;
ORDER BY절에 첫 번쨰로 명시된 부서 번호 열을 기준으로 먼저 오름차순으로 정렬한 후에 부서 번호 열 값이 같은, 즉 같은 부서에서 근무하고 있는 사원들 끼리는 급여가 높은 사원부터 낮은 사원으로 내림차순으로 정렬하여 출력하였다.
ORDER BY절을 사용할 떄 주의사항
ORDER BY절을 사용한 정렬은 꼭 필요한 경우가 아니라면 사용하지 않는 것이 좋다. 여기저기 흩어져 있는 데이터를 특정 기준에 따라 가지런히 순서를 맞추는 것은 많은 자원, 즉 비용을 소모하기 때문이다. 특정 기준에 따라 두 개 데이터를 정렬하는 시간보다 열 개 데이터를 정렬하는 데에 시간이 더 필요하다.
ORDER BY절이 존재할 경우 SELECT 문을 통해 조회할 데이터를 모두 확정한 상태에서 ORDER BY절의 명시된 기준에 따라 정렬한다. 이 때 데이터의 양 또는 정렬 방식에 따라 출력 데이터를 선정하는 시간보다 정렬하는데 시간이 더 걸릴 수 도 있다. 즉 정렬을 하지 않으면 결과를 더 빨리 출력할 수 있다는 것이다.
SQL문의 효율이 낮아지는것은 서비스 응답시간이 느려진다는 것을 뜻한다. 따라서 정렬이 꼭 필요한 경우가 아니라면 ORDER BY절을 넣지 않도록 한다.
SELECT문의 기본 구성 중 하나인 SELECT절에는 조회할 열 또는 여러 열의 조합, 연산식을 지정한다. 그리고 FROM절에는 조회할 데이터가 저장된 테이블 이름을 명시한다. 만약 명시된 열 이름이 너무 길다면 별도 이름을 지정할 수 있으며 이를 별칭이라 한다.
'Back-end' 카테고리의 다른 글
11 컬렉션 프레임웍(3) (0) | 2021.07.07 |
---|---|
11 컬렉션 프레임웍(2) (0) | 2021.07.06 |
11 컬렉션 프레임웍(1) (0) | 2021.07.06 |
02 관계형 데이터베이스와 오라클 데이터 베이스 (0) | 2021.07.05 |
객체 지향 정리 (0) | 2021.07.05 |