이 포스트는 인프런의 성공적인 SQL 인젝션 공격을 위한, SQL 기본 문법 강의를 보고 작성하였습니다!
1. 함수
(1) 문자열 함수
- SubString
① 사용법
DBMS | 함수 | 사용법 |
ORACLE | SUBSTR SUBSTRB |
함수 (문자열, 시작위치, 길이) |
MSSQL | SUBSTRING | |
MYSQL | SUBSTRING SUBSTR MID |
② 사용예시
③ 특징
1) 0부터 시작하지 않고 1부터 시작한다.
(2) 문자 아스키코드 변환 함수
① 사용법
DBMS | CHAR → ASCII | ASCII → CHAR |
ORACLE | ASCII | CHR |
MSSQL | ASCII | CHAR |
MYSQL | ASCII, ORD | CHAR |
② 사용 예시
∨bin함수: 출력결과를 이진수로 보여준다.
(3) count 함수
① 사용법
select count(column) from table명;
② 사용 예시
(3) 길이 함수
① 사용법
DBMS | 함수 |
ORACLE | LENGTH |
MSSQL | LEN |
MYSQL | LENGTH |
② 사용 예시
select name, length(email) from member;
∨ 예상 출력 결과: name 을 출력하고 이메일의 길이를 출력
③사용하는 이유: 임계값 둘다 존재해야 for문을 돌릴때 자동화 도구를 제작하기 쉬움
2. 조건문
(1) 사용법
DBMS | 구문 |
ORACLE | DECODE 함수, CASE WHEN 구문 |
MSSQL | CHASE WHEN 구문 |
MYSQL | IF 함수, CASE WHEN 구문 |
(2) 형식
case when [CONDITION] then [TRUE] else [FALSE] end
TRUE: 참일 경우 실행되는 부분
FALSE : 거짓일 경우 실행되는 부분
3. 서브쿼리
최초의 select절을 메인쿼리라고 하고 그다음에 오는 것이 서브쿼리라고 칭한다.
SELECT COLUMN1, COLUMN2 FROM TABLE WHERE [COLUMN]=(SELECT COLUMN FROM TABLE WHERE COLUMN =[VALUE])
(1) 종류
SELECT (SubQuery) FROM (SubQuery) a WHERE [COLUMN]=(SubQuery)
① 인라인 뷰: from에 있는 서브쿼리
∨ 다수의 레코드와 다수의 칼럼
⇒여러개를 물리적으로 저장한다.
위 예시에서는 a가 인라인뷰 (반환되는 테이블) , from 절이 실행되 a가 테이블로 실행
∨ 인라인 뷰는 가상테이블이다.
▶사용예시
select * from (select * from member)a;
★ 별칭(a)을 줘야함
select * from (select * from member)a;
select * form (select * from member)a where a.seq=1;
② 스칼라 서브쿼리: select에 있는 서브쿼리
∨ 1개의 레코드와 1개의 칼럼
→ 두개부터는 에러가 발생
★union 은 두개의 레코드 가능.
▶사용예시
1)
select name, (select version()) from member;
*select version(): mysql의 버전을 확인하는 명령어
2)
select name, (select email from member where seq=a.seq) from member a;
← name 값 하나가 a라고 지칭함. a의 seq를 받아서 그것의 email을 반환하는 코드
③ 일반적인 서브쿼리: where 절에서 사용하는 서브쿼리
★=은 단일만 가능한데 in이 있으면 다중행을 비교가능
∨ 단행 (하나의 레코드)
▶형식
select * from member where seq=( );
▶사용예시
select * from member where seq=(select seq from member where name='guest');
∨ 다행(여러개의 레코드)
-사용예시
select * from member where seq in(select seq from member);
3. ORDERBY
: 정렬함수
(1) 형식
SELECT COLUMN1, COLUMN2 FROM TABLE ORDER BY COLUMN [ASC/DESC]
ASC: 오름차순
DESC: 내림차순
기본설정은 오름차순이다.
(2) 특징
∨ 해당 COLUMN을 기준으로 정렬
∨ 기준이 되는 값만 비교→ 동일한 조건에 대해서는 정렬이 되어지지 않음
∨ 칼럼 명을 굳이 안 적어도 되고 숫자로 해도 된다.
예를 들어)
1 → 첫번째 컬럼
2 → 두번째 컬럼
▶예시
정렬 비교를 위해 맨끝에 칼럼을 추가했다.
seq를 기준으로 비교하는 경우 같은 seq를 가진 crehacktive와 guest칼럼은 정렬을 실행하지 않는다.
(3) 여러개를 사용하는 방법
: 동일한 조건에서도 다른 방법으로 또 정렬하기 위해 사용
▶컬럼을 여러개 사용하는 방법:
select * from member order by seq,name;
(4) 에러 발생 경우
① select 절에서 선택한 칼럼 보다 큰 숫자 선택한 경우
▶예시
select seq, name from member order by 3;
member의 칼럼 갯수는 3개지만 select 절에서 2개만 골랐으므로 2까지만 입력가능하다.
4. 레코드 출력 개수 제한
(1) 사용법
DBMS | 키워드 |
ORACLE | ROWNUM |
MSSQL | TOP |
MYSQL | LIMIT |
(2) 형식
SELECT COLUMN1, COLUMN2 FROM TABLE LIMIT [OFFSET], [ROW_COUNT]
∨ 시작 위치 조절시 → OFFSET: 위치값 (c언어 배열의 인덱스값 같은것)
그렇지 않은 경우, 0부터 시작한다.
SELECT COLUMN1, COLUMN2 FROM TABLE LIMIT [ROW_COUNT]
∨ ROW_COUNT: 레코드 갯수
(3) 사용예시
select * from member limit 1,1;
select * from member limit 1,4;
'WEB > SQL' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit 문제 풀이 (0) | 2021.05.26 |
---|---|
[SQL INJECTION] SQL 기본 문법 정리 Ⅴ (예제) (0) | 2020.08.23 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅲ (연산자) (0) | 2020.08.22 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅱ (0) | 2020.08.22 |
[SQL INJECTION] SQL 기본 문법 정리 Ⅰ (0) | 2020.08.21 |