본문 바로가기

백엔드 학습 과정/Section 2 [재귀함수, 자료구조, 네트워크]

#6-2. SQL 문법 정리

[SQL 문법]

1. <SELECT> 키워드 : 데이터를 선택하는 키워드

Q1. 특정 테이블이 가진 모든(*) 컬럼(Field)를 가져와라

>> SELECT * FROM 테이블명;

 

Q2. 특정 테이블에서 특정 컬럼을 가져오기

>> SELECT 컬럼명 FROM 테이블명;

 

Q3. 특정 테이블에서 특정 컬럼과 다른 값 가져오기

>> SELECT DISTINCT 컬럼명 FROM 테이블명;

 

2. <WHERE> 키워드 : 테이블의 특정 컬럼 데이터 중, 조건에 충족한 레코드만을 추출.

Q1. 테이블 A의 컬럼B의 값이 C인 데이터를 가져와라

SELECT * FROM A

WHERE B = C;

 

Q2. 특정 테이블A에서 B컬럼의 값이 C가 아닌 데이터 가져오기

SELECT * FROM A

WHERE NOT B = C;

 

Q3. 특정 테이블A에서 컬럼B 값이 1, 컬럼C 값이 2 인 데이터를 가져와라

SELECT * FROM A

WHERE A = 1

AND B=2;

 

Q4. 특정 테이블A에서 컬럼 B 값이 1 이거나 컬럼 C 값이 2 인 경우

SELECT * FROM A

WHERE B = 1

OR C = 2;

 

3. < ORDER BY > 키워드 : 데이터 값을 정렬하는 역할 // ASC : 오름차순, DESC 내림차순

Q1. 테이블A에서 컬럼B의 값을 오름차순으로 가져오기.

SELECT * FROM A

ORDER BY B;

 

Q2. 테이블A에서 컬럼B의 값을 내림차순으로 가져오기.

SELECT * FROM A

ORDER BY B DESC;

 

Q3. 테이블A에서 오름차순으로 데이터를 가져오고 컬럼B 기준으로 중복된다면 컬럼C를 기준으로 가져온다.

SELECT * FROM A

ORDER BY B, C;

 

4. <INSERT INTO> 키워드 : 이미 존재하는 테이블에 새로운 레코드(row, 행)을 삽입

INSERT INTO 테이블명

(추가할_기존의컬럼1, 추가할_기존의컬럼2, 추가할_기존의컬럼3)

VALUES (추가할_값1, 추가할_값2, 추가할_값3);

 

5. <NULL> 키워드 : 값이 없는 필드(컬럼) 찾기

Q1. 테이블 A의 데이터 중 컬럼명B이 빈 상태인 데이터를 불러오라

SELECT * FROM A

WHERE B IS NULL;

 

Q2. 테이블A의 컬럼들 중 컬럼A가 빈 상태가 아닌 데이터를 불러와라

SELECT * FROM A

WHERE B IS NOT NULL;

 

6. <UPDATE SET> 키워드 : 기존 레코드를 변경할 때

기본 구조

UPDATE 테이블

SET 바꿀_컬럼명 = 새로운_값;

 

Q1. 테이블A에서 컬럼명B의 값이 2인 데이터의 컬럼명C의 값을 3으로 바꾼다.

UPDATE A

SET C = 3

WHERE B =2

 

Q2. 테이블A에서 컬럼명B의 값을 2, 컬럼명C의 값을 3으로 바꾼다.

UPDATE A

SET B = 2, C = 3;

 

7. <DELETE> 키워드 : 기존 레코드를 삭제할 때

Q1. 테이블A의 모든 행 중에 B라는 값을 가진 컬럼 C를 지워라.

DELETE FROM A

WHERE C = B;

 

8. <FUNCTION> 키워드 : 최소 값, 최대 값, 총 개수, 평균 값, 합계 구하는 키워드

Q1. 테이블A 에서 컬럼B의 값들 중 가장 작은 값을 가져와라.

SELECT MIN (B)

FROM A;

 

