본문 바로가기

강의

성공적인 SQL 인젝션 공격을 위한, SQL 기본 문법

주로 쓰는 데이터베이스 : 관계형 데이터베이스, NOSQL

 

[용어] 주로 테이블-레코드-컬럼

 

 

DB vs DBMS

DB : 데이터베이스 - 데이터 저장

 

DBMS : 데이터베이스 management system 관리 시스템 - 데이터베이스의 데이터에 접근할 수 있도록 해주는 도구 

           : 많은 기능을 제공 (데이터 추가,수정,삭제,조회,데이터 무결성 유지,트랜젝션 관리,백업 및 복원,보안)

 

 

 

 

 

 

 

1. 데이터베이스/테이블 생성, 삭제

- 데이터베이스 생성 

CREATE DATABASE [이름] ;

 

 - 테이블 생성

CREATE TABLE [이름] ([COLUMN명] [데이터 타입]) ;

ex) CREATE TABLE test_tb (name char(20), age int) ;

 

- 데이터베이스/테이블 삭제

DROP [DATABASE/TABLE] [이름] ;

 

 

2. 데이터 삽입/조회/수정/삭제

- 데이터 삽입

INSERT INTO [테이블 명] ([COLUMN1] ...) VALUES ([DATA1]...) ;

 

- 데이터 조회

SELECT [COLUMN1] FROM [테이블 명] WHERE [조건] ;

ex) ~~ where id='admin' 

 

- 데이터 수정

UPDATE [테이블 명] SET [COLUMN1]=[DATA1] WHERE [조건] ;

 

- 데이터 삭제

DELETE FROM [테이블 명] WHERE [조건] ;

 

 

3. 연산자 

- 산술 연산자 : + , - , * , /

- 비교 연산자 : > , = , <> , != (같지 않다)

- 논리 연산자 : NOT, AND,OR

- 비트 논리 연산자 : & (AND), | (OR), ^ (XOR) 

- 연결 연산자 : CONCAT(문자열1, 문자열2 ...) / || , + , 공백 

ex) MYSQL은 'te' 공백 'st'

- IN 연산자 : IN, NOT IN

ex) SELECT name, email FROM member WHERE id in ('admin' , 'guest')

- LIKE 연산자 : %(모든 문자) , _ (하나의 문자)
ex) id like 'ad%'

 

 

4. 함수 

- 문자열 함수 : 함수(문자열,시작위치,길이)
ex) ORACLE - SUBSTR, SUBSTRB // MSSQL - SUBSTRING // MYSQL - SUBSTRING, SUBSTR, MID 

 

- 문자, 아스키 코드 변환 함수 

ex) ORACLE - ASCII <-> CHR // MSSQL - ASCII <-> CHAR // MYSQL - ASCII, ORD <-> CHAR 

 

- COUNT 함수 

SELECT COUNT(COLUMN) FROM [TABLE] 

 

- 길이 함수 

ex) ORACLE - LENGTH // MSSQL - LEN // MYSQL - LENGTH

 

 

5. 조건문  

공통적으로 CASE WHEN 구문 

ex) CASE WHEN [조건] THEN [TRUE일 경우 실행되는 구문] ELSE [FALSE일 경우 실행되는 구문] END 

 

 

6. 서브쿼리

메인쿼리 안에 또 하나의 SELECT 구문을 서브쿼리

 

SELECT, FROM, WHERE 절에 사용될 수 있으며 명칭이 다름

 

- 단일 행 서브쿼리 - 하나의 레코드만 반환해야됨

- 다중 행 서브쿼리 - 다수의 레코드 반환 가능 (IN 안에 해당하는거)

 

 

7. ORDER BY절을 이용한 정렬

SELECT COLUMN1, COLUMN2 FROM TABLE ORDER BY COLUMN [ASC/DESC]

오름차순 : ASC(ENDING) 아무것도 안쓰면 기본 설정

내림차순 : DESC(ENDING) 

 

 

8. 레코드 출력 개수 제한 

ORACLE : ROWNUM

MSSQL : TOP

MYSQL : LIMIT 

 

ex) 검색 엔진을 사용할 때 페이지 넘길 수 있게 단위별로 나누게 

 

SELECT COLUMN1, COLUMN2 FROM TABLE LIMIT [OFFSET시작위치], [레코드 개수]

(offset : 0부터 시작함/ 두번째부터 시작하고 싶으면 1 줘야함)

 

SELECT COLUMN1, COLUMN2 FROM TABLE LIMIT [레코드 개수] // 하나만 사용될 경우 레코드 개수만 사용됨 

 

 

 

 

https://www.inflearn.com/course/lecture?courseSlug=SQL-%EC%9D%B8%EC%A0%9D%EC%85%98-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95&unitId=29566&tab=curriculum

 

*다음 강의를 수강하고 정리한 내용입니다