본문 바로가기
SQLD

[SQL 기본과 활용] BASIC DML(SELECT)

by orange_han 2021. 3. 23.

테이블의 구조 확인

DESCRIBE(=DESC) + 테이블 이름; 

→이름 / 널 / 데이터 타입 등 출력

 

 

SELECT

 - 테이블에 존재하는 레코드의 값을 조회
 - SELECT [ALL/DISTINCT] 칼럽1, 칼럼2, ... FROM 테이블명
EX)

SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION

FROM PLAYER;

"PLAYER 테이블에서 PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION 울 출력해라" 라는 의미

 

  • ALL : 중복데이터 모두 출력(DEFAULT)

DISTINCT : 중복 데이터를 1건으로 출력
 - DISTINCT 키워드는 첫 칼럼의 앞에 위치해야 함
 - 칼럼의 조합에 대해 중복 체크

 - NULL 값도 하나의 값으로 간주함

 

  • SELECT *
     - SELECT * FROM 테이블명;
     - 해당 테이블의 모든 칼럼 조회

 

  • ALIAS(별칭)
     - 조회 결과에 일종의 별칭(ALIAS)을 부여하여 칼럼 레이블을 변경함
     - 칼럼명과 별칭 사이에 AS 키워드를 사용(optional)
     - 별칭이 공백, 특수문자 등을 포함하는 경우 반드시 큰 따옴표 사용

ex)

SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키

FROM PLAYER;

=

SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키( AS 생략 가능)

FROM PLAYER;

=

SELECT PLAYER_NAME AS "선수 이름", POSITION AS "위치", HEIGHT AS "키"

FROM PLAYER;

 

  • ORDER BY
     - 출력시 정렬 기준 설정
     - SQL 문장의 맨 마지막에 위치
     - 오름차순 : ASC(Default 값 → 생략가능) / 내림차순 : DESC

 

*참고)ORACLE 에서 NULL 값은 가장 큰 값으로 취급됨

 

ex)선수명과 키를 키 오름차순으로 출력

SELECT PLAYER_NAME, HEIGHT

FROM PLAYER

ORDER BY HEIGHT ASC;

=

SELECT PLAYER_NAME, HEIGHT

FROM PLAYER

ORDER BY HEIGHT;(ASC 생략 가능)

=

SELECT PLAYER_NAME(1), HEIGHT(2)

FROM PLAYER

ORDER BY 2;(칼럼 index 값으로 지정 가능)

*SELECT 문에 없는 필드도 ORDER BY 절에 사용 가능!!

 

 

  • WHERE 절
     - 특정 조건을 만족하는 데이터를 한정하기 위해 사용
     - SELECT ~ FROM ~ WHERE 형태로 활용
    ex)
    SELECT PLAYER_ID, POSITION
    FROM PLAYER
    WHERE POSITION = 'GK';

 

연산자

구분 연산자 의미
산술연산자 + 덧셈
_ 뺄셈
* 곱하기
/ 나누기
비교연산자 = 같다
<> 같지 않다
> 크다
>= 크거나 같다
< 작다
<= 작거나 같다
논리연산자 AND 두 조건이 모두 참이면 참
OR 한 조거만 참이어도 참
NOT 제시된 조건이 거짓이어야 참
우선순위 연산자
1 괄호 ()
2 NOT 연산자
3 비교 연산자, SQL 연산자
4 AND
5 OR
  • 산술연산자
     - NUMBER와 DATE 자료형에 적용
    ex) *, /, +, -

ex)

SELECT PLAYER_NAME

FROM PLAYER

WHERE ( (HEIGHT-100)*0.9 - WEIGHT ) > 0

;

SELECT PLAYER_NAME, HEIGHT, (HEIGHT-100)*0.9 AS "적정 체중"

FROM PLAYER

*NULL값에 대한 산술 연산의 결과는?

→NULL은 없는 값이므로 NULL에 대한 연산값은 NULL

 

 

  • 비교연산자
    - 비교연산자 우선순위
       =, <>, ≥, ≤, >, <
    - 모든 자료형에 대해 적용
    - 문자열의 크기 비교는 사전 순 / Date자료형은 날짜순으로 수행됨

*NULL에는 비교 연산자 사용 불가 >> IS NULL / IS NOT NULL 로 사용

 

ex)

SELECT PLAYER_ID, PLAYER_NAME, NATION

FROM PLAYER

WHERE NATION = NULL

; →ERROR

 

SELECT PLAYER_ID, PLAYER_NAME, NATION

FROM PLAYER

WHERE NATION IS NULL;

SELECT PLAYER_ID, PLAYER_NAME, NATION

FROM PLAYER

WHERE NATION <> NULL;

; →ERROR

SELECT PLAYER_ID, PLAYER_NAME, NATION

FROM PLAYER

WHERE NATION IS NOT NULL;

 

 

  • 논리 연산자
     - 모든 자료형에 적용
     - NOT, AND, OR ( 우선순위 : NOT > AND > OR)
     - 진리표

*NULL을 포함한 진리표는?

참 AND NULL → NULL

거짓 AND NULL → 거짓(이미 거짓이니까)

참 OR NULL → 참

