1. SQL 연산순서
- FROM
- WHERE
- Group by
- Having
- Select
- Order by
- DML : Select, insert, update, delete (데이터 조작어)
- DDL : Alter, create, modify, drop (데이터 정의어)
- TCL : Rollback, commit (데이터 제어어)
- DCL : Grant, revoke (트랜잭션 제어어)
2. Distinct
어떤 컬럼값들의 중복을 제거한 결과를 출력한다.
Select distinct col from table;
Select distinct col1,col2 from table; 의 경우엔 col1과 col2의 값이 모두 같지 않은 것만 출력함 (주의)
3. Alias
Select 절에서 사용가능, where 절에서는 사용불가!!
Select col as name from table ; = select col name from table;
4. concat
Select col1 + col2 + col3 from table; (SQL Server)
Select col1 || col2 || col3 from table; (oracle)
Select concat(col1, col2) from table; *연산자가 2개!! 기억!!
5. 논리연산자
NOT : ~가 아니다
AND : A 그리고 B (둘다 만족)
OR : A 또는 B (둘 중 하나만 만족해도 OK!!)
6. SQL 연산자
A between B and C : B <= A <= CA in (1,2,3) : A=1 or A=2 or A=3A like '_ble*' : A의 값 중 2,3,4 번째 값이 ble인 모든 데이터 출력
7. escape
and email like '@_%' escape '@'* : 아무 문자나 가능
8. rownum, top
oracle에선 where절 옆에 rownum
SQL server의 경우 select 옆에 top
9. null의 정의
모르는 값, 정의되지 않은 값 (공백이나 0과는 다르다)
산술연산에서 null이 들어가게 되면 null이 출력된다.
*null +2', null*4, null + null 모두 결과는 null
조건절에 null이 들어가게 되면 false를 반환함
*null = null, null = 2
집계함수(sum, count, min, max...)에서 null은 데이터 대상에서 제외된다.
정렬시에는 오라클에서는 가장 큰 값이 되고, SQL Server에서는 가장 작은 값이 된다.
Nvl (col, 0) : col이 null이면 0 반환, 아니면 col 반환
Nvl2 (col, 1, 0) : col이 null이면 0 반환, 아니면 1 반환
Isnull (col, 0) : col이 null이면 0 반환, 아니면 col 반환
Nullif(col, 0) : col이 0이면 null 반환, 아니면 col 반환
Coalesce(col1, col2, col3) : null 아닌 첫번째 값 반환
10. 정렬
느려질 수 있다
가장 마지막에 실행
null이 어디에 오는지
컬럼명으로 정렬, 앞의 기준이 같을 때 그 다음 컬럼으로 정렬
기본값은 asc (오름차순), desc는 내림차순
Order by col1, col2 desc
출력순서 (번호)로 정렬, select 절의 출력순서로 정렬순서를 지정
Order by 2, 1 desc
11. 숫자함수
Round (222, 45, 1) 소수점 둘째자리에서 반올림하여 첫째자리까지 출력
Round (225, 67, 0) 소수점 첫째자리에서 반올림하여 정수만 출력
- 1 파라미터는 1의 자리에서 반올림하여 정수를 출력
Ceil (oracle) / ceiling (SQL Server) 올림함수, 파라미터 사용법은 round와 같음
Floor : 버림함수, 파라미터 사용법은 round와 같음
12. 문자함수
Lower , upper : 소문자로, 대문자로.
Trim, ltrim, rtrim : 양쪽공백제거 왼쪽, 오른쪽 공백제거
Lpad, rpad : 특정 자리를 정하고, 왼쪽/오른쪽의 공백을 채워주는 함수
Select lpad ('A' 5, '*') from dual;
****A, rpad면 A****
Substr : SELECT SUBSTR('korea',2,2) FROM DUAL; or이 출력
Instr : SELECT INSTR ('CORPORATE FLOOR','PO') AS idx FROM DUAL; 4가 출력
13. 날짜함수
To_char : 날짜형 데이터를 문자로 출력
- Select to_char (sysdate, 'YYYY MM DD') from dual;
To_date : 문자형 데이터를 날짜형으로 출력
- select to_date ('2022-09-22') from dual;
sysdate (oracle), getdate() (SQL Server)
14. 조건문
Decode
- select decode (col1, 'A',1,'B',2,3) from dual;
- col이 A면 1, B면 2, 아니면 3
case
case when col='A' then 1
when col='B' then 2
else 3 end; 서로 같다.
case col when 'A' then 1
when 'B' then 2
else 3 end;
15. 집계함수
Count, min, sum, max 등
- null은 포함되지 않는다.
- (1, null, 2, 3, null)의 데이터를 기준으로 결과는 다음과 같다.
Count () : 3
Sum () : 6
Avg() : 2
Min() : 1
Max() : 3
> Select sum (col1 + col2 + col3) from dual;
여기에서 먼저 sum을 생각하지 말고 col1 + col2 + col3을 먼저 생각해보면 첫번째 행은 null + null + 1 이기에 null이 반환되고, 마지막 세번째 행도 마찬가지다. 그러므로 두번째 행의 2+3+2의 값인 7이 결과가 된다.
반대로 sum(col1) + sum (col2) + sum (col3)의 값은 3+3+3이므로 9가 출력된다. 이 차이를 알아야 함.
16. 그룹바이 group by
집약기능을 가지고 있음 (다수의 행을 하나로 합침)
Group by 절에 온 컬럼만 select 절에 올 수 있음
소스 참조
SQL 쪽집게 강의 44개 핵심포인트 : https://youtu.be/BQxAxMnHByU?si=AHZj5Xbu-jSugM9e
위 강의를 보고 정리했습니다.
'Study > SQL' 카테고리의 다른 글
[ Oracle ] 프로시저란? (0) | 2023.10.25 |
---|---|
[ SQLD ] 빈출 개념 정리 #2 (0) | 2023.08.21 |
성공적인 SQL Injection을 위한 SQL 문법 - ORDER by 절, 레코드 출력 개수 제한 (0) | 2023.04.16 |
성공적인 SQL Injection을 위한 SQL 문법 - 조건문, 서브쿼리 (0) | 2023.04.15 |
성공적인 SQL Injection을 위한 문법 - 문자열함수 (0) | 2023.04.15 |