Q2. 테이블A 에서 B컬럼의 값들 중 가장 큰 값을 가져와라.

SELECT MAX (B)

FROM A;

 

Q3. 테이블A 에서 B컬럼의 값이 C인 개수를 가져와라

SELECT COUNT (*)

FROM A

WHERE B = C;

 

Q4. 테이블 A에서 B컬럼의 평균 값을 가져와라.

SELECT AVG(B)

FROM A;

 

Q5. 테이블 A의 B 컬럼의 합계를 가져와라

SELECT SUM(B)

FROM A; 

 

9. <LIKE> 키워드 : 지정된 패턴을 검색하기 위해 사용

Q1. 테이블A의 컬럼B의 값들 중 A로 시작하는 값을 가져와라.

SELECT * 

FROM A

WHERE B LIKE 'A%';

 

Q2. 테이블 A의 컬럼 B 값들 중 C로 끝나는 값을 가져와라

SELECT *

FROM A

WHERE B LIKE '%C';

 

Q3. 테이블 A의 컬럼 B 값들 중 C를 가진 값들을 가져와라

SELECT *

FROM A

WHERE B LIKE '%C%';

 

Q4. 테이블 A의 컬럼 B 값들 중 C로 시작하거나 D로 끝나는 값들을 가져와라

SELECT *

FROM A

WHERE B LIKE 'C%D';

 

Q5. 테이블 A의 컬럼 B 값들 중 C로 시작하지 않는 값들을 가져와라.

SELECT *

FROM A

WHERE B NOT LIKE 'C%';

 

10. <Wildcards> 키워드 : 하나 이상의 문자를 대체 혹은 지정된 패턴을 검색

Q1. 테이블A의 컬럼B의 값들 중 A가 두번째에 포함된 값을 가져와라.

SELECT *

FROM A

WHERE B LIKE '_A%';

 

Q2. 테이블A의 컬럼B의 값들 중 C or D or E로 시작하는 값을 가져와라.

SELECT *

FROM A

WHERE B LIKE '[CDE%]';

 

Q3. 테이블A의 컬럼B의 값들 중 A ~ F로 시작하는 값을 가져와라.

SELECT *

FROM A

WHERE B LIKE '[A-F%]';

 

Q4. 테이블A의 컬럼B의 값들 중 C or D or E가 첫번째 문자가 아닌 값을 가져와라.

SELECT *

FROM A

WHERE B LIKE '[!CDE%]';

 

11. <SQL IN> 키워드 : 특정 컬럼에 여러 값을 지정할 수 있다.

Q1. 테이블A의 컬럼B의 값이 1 or 2인 값을 가져와라

SELECT *

FROM A

WHERE B IN (1, 2);

 

Q2. 테이블A의 컬럼B의 값이 1 or 2가 포함되지 않은 값을 가져와라

SELECT *

FROM A

WHERE B NOT IN (1, 2);

 

12. <SQL BETWEEN> 키워드 : 주어진 범위 내에서 값을 선택 (숫자, 문자, 날짜)

Q1. 테이블A의 컬럼B의 값이 10과 20 사이인 데이터를 가져와라

SELECT *

FROM B

WHERE B BETWEEN 10 AND 20;

 

Q1. 테이블A의 컬럼B의 값이 10과 20 사이가 아닌 데이터를 가져와라

SELECT *

FROM B

WHERE B NOT BETWEEN 10 AND 20;

 

13. <SQL ALIAS> 키워드 : 테이블 또는 테이블의 컬럼(열)에 임시 이름을 지정하는데 사용 // AS ~

Q1. 테이블A의 컬럼들 중 컬럼 B을 C 라고 부르겠다.

SELECT B AS C

FROM A;

 

Q2. 테이블A를 테이블 B 라고 부르겠다.

SELECT * 

FROM A AS B;

14. <SQL JOIN> 키워드 : 테이블 간의 관계를 나타내는 키워드

[OUTER JOIN]

 

<LEFT JOIN>

좌측 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워진다.

 

[작성 형식]

SELECT *조회할 컬럼*

