테이블의 구조 확인
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 |
댓글