C#,Delphi,Oracle,MSSQL 개발자블로그

[Oracle/기본]1. 기본적인 SQL문장 작성. 본문

Programming/Oracle 공부

[Oracle/기본]1. 기본적인 SQL문장 작성.

19760323 2017. 5. 15. 20:15

 

● SQL의 SELECT 문장의 성능

 

  - Selection : 질의에 대해 리턴하고자 하는 테이블의 행선택.

  - Projection : 질의에 대해 리턴하고자 하는 테이블의 열을 선택.

  - Join : 공유 테이블의 양쪽의 열에 대해 링크를 생성하여 다른 테이블에 저장되어 있는 데이터를 가져옴.

 

● 기본적인 SELECT 문장.

 

    SELECT [DISTINCT] {*, COLUMN [ALIAS], ...}

      FROM TABLES

 

★ keyword, clause, statement 란?

 

  1. keyword : 독립적인 SQL 요소

    ex) SELECT 와 FROM

 

  2. clause : SQL 문장의 한 부분

    ex) SELECT empno, ename, ...

 

  3. statement : 둘 이상의 clauses의 조합

    ex) SELECT * FROM emp

 

  

   - 일반적으로 keyword는 대문자로, 다른 모든단어(테이블 이름, 열 이름 등)은 소문자로 입력한다.

 

● 디폴트 열 헤딩

 

   - 좌측 : 날짜, 문자

   - 우측 : 숫자

   - 디폴트 디스플레이 : 대문자

 

● 산술연산자  (+,  -,  *,  / )

 

   FROM 절을 제외한 SQL문장에서 산술 연산자를 사용할 수 있다.

  

    ex) SELECT ename, sal, sal+300

          FROM emp;

 

● Null 값 정의

 

   Null은 이용할 수 없거나, 지정되지 않았거나, 알 수 없거나 또는 적용할 수 없는 값이다.

   Null은 숫자 0이나 공백과는 다르다.

   0은 숫자이며, 공백은 문자이다.

 

● 산술 표현식에서의 Null 값

 

   Null값을 포함하는 산술 표현식은 Null로 계산된다. (산술 표현식에서 어떤 열 값이 null이면 결과는 null 이다.)

   예를들면, 0으로 나누기를 시도하면 에러가 발생하지만, Null로 숫자를 나누면 결과는 Null 또는 Unknown이다.

 

● 열 별칭(Alias) 사용

 

    ex) SELECT ename AS name

          FROM emp

 

         SELECT ename "Name"            -> Alias에 특수문자(#, $ 같은..) 또는 대소문자를 포함할때 사용.     

           FROM emp

 

         SELECT ename name

           FROM emp

 

 

● 연결연산자. ( || )

   

    두 개의 열을 연결하여 보여준다.

 

    ex) SELECT ename||job AS "Employees"

          FROM emp;

 

     -> 별칭이름앞의 AS 키워드는 SELECT 절을 보다 읽기 쉽게 한다.

 

● 리터럴(Literal)문자 스트링 (')

 

    ex) ename 은 KING이고, job은 PRESIDENT 일 때,

 

          SELECT ename ||' '||'is a'||' '||job

            FROM emp;

 

      -> KING is a PRESIDENT

 

     ex) ename 은 KING이고, sal은 5000일 때,

 

          SELECT ename || ': '||'1'||' Month salary = '||sal Monthly

            FROM emp;

 

       -> KING: 1 Month salary = 5000

 

● 중복 행 제거 (DISTINCT 와 GROUP BY 의 차이)

   * 참고 : http://intomysql.blogspot.kr/2011/01/distinct-group-by.html

 

- DISTINCT : 주로 Unique한 컬럼이나 로우를 조회하는 경우 사용.

- GROUP BY : 데이터를 그룹핑해서 그 결과를 가져오는 경우.

 

SELECT DISTINCT fd1  =  SELECT fd1

  FROM tab;                    FROM tab

                              GROUP BY fd1

 

 

SELECT DISTINCT fd1, fd2  =  SELECT fd1, fd2

  FROM tab;                         FROM tab

                                  GROUP BY fd1, fd2

 

DISTINCT와 GROUP BY 는 동일한 코드를 사용한다. 하지만,

DISTINCT는 정렬된 결과가 아니지만, GROUP BY는 정렬된 결과를 보내준다.

 

 

★ DISTINCT와 GROUP BY의 고유의 기능.

 

- DISTINCT

  SELECT COUNT(DISTINCT fd1)

    FROM tab;

  : 중복 제거한 것을 count하는 경우.

 

- GROUP BY

     SELECT fd1, MIN(fd2), MAX(fd2)

      FROM tab

GROUP BY fd1;

  : 집합함수가 필요한 경우에는 GROUP BY를 사용해야 한다.

 

<<주의사항>>

가끔 어떤 사용자는 DISTINCT가 마치 함수인 것처럼 (괄호를 사용하여) 아래와 같이 사용을 하는데 만약 fd1 컬럼은 unique값,

fd2 는 전체 값을 원한다면 절대 그 결과를 얻을 수 없다.

DISTINCT 키워드는 괄호를 사용하여 함수처럼 이용하면 안된다.

 

SELECT DISTINCT(fd1), fd2 FROM tab;

 

SELECT 문장에 DISTINCT라는 키워드가 있으면, SQL은 SELECT 되는 모든 컬럼(로우) 들에 대해서 DISTINCT를 적용해서 결과를 보여주게

된다.

위와 같은 요건을 처리하기 위해서도 아래와 같이 GROUP BY 로만 해결할 수 있다.

 

     SELECT fd1, fd2

      FROM tab

GROUP BY fd1;

 

: 두 개 이상의 컬럼 중 한가지만 중복 제거 하고 싶은 경우 GROUP BY 사용.

 

● 테이블 구조 디스플레이

    DESCRIBE(DESC) 테이블명

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments