Hello It's good to be back ^_^

[ECC-백엔드 5팀] 2주차 스터디 본문

Study/Spring Boot

[ECC-백엔드 5팀] 2주차 스터디

HongyeonLee 2026. 3. 25. 18:42

 

교재: SQL 첫걸음

공부한 페이지: pp. 94 ~ 179


 

목차

3장 정렬과 연산

  • 09강 정렬 - ORDER BY
  • 10강 복수의 열을 지정해 정렬하기
  • 11강 결과 행 제한하기 - LIMIT
  • 12강 수치 연산
  • 13강 문자열 연산
  • 14강 날짜 연산
  • 15강 CASE 문으로 데이터 변환하기

4장 데이터의 추가, 삭제, 갱신

  • 16강 행 추가하기 - INSERT
  • 17강 삭제하기 - DELETE
  • 18강 데이터 갱신하기 - UPDATE
  • 19강 물리삭제와 논리삭제 

3장 정렬과 연산

09강 & 10강 정렬 - ORDER BY

ORDER BY

결과 테이블의 행 순서를 정렬할 수 있다

SELECT 속성1, 속성2... FROM 테이블이름(들) ORDER BY 속성1, 속성2...

오름차순 정렬은 ASC (디폴트), 내림차순 정렬은 DESC을 정렬 기준이 되는 속성 뒤에 써주면 된다.

 

사용예시

(1)도서를 가격순으로 내림차순으로 검색하되, 가격이 같으면 출판사를 오름차순으로 출력하세요.

→ SELECT * FROM book ORDER BY price DESC, publisher;

 

*숫자를 문자열처럼 작성하면 숫자의 대소관계를 기준으로 (1, 2, 10, 11) 나오지 않고 사전식 순서대로 (1, 10, 11, 2)나오니 주의

*DBMS에 따라 NULL값은 가장 먼저 표시되거나 가장 나중에 표시된다. MySQL은 NULL값을 가장 작은 값으로 취급한다

 

11강 결과 행 제한하기 - LIMIT

LIMIT
: 결과 테이블의 표시되는 행의 개수를 제한할 수 있다 *MySQL과 PostgreSQL에서만 사용 가능
SELECT 속성1, 속성2... FROM 테이블이름(들) LIMIT 행의 개수 [OFFSET 시작 행]

 

사용예시

 SELECT * FROM sample33;        

→ 결과

SELECT * FROM sample33 LIMIT 3;

→ 결과

 

* SQL Sever에서는 SELECT TOP (보여주려는 행의 개수) 형식으로 사용한다

* Oracle에서는 WHERE ROWNUM <= (보여주려는 행의 개수) 형식으로 사용한다

 

OFFSET

: 행을 어디서부터 제한해서 보여줄지 지정할 수 있다

 

사용예시

(1) SELECT * FROM sample33 LIMIT 3 OFFSET 0; 

→ 결과 테이블에서 0행부터 3행까지만 보여줌

 

 

(2) SELECT * FROM sample33 LIMIT 3 OFFSET 3; 

→ 결과 테이블에서 4행부터 6행까지만 보여줌

 

*OFFSET 은 페이지네이션 기능을 구현할 때 많이 사용한다

 

 

12강 수치연산

산술 연산자

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지

 

연산자 우선 순위

우선순위 연산자
1 * / %
2 + -

 

사용예시

(1) SELECT price * quantity FROM sample34

→ 결과

 

 

AS

: 열의 별칭을 지정할 수 있다

 

사용 예시

SELECT price * quantity AS amount

→ 결과

 

 

*데이터베이스의 객체의 이름은 큰 따옴표로 둘러싸고 문자열 상수는 작은 따옴표로 둘러싼다

 

* 이름은 숫자로 시작되어선 안된다

 

처리 순서

FROM → WEHRE → GROUP BY → HAVING → SELECT → ORDER BY

뒤의 단계에서 사용한 별칭은 앞의 단계에서 사용할 수 없다

 

NULL 값의 연산

NULL을 포함한 사칙연산은 전부 결과가 NULL 처리된다

 

함수를 이용한 연산

% 함수

: 나머지 연산을 한다

 

 사용예시

10 % 3 → 1

 

MOD 함수

: 나머지 연산을 한다

 

사용예시

MOD(10, 3) → 1

 

ROUND 함수

: 소수점 첫째 자리를 디폴트로 반올림 연산을 한다

 

사용예시

SELCT amount, ROUND(amount) FROM sample341;

→ 결과

 

* ROUND(속성, 반올림 자릿수)로 사용하여 어디서 반올림할 지 지정할 수도 있다

0(생략): 소수점 첫째 짜리

1: 소수점 둘째 자리

-1: 1 단위

-2: 10 단위

-3: 100 단위

 

 

13강 문자열 연산

1. 문자열 결합

: 2개의 열 데이터를 모아서 1개의 열로 처리하고 싶은 경우에 사용한다

 

CONCAT(열1, 열2)

SELECT CONCAT(열1, 열2) FROM 테이블명

 

사용예시

SELECT CONCAT(quantity, unit) FROM sample35;

→ 결과

 

* 수치 데이터 + 문자열 데이터도 결합이 가능하다

* ORACLE은  열1 || 열2  형식으로 사용한다

* SQL Server는  열1 + 열2  형식으로 사용한다

 

2. SUBSTRING 함수

: 문자열의 일부분을 계산해서 리턴하는 함수

 

사용형식

SUBSTRING('문자열', 시작위치, 문자열길이)

함수를 적용시킬 문자열의 시작위치부터 문자열 길이만큼 잘라내서 리턴한다

 

사용예시

SUBSTRING('20140124001', 1, 4) - 첫번째 자리부터 4자리 잘라낸다 → '2014'

SUBSTRING('20140124001', 5, 2) - 5번째 자리부터 2자리 잘라낸다 → '01'

 

 

3. TRIM 함수

: 문자열의 앞 뒤로 여분의 공백이 있을 경우 이를 제거해준다. 문자열 중간의 공백은 제거되지 않는다.

* 고정길이 문자열형에 많이 사용된다

 

사용형식

TRIM('문자열')

 

사용예시

TRIM('ABC      ') → 'ABC'

 

 

4. CHARACTER_LENGTH 함수

: 문자열의 길이를 계산해 리턴하는 함수로 CHAR_LENGTH로 줄여서 사용할 수도 있다. 문자 단위로 계산하여 리턴한다.

 

*OCTET_LENGTH 함수는 바이트 단위로 계산해서 리턴한다

 

같은 한 글자여도 어떤 문자 세트냐에 따라 바이트 수가 다르다

예를들어 EUC-KR 인코딩 방식에서 ASC II 문자는 1바이트, 한글은 2바이트이고,

UTF-8 인코딩 방식에서는 ASC II 문자는 1바이트, 한글은 3바이트이다.

=> 문자열 데이터의 길이는 문자 세트에 따라 다르다!

 

 

14강 날짜 연산

1. CURRENT_TIMESTAMP

: 해당 함수를 실행했을 당시를 기준으로 연월일과 시간을 표시한다. 인자가 필요없다.

 

사용형식

SELECT CURRENT_TIMESTAMP;

 

 

2. CURRENT_DATE

: 해당 함수를 실행했을 당시를 기준으로 연월일을 표시한다. 인자가 필요없다.

INTERBAL을 이용해 날짜의 덧셈과 뺄셈을 할 수 있다

 

사용예시

SELECT CURRENT_DATE + INTERVAL 1 DAY;

→ 결과로 해당 함수를 실행한 날짜의 하루 뒤 날짜를 리턴한다

 

 

15강 CASE 문으로 데이터 변환하기

1. 검색 CASE문

: 데이터를 변환할 수 있다

CASE WHEN 조건식1 THEN 식1
	[WHEN 조건식2 THEN 식2...]
    	[ELSE 식3]
END

 

사용 예시

SELECT a
CASE WHEN a IS NULL THEN 0
ELSE a
END "a(null = 0)"
FROM sample 37

a열의 값이 NULL이라면 0으로 처리하고 아닐 경우 그대로 둔다. 리턴된 열은 a(null=0)을 별칭으로 가진다

 

 

 

2.COALESCE 함수

: NULL 처리 함수로 인자로 주어진 열 중에서 NULL이 아닌 열 값을 리턴하는 함수

 

사용형식

SELECT 열1, 열2,..., COALESCE(인자1, 인자2) FROM 테이블명

 

사용예시

 

3. 단순 CASE문

CASE:

데이터를 변환하는 데 사용된다

 

사용형식

CASE 식1
	WHEN 식2 THEN 식3
        [WHEN 식4 THEN 식5...]
        [ELSE 식6]
END

식1의 값이 식2의 값과 같다면 식3의 값이 CASE문 전체의 결과로 리턴된다. 만약 같지 않다면 그다음 WHEN 절의 식과 비교한다.

 

사용예시

(1) 검색 CASE의 경우

SELECT a AS '코드',
CASE
	WHEN a = 1 THEN '남자'
    	WHEN a = 2 THEN '여자'
        ELSE '미지정'
END AS '성별' FROM sample37

 

(2) 단순 CASE의 경우

SELECT a AS '코드',
CASE a
	WHEN 1 THEN '남자'
    	WHEN 2 THEN '여자'
        ELSE '미지정'
END AS '성별' FROM sample37

 

 