거짓 OR NULL → NULL(참일 수도 있음

NOT NULL → NULL

 

 

  • SQL 연산자
구분 연산자 의미
SQL 연산자 || 두 문자열을 하나로 연결한 문자열 반환
BETWEEN a AND b a와 b 사이의 값 반환 (a, b 포함)
cf) NOT BETWEEN a AND b
IN (list) list에 있는 값 중 하나만 일치해도 참
cf) NOT IN (list)
LIKE ' 비교 문자열' 비교 문자열과 일치하면 참
와일드 카드( _ , % ) 사용가능
cf) NOT LIKE ' 비교 문자열 ' 
IS NULL NULL 값인 경우 참
cf) IS NOT NULL

 - || : 합성(연결)연산자 : 문자열과 문자열을 연결함

방법1 : CONCAT(str1, str2) ** 2개의 문자열만 연결 가능*

방법2 : str1\\str2 ** 여러개 가능*

ex)

SELECT PLAYER_NAME, HEIGHT \\ 'Cm' AS "선수 신장"

FROM PLAYER

;

 

 - BETWEEN

ex)

SELECT PLAYER_NAME 선수이름, POSITION 포지션, HEIGHT 키

FROM PLAYER

WHERE HEIGHT BETWEEN 170 AND 180

;

(HEIGHT ≥ 170 AND HEIGHT ≤ 180의 의미)

SELECT PLAYER_NAME 선수이름, POSITION 포지션, HEIGHT 키

FROM PLAYER

WHERE HEIGHT NOT BETWEEN 170 AND 180

;

(HEIGHT <170 OR HEIGHT>180 의 의미)

 

 - IN : OR로 너무 많이 묶여 있는 경우

ex)

SELECT PLAYER_NAME 선수이름, TEAM_ID, POSITION

FROM PLAYER

WHERE TEAM_ID IN ('K04', 'K05');

SELECT PLAYER_NAME 선수이름, TEAM_ID, POSITION

FROM PLAYER

WHERE (TEAM_ID, POSITION) IN (('K04', 'GK'), ('K04', 'MF'));

*('K04', 'GK'), ('K04', 'MF') 가 포함된 모든 것

 

 - NOT IN

ex)

SELECT PLAYER_NAME 선수이름, TEAM_ID, POSITION

FROM PLAYER

WHERE (TEAM_ID, POSITION) NOT IN (('K04', 'GK'), ('K04', 'MF'));

*('K04', 'GK'), ('K04', 'MF')를 뺀 모든 행 출력

"대치된 두개의 연산 사이에 공백이 있다면 NULL값을 의심할 것(총 50개의 행이 있는 테이블에서 IN연산자 사용했을 때 30개 행, NOT IN 연산자 사용했을 때 18개 행이 나온다면 2개 값은 NULL 값) >> IS NULL 주의"

 

 - LIKE ( 문자열에 대한 질의문을 만들 때!)

문자열 비교 연산

와일드카드 사용가능

'%' : 임의의 문자 N개 ex) a% > apple

'' : 임의의 문자 1 ex)a > ai

ex)

SELECT PLAYER_NAME

FROM PLAYER

WHERE PLAYER_NAME LIKE '김';

*와일드카드 없이 사용하면 =과 똑같이 적용

SELECT PLAYER_NAME

FROM PLAYER

WHERE PLAYER_NAME LIKE '김%';

SELECT PLAYER_NAME

FROM PLAYER

WHERE PLAYER_NAME LIKE '김_';

 

 

  • ROWNUM (TOP N개의 레코드 변환)
     - 반드시 부등호(<, <=, >, >=) 사용 (등호(=)는 ROWNUM = 1 일때만 사용 가능)
     - ROWNUM(행의 NUMBER) : 사용자가 아닌 시스템이 관리하는 Pseudo Column

 

체번(번호를 따는 것), 출력 개수 지정 등에 사용

ex)

SELECT PLAER_NAME, ROWNUM

FROM PLAYER

;

SELECT PLAYER_NAME

FROM PLAYER

WHERE ROWNUM < 4;

SELECT PLAYER_NAME

FROM PLAYER

WHERE ROWNUM ≤ 3;

...

 

 - 테이블 내의 UNIQUE한 값 설정에도 사용 가능

ROWNUM 을 이용하여 ID필드 생성

UPDATE 테이블명 SET 칼럼명 = ROWNUM;

ex)

ALTER TABLE PLAYER ADD (ROW_ID NUMBER);

*PLAYER테이블 변경(ALTER), 추가(ADD), NUMBER형태의 ROW_ID칼럼 생성

UPDATE PLAYER SET ROW_ID = ROWNUM;

*ROW_ID칼럼을 ROWNUM으로 채운다

SELECT PLAYER_NAME

FROM PLAER

WHERE ROW_ID = 3;

'SQLD' 카테고리의 다른 글

[SQL 기본과 활용] TCL/DCL  (0) 2021.04.02
[SQL 기본과 활용] Function  (0) 2021.03.29
[SQL 기본과 활용] DDL  (0) 2021.03.29
[SQL 기본과 활용] BASIC DML(INSERT, DELETE, UPDATE)  (0) 2021.03.26
[SQL 기본과 활용] 개요  (0) 2021.03.23

댓글