티스토리 뷰

SQL

SQL 기본

Alledy 2019. 5. 15. 17:49

관계형 데이터베이스의 테이블

  • 기본키(primary key)

    • 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 한다. (eg. 주민등록번호)
    • 값의 중복이 없어야 한다.
    • NULL값을 가질 수 없다.
  • 후보키(candidate key), 대체키(alternative key)

    • 기본키가 될 수 있는 모든 키는 후보키이다. (eg. 학번, 아이디, 주민등록번호)
    • 후보키 중에서 기본키가 아니게 된 모든 키를 대체키라고 한다. (eg. 주민등록번호가 기본키가 된 경우 학번, 아이디가 대체키)
  • 외래키(foreign key)

    • 특정 테이블에 포함되어 있으면서 다른 테이블의 기본키로 지정된 키
    • 외래키를 통해 테이블 간 참조가 이루어지며 관계를 맺게 된다. 만약 한 테이블에 모든 정보를 넣었을 때 불필요한 중복을 피하기 위해 테이블을 나누게 되고, 이 테이블 간 연결은 외래키를 통해 이루어진다.
  • 복합키(composite key)

    • 만약 특정 열로만 행을 식별하기 어려울 경우, 여러 열을 조합하여 기본키를 만드는데 이를 복합키라고 한다.
    • 예를 들어 대학에서 동일한 과목명을 가진 강의가 여러 개 있고, 한 교수님이 여러가지 강의를 담당한다고 할 때 교수님도 과목명도 기본키가 될 수는 없다. 이 경우 과목명 & 교수님을 조합하여 기본키로 만들 수 있다.

     

SELECT 문의 기본 형식

오라클 SQL 기준

  • SELECT * FROM TAB;

    모든 테이블을 포함한 구조 출력

  • DESC TABLE_NAME;

    해당 테이블의 구조 출력

  • SELECT * FROM TABLE;

    테이블 전체 내용 출력

  • SELECT COLUMN1, COLUMN2 FROM TABLE;

    해당 테이블에서 선택된 열만 출력. 열을 쉼표로 구분하여 여러 열 출력 가능.

  • SELECT DISTINCT COLUMN1, COLUMN2 FROM TABLE;

    중복된 데이터 삭제. 열이 여러개이면 선택된 열의 값이 모두 중복된 것만 제외하고 출력.

    (eg. MANAGER, 20 / MANAGER, 30 은 매니저가 중복되었지만 숫자가 다르므로 출력)

  • 연산식 사용하기, 별칭 붙이기

    예시

    SELECT ENAME, SAL, SAL * 12 + NVL(COMM,0) AS ANNSAL, COMM FROM EMP;
    

    SAL * 12 + NVL(COMM,0) 은 연산식을 추가하여 새로이 열을 출력하라는 명령이다. 월급(SAL)에 12를 곱한 뒤 커미션(COMM)을 더하여 연봉을 구하는 식인데, 이 때에 커미션 값이 null인 경우 계산되지 않게 된다. 그러므로 이 때에 NVL(col, default)을 사용하는데, 해당 열의 값이 null일 때엔 0으로 전제하고 계산하라는 의미이다.

    AS ANSAL 은 별칭을 붙이는 명령이다. 그냥 연산식만 써버리면 그대로 그것이 열의 이름이 된다. 열의 이름은 연산식과 다르게 설정하고자 하면 AS COLUMN_NAME 으로 설정하면 된다.

  • SELECT * FROM TABLE ORDER BY COLUMN1, COLUMN2;

    특정 열을 기준으로 정렬하고자 할 때 ORDER BY 를 사용한다. 정렬 기준은 특별히 지정하지 않으면 오름차순(ASC)이 되고 내림차순으로 지정하고자 하면 열 뒤에 DESC 를 붙여주면 된다.

    열을 여러 개 선택하면 앞에 오는 열을 우선순위로 먼저 정렬한 다음, 뒤에 오는 열을 후순위로 정렬한다.

WHERE절과 연산자

  • WHERE은 특정 조건을 만족하는 행을 출력하고자 할 때 사용된다.

  • SELECT * FROM TABLE WHERE COLUMN = VALUE;

    테이블에서 열의 값이 지정한 값과 일치하는 행만 출력. 여기서 등가연산자는 =이다.

    여기서 산술연산자를 추가적으로 사용할 수도 있다. 즉 단순히 val과 일치하는 것을 찾을 수도 있고, val * 12와 일치하는 값만 출력할 수도 있다.

  • ANDOR은 조건식을 여러개 쓸 때 사용된다. (갯수의 제한은 없다)

    • SELECT * FROM TABLE WHERE COLUMN1 = VALUE1 AND COLUMN2 = VALUE2;
    • 만약 같은 열에 대하여 and나 or이 많이 쓰일 때에는 IN을 사용하여 처리할 수 있다.
    • SELECT * FROM TABLE WHERE COLUMN = VALUE1 OR COLUMN = VALUE2 ...
    • SELECT * FROM TABLE WHERE COLUMN IN (VALUE1, VALUE2 ...);
  • 논리부정 연산자

    • SELECT * FROM TABLE WHERE NOT COLUMN = VALUE;

      SELECT * FROM TABLE WHERE COLUMN != VALUE;

      두 명령이 같은 결과를 출력한다.

  • 특정 범위 내의 값 출력하기

    • SELECT * FROM TABLE WHERE COLUMN BETWEEN VAL1 AND VAL2;

      VAL1(최솟값), VAL2(최댓값) 사이의 값 출력하기. 물론 비교연산자 <= 를 두번 사용하여 해도 된다.

  • LIKE 연산자

    • SELECT * FROM TABLE WHERE COLUMN LIKE 'S%';

    • SELECT * FROM TABLE WHERE COLUMN LIKE '_L%';

    • SELECT * FROM TABLE WHERE COLUMN NOT LIKE '%AM%';

      S로 시작하는 값 출력. %은 뒤에 몇 개의 문자가 오든 관계없고, 특정 개수를 지정하고 싶으면 _을 사용하면 된다.

      두번째 명령의 경우 L이 두번째 문자인, 즉 L앞에 문자 한개가 있고 그 뒤에는 몇개가 와도 상관없는 값을 출력하라는 의미이다.

      세번째 명령은 AM이 포함되어 있지 않은 값을 출력하는 명령이다.

  • IS NULL / IS NOT NULL

    • 값이 비어있거나 비어있지 않은 값만 출력하는 명령
    • SELECT * FROM TABLE WHERE COLUMN IS NOT NULL;

'SQL' 카테고리의 다른 글

[Oracle SQL] 다중행 함수, 그룹화 group by, having  (0) 2019.05.17
[Oracle SQL] DECODE, CASE  (0) 2019.05.16
[Oracle SQL] 숫자함수, 날짜함수  (0) 2019.05.16
[Oracle SQL] 문자 함수  (0) 2019.05.16
SQL Command(+PostgreSQL)  (0) 2019.05.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함