성공적인 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
*다음 강의를 수강하고 정리한 내용입니다