FROM *기준테이블*

LEFT JOIN *대상 테이블*

ON A.컬럼1 = B.컬럼1; // *조건문*

SELECT *

FROM instructor

LEFT JOIN teaches

ON instructor.id = teaches.id;

 

<RIGHT JOIN>

우측 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워진다.

 

[작성 형식]

SELECT *조회할컬럼* 

FROM *비교대상_테이블*

RIGHT JOIN *기준_테이블*

ON B.컬럼1 = A.컬럼1; // *조건문*

SELECT *

FROM instructor

RIGHT JOIN teaches

ON instructor.id = teaches.id;

 

[INNER JOIN]

테이블1, 테이블2에서 SELECT된 컬럼이 공통적으로 존재하는 컬럼의 값만 결합해라.

 

[작성 형식]

SELECT *해당되는 모든 컬럼을 가져온다*

FROM 테이블1 (기준)

INNER JOIN 테이블2 (합쳐질_테이블)

ON 테이블1.공통적인_컬럼 = 테이블2.공통적인_컬럼;

SELECT *

FROM 사원 

INNER JOIN 직책

ON/WHERE 사원.직책 번호 = 직책.직책 번호;

 

15. <SQL GROUP BY> 키워드 : 데이터를 가져와서 어느 기준으로 정렬할지.

Q1. 국가별로 고객의 수를 나타내서 가져와라.

SELECT COUNT (CustomerID), Country // *컬럼1, 컬럼2

FROM 테이블

GROUP BY Country // *컬럼2*

 

Q2. 국가별로 고객이 많은 순으로 정렬해서 가져와라.SELECT COUNT (CustomerID), CountryFROM 테이블

GROUP BY Country

ORDER by COUNT (CustomerID) DESC;

 

16. <SQL HAVING> 키워드 // 레코드(row, 행)을 필터링하는 키워드. GROUP BY 뒤에 작성되어야 한다.

1. HAVING은 전체 결과에 대해 필터,  WHERE은 개별 레코드(row,행)에 필터.

2. HAVING은 그룹화/집계 발생 이후 레코드를 필터, WHERE은 그룹화/집계 발생 이전 레코드를 필터

 

[HAVING 키워드 작성 양식]

SELECT 컬럼, 그룹함수(컬럼)

FROM 테이블

[WHERE 조건]

[GROUP BY GROUP대상]

[HAVING 그룹함수 포함조건]

[ORDER BY 정렬대상 ASC/DESC]

 

[SQL 그룹 함수]

함수명 기능 사용
COUNT 행의 수를 계산한다 COUNT(컬럼)
MAX 값들 중에 최대 값을 반환 MAX(컬럼)
MIN 값들 중에 최소 값을 반환 MIN(컬럼)
AVG 평균 값을 계산한다. AVG(컬럼)
SUM 총 합계를 계산한다. SUM(컬럼)
VARIANCE 분산을 계산한다. VARIANCE(컬럼)
STDDEV 표준편차를 계산한다. STDDEV(컬럼)

 

[SELECT문 실행 순서]

데이터를 조회하는 SELECT문의 실행/동작 순서.

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

 

EX) 

SELECT CustomerId(컬럼1), AVG*그룹함수*(컬럼2)                              #5.

FROM invoices(테이블)                                                                            #1.

WHERE CustomerId(컬럼1) >= 10                                                           #2.

GROUP BY CustomerId (컬럼1)                                                              #3.

HAVING SUM*그룹함수*(Total) >= 30                                                     #4.

ORDER BY 2                                                                                            #6.

 

#1 : 대상 테이블에 접근.

#2. CustomerId 라는 컬럼이 10이상인 레코드를 조회.

#3. CustomerId를 기준으로 그룹화 한다.

#4. Total 이라는 컬럼의 총합이 30이상인 결과들만 필터링.

#5. 조회된 결과에서 CustomerId 컬럼과 Total 컬럼의 평균을 구함.

#6. AVG(Total) 필드를 기준으로 오름차순으로 정렬화한 결과를 리턴.