* CASE문은 SELECT문 뿐만 아니라 WHERE, ORDER BY 등 어디에서나 사용할 수 있다

* ELSE를 생략시 ELSE NULL 처리 되므로 주의

* 식이 NULL인지 비교하고 싶다면 반드시 검색 CASE문을 사용해야 한다

 

요약

ORDER BY - 행 정렬

DESC, ASC - 내림차순, 오름차순 정렬 지정

LIMIT - 검색 결과에 표시되는 행의 개수 제한

AS - 열이나 식에 별칭 지정

CASE - 데이터 변환

 


 

4장 데이터의 추가, 삭제, 갱신

16강 행 추가하기 - INSERT

 

1. INSERT

: 기존의 테이블에 새로운 튜플(행)을 삽입한다

*DESC 테이블명 을 통해 테이블의 열 구성을 확인할 수 있다

 

사용 형식

INSERT INTO 테이블명[속성리스트]
	VALUES(값 리스트);

*속성리스트를 생략할 수 있으나 값들이 테이블을 처음 지정할 때의 속성들의 순서대로 삽입된다. 따라서 값이 잘못된 속성에 삽입되는 것을 방지하고 가독성을 위해 속성리스트를 작성하는 것이 좋다

*특정 속성에 해당하는 값을 NULL값으로 넣고 싶다면 속성리스트에서 해당 속성을 제외하고 작성하면 된다

 

사용 예시

 

* SELECT문을 통해서도 INSERT문을 작성할 수 있다

 

2. DEFAULT

: INSERT문에서 삽입 할 데이터를 생략하거나 DEFAULT를 작성하는 경우 미리 설정된 DEFAULT 값이 삽입된다.

 

사용 예시

 

 

17강 삭제하기 - DELETE

DELETE

: 테이블에 있는 기존의 튜플(행)을 삭제할 수 있다 ↔ DROP은 테이블 자체를 삭제한다

 

사용 형식

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

WHERE 절을 작성할 경우 조건을 만족하는 튜플(행)만 삭제한다

WHERE 절을 생략할 경우 테이블에 존재하는 모든 튜플(행)을 삭제해 빈 테이블이 된다 (테이블 자체는 살아있다)

 

사용 예시

 

 

18강 데이터 갱신하기 - UPDATE

UPDATE

: 특정 속성(열)의 값, 즉 테이블의 셀에 저장되어 있는 값을 바꿀 수 있다. 기존의 데이터를 수정하는 명령이다

 

사용 형식

UPDATE 테이블명
SET 속성이름1 = 값, [속성이름2 = 값, 속성이름3 = 값3...]
[WHERE 조건식]

WHERE절의 조건을 만족하는 행의 열 값(속성값)을 지정된 값으로 바꾼다

* WHERE 절을 작성할 경우 해당 조건을 만족하는 튜플의 속성 값만 수정한다

* WHERE 절을 생략할 경우 테이블에 존재하는 모든 튜플의 속성 값을 수정한다

* 값 자리에 열이 들어갈 수도 있다. 이 경우 해당 값들을 해당 열의 값과 동일하게 수정한다.

 

사용 예시

* INSERT문과 동일하게 SELECT문을 이용해서 작성할 수도 있다

 

SET no = no +1 //기존의 no 열의 값들을 +1 한 값으로 수정한다

a = no //a열의 값들을 no 열의 값들과 동일하게 수정한다

* SET 구에 기술한 순서가 처리에 영향을 주니 주의해야 한다

 

먼저 SET구에 적힌 식이 실행되고 그 결과가 다음 식에도 영향을 준다

 

 

19강 물리삭제와 논리삭제

 

1. 물리삭제

: DELETE 명령을 이용해 직접 데이터를 삭제하는 사고 방식

 

2. 논리삭제

: 테이블에 삭제플래그와 같은 가상의 열을 추가하고 데이터를 삭제할 때 실제로 삭제하지 않고 UPDATE 명령을 이용해 삭제 플레그의 값을 갱신한다. 실제 테이블의 데이터는 남아있지만, 삭제 플래그가 삭제 설정된 행을 참조하지 못하게 막는다.

 

 

* 논리 삭제는 실제로 데이터를 삭제하지 않기 때문에 삭제하기 이전 상태로 되돌아가기 쉽다는 장점이 있다

* 단, 삭제를 해도 DB의 저장공간이 늘어나지 않기에 DB의 크기가 증가하면 검색 속도가 떨어질 수 있다

* 또한 삭제임에도 UPDATE문을 이용하기에 프로그램 상 혼란을 야기하기도 한다

 

요약

INSERT - 행 추가

DELETE - 행 삭제

UPDATE - 셀 수정

물리 삭제 - 실제 행 삭제

논리 삭제 - 데이터가 삭제된 것처럼 가정