[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(2)
- -
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(2)
∇ 공부 겸 정리 목표
(1)에서 정리한 내용들.
- SELECT , FROM, LIMIT
- WHERE
- ORDER BY
- 중복 제거[DISTINCT / GROUP BY/ 서브쿼리
- 집계 함수 [ SUM, COUNT, AVG 등 ]
- GROUP BY [ 데이터 그룹화 ]
#이번 글에서 정리할 내용들,
- 소수점 처리 [ ROUND / TRUNCATE / CAST, CONVERT ]
- SQL 숫자 연산
- HAVING
- 조건문[ CASE, IF() ]
- UNION, UNION ALL
- INNER JOIN
- LEFT JOIN, RIGHT JOIN
-셀프 조인
++ AARRR/ RFM
5. 소수점 처리하기.
: 소수점을 처리하는 방식에는 6가지 방식이 있습니다.
5.1 ROUND 함수.
: 지정된 소수점 자릿수로 반올림.
- ROUND( N, 반올림 될 위치)
반올림하고자 하는 숫자를 앞에, 반올림할 위치를 뒤에 적어줍니다.
- 반올림할 위치에 아무것도 적지 않으면 첫째자리에서 반올림을 하며
1을 적을 경우부터 둘쨰자리에서 반올림을 합니다 [ 컴퓨터는 0부터 시작 ]
- 정수를 반올림하고자 하는 경우엔 -1, -2 등으로 적어주면 됩니다.
5.2 TRUNCATE 함수.
: 지정된 소수점 자릿수 미만을 잘라냅니다.[ 버림 ]
ex) TRUNCATE(column_name, 2)는 소수점 둘째 자리까지만 표시하고 나머지는 버립니다.
- TRUNCATE(N, 버릴 위치)
- 대부분의 SQL프로그램에서는
ROUND 함수와 다르게 버림을 할 자릿수를 반드시 지정해줘야 합니다!
+ 예외1 - My SQL
My SQL에서는 자릿수를 생략 가능하고, 생략하면 기본값으로 0으로 간주하여
정수부분만 남기게 됩니다.(소수점 첫째자리부터 모두 짤)
+예외2 - SQL Server
: SQL Server에서는 TRUNCATE 함수가 기본적으로 제공되지 않음.
+ 대신, ROUND 함수를 사용!
+예외3 - PostgreSQL 에서도 TRUNCATE 대신 TRUNC 함수를 사용합니다.
동일하게, 자릿수를 생략하면 0으로 간주하고 정수 부분만 남깁니다.
## 결론적으로, DB시스템에 따라 TRUNCATE 함수의 동작이 다를 수 있기에
일반적으로 자릿수를 명시해 주는 것이 가장 안전하고 명확합니다.
5.3 CEIL(ING) / FLOOR 함수.
① CEIL(ING) 함수 - 무조건 올림.
- 소수점이 있는 숫자의, 소수점 이하를 무조건 올려서 정수로 만드는 역할.
- ROUND와 달리 CEILING은 무조건 정수값으로 출력됩니다.
- CEILING(반올림할 대상 숫자)
- 무조건 올림처리를 사용하기 때문에 자릿수 지정이 없습니다.
#특징.
- 양수일 때 : 다음 정수로 올림(+1)
- 음수일 때 : 양수 방향으로 올림
- 이미 정수인 경우 : 그래도 반환
② FLOOR 함수 - 무조건 버림.
- 소수점이 있는 숫자의, 소수점 이하를 무조건 버려서 정수로 만드는 역할.
- CEILING과 마찬가지로 정수값으로 출력
- 무조건 내림처리이기 때문에 자릿수 지정이 없습니다.
#특징.
- 양수일 때 : 현재 정수 부분으로 내림
- 음수일 때 : 다음 작은 정수 ( - 방향)으로 내림.
- 이미 정수인 경우 : 그래도 반환.
5.4 CAST / CONVERT 함수.
지금은 우선 Mysql를 기준으로 공부를 해보겠습니다.
∇ CAST 함수.
: 데이터를 다른 데이터 유형으로 명시적으로 변활할 때 사용합니다.
- SQL 표준 함수이며, 대부분의 DB 시스템에서 지원합니다.
- CAST(변환하려는 값 또는 열 AS 변환시킬 데이터 타입).
## cast를 사용하는 것이 더 안정성과 범용성 있음.
∇ CONVERT 함수.
: 데이터 형식을 변환하는데 사용되며, My SQL에서는 CAST함수와 동일한 결과를 반환합니다.
# DB별 CONVERT 함수 사용 차이.[cast와 convert의 차이, "DB 종속성"]
1. SQL SERVER
- convert 함수는 가장 광범위하게 사용/ 다양한 스타일 옵션
2. My SQL
- convert 함수사용 / sql server와는 문법이 다름.
3. Oracle
- convert함수가 주로 문자셋 변환에 사용
- 데이터 타입 변환에는 cast를 사용합니다.
4. PostgreSQL
- convert 함수를 지원하지 않습니다, 대신 cast나 :: 연산자를 사용합니다.
지금은 우선 Mysql를 기준으로 공부를 해보겠습니다.
6. 연산 처리.
[ 기본 산술 연산 / 비교 연산 / 논리 연산/ 문자열 연산 / 날짜 및 시간 ]
6-1. 기본 산술 연산 [ 덧셈(+), 뺄셈(-), 곱셉(*), 나눗셈(/), 나머지(%) ]
· + , - , * , / : 더하기, 빼기, 곱하기, 나누기
· DIV : 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림.
· % OR MOD : 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 , 그 나머지를 반환.
6-2. 비교 연산 [ 같다(=), 다르다(!= 또는 <> ) , 작다(<), 크다(>), 크거나 같다(>=), 작거나같다(<=) ]
▶ 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, 참(True)이면 1을 반환, 거짓(False)이면 0을 반환.
6-3. 논리 연산 [ AND, OR , NOT ] & 조건 연산자[ LIKE, IN, BETWEEN, IS NULL]
∇논리 연산자
√ AND 연산자
: AND 연산자는 두 개 이상의 조건이 모두 참일 때 참을 반환합니다.
여러 조건을 동시에 만족시켜야 할 때 사용합니다.
√ OR 연산자
: or 연산자는 두 개 이상의 조건 중 하나라도 참일 때 참을 반환합니다.
하나라도 조건을 만족하면 됩니다.
나이가 18세 미만이거나, 전공이 컴퓨터과학인 학생들은 선택.
√ NOT 연산자
: not 연산자는 조건이 거짓일 때 참을 반환합니다. 조건을 부정할 때 사용합니다.
전공이 CS가 아닌 학생들을 선택.
++
√ 논리연산자 복합 조건.
: 여러 논리 연산자를 함께 사용하여 복합 조건을 만들 수 있습니다.
이때 조건의 우선순위를 제어하기 위해 괄호를 사용 가능합니다.
- [나이가 18세 초과이고 전공이 cs인 학생들]이거나 성이 smith인 학생들을 선택.!
∇조건 연산자 [ LIKE, IN, BETWEEN, IS NULL]
: 특정 조건을 만족하는 데이터를 검색할 때 자주 사용되는 연산자.
∇ 조건 연산자 요약.
- LIKE : 특정 패턴과 일치하는 문자열을 검색합니다.
- IN : 여러 값 중 하나와 일치하는 데이터를 검색합니다.
- BETWEEN : 특정 범위 내에 있는 값을 검색합니다.
- IS NULL : 값이 NULL인 데이터를 검색합니다.
√ LIKE 연산자.
: LIKE 연산자는 특정 패턴과 일치하는 문자열을 검색할 때 사용,
- 주로 와일드카드 문자와 함께 사용됩니다.
- '%' : 0 개 이상의 임의의 문자
- '_' 정확히 1개의 임의의 문자.
-> 두 번째 문자가 m이고 ith로 끝나는 성을 가진 학생들을 선택합니다.
√ IN 연산자.
: 여러 값 중 하나와 일치하는 데이터를 검색할 때 사용합니다.
여러 값을 쉼표로 구분하여 나열합니다.
- 전공이 cs 또는 수학인 학생들을 선택합니다.
√ BETWEEN 연산자.
: 특정 범위 내에 있는 값을 검색할 때 사용합니다.
두 값은 포함 범위의 시작과 끝을 나타내며, 두 값을 모두 포함합니다.
- 나이가 18세 이상, 22세 이하인 학생들을 선택.
√ IS NULL 연산자.
: is null 연산자는 열의 값이 NULL인 데이터를 검색할 때 사용합니다.
- 전공이 지정되지 않은 학생들(전공이 null인 학생들)을 선택.
6-4. 문자열 연산 [ 연결(CONCAT) , 길이(LENGTH), 대문자 변환(UPPER), 소문자 변환(LOWER) ]
6-5. 날짜 및 시 연산
[ 현재 날짜 (CURDATE) ,현재 시간 (CURTIME) , 날짜 더하기 (DATE_ADD),날짜 차이 (DATEDIFF) ]
5. HAVING 함수.
: GROUP BY와 함께 사용되는 SQL절로,
그룹화된 결과에 조건을 적용할 때 사용합니다.
- WHERE절과 유사하지만,
WHERE구문은 행 단위로 조건을 적용하고
HAVING 구문은 그룹 단위로 조건을 적용한다는 점에서 차이가 있습니다.
- HAVING절의 위치는 GROUP BY 절 뒤에 와야 합니다.
- 사용시에는 GROUP BY와 함께 사용됩니다.
- 집계함수(SUM, AVG, COUNT 등) 도 함께 사용 가능합니다.
- 그룹화된 결과에 필터를 적용합니다.
6. 조건문 [ CASE ,IF() ]
CASE와 IF 두 구문 모두 조건에 따라 다른 결과를 반환하는데 사용되지만,
사용방법과 복잡성에서 차이가 있습니다.
6-1. IF문.
MySQL에서 IF문은 엑셀의 IF문과 동일한 느낌으로 사용됩니다.
IF문은 간단한 조건식에서 사용되며,
다음과 같은 구조를 가집니다.
## IF 문은 단순한 이진 조건( 참 혹은 거짓)에 적합합니다.
## 중첩으로 사용하는 것도 가능합니다.
ex)
6-2. IFNULL문.
- IFNULL()함수는 해당 필드의 값이 NULL을 반활할 때,
지정한 값으로 대체하여 출력해줍니다.
- 이 역시 중첩해서 사용이 가능합니다.
6-3. ISNULL문.
- is_discount 컬럼의 값이 NULL 이라면 0을 출력.
- NULL이 아니라면, is_discount의 값을 출력합니다.
6-4. CASE WHEN문.
- WHEN 과 THEN은 무조건 쌍을 이루어서 사용해야 합니다.
- WHEN 조건 혹은 THEN은 여러번(중복) 사용할 수 있으며,
마지막 ELSE문은 모든 조건이 아닐 때 출력되는 값을 지정합니다.
- SELECT 절, FROM절 혹은 WHERE절에도 들어갈 수 있습니다.
∇ CASE와 IF의 비교.
1. 복잡성:
- IF는 단순한 이진 조건(TRUE/FASLE)에 적합.
- CASE는 여러 조건을 처리할 수 있어 더 복잡한 로직을 표현 가능.
2. 가독성:
- 여러 조건을 처리해야 할 때 CASE문이 더 가독성이 좋습니다.
- 단순한 조건의 경우, IF가 더 간결할 수 있습니다.
7. UNION, UNION ALL.
- My SQL에서 UNION과 UNION ALL은 두 개 이상의 조회 결과를 병합하는 경우에 사용합니다.
하나로 결합하는 것은 동일하지만, 중요한 차이점도 있습니다.
결과를 산출할 때 데이터를 중복하는지 여부입니다.
7-1. UNION. [ DISTINCT ]
: UNION은 두 개 이상의 SELECT 문의 결과를 결합하며, 중복된 행을 제거하고 정렬.
√특징.
- 중복 제거 : 결과에서 중복된 행을 자동으로 제거합니다.
- 정렬 : 기본적으로 결과를 정렬.
- 성능 : 중복 제거 기능과 정렬 때문에 UNION ALL보다 처리 시간이 더 걸린다는 단점!
7-1. UNION ALL.
: UNION ALL 은 두개 이상의 SELECT문의 결과를 결합하지만, 중복된 행(데이터)를 제거하지 않습니다.
√특징.
- 중복 유지 : 모든 행을 그래도 결합하므로 중복된 행이 있으면 그대로 표시.
- 정렬 없음 : 결과를 자동으로 정렬하지 않음.
- 성능면 : 중복 제거나 정렬 과정이 없어서 , UNION보다는 일반적으로 빠름.
∇ EX)
이 데이터를 기준으로 UNION과 UNION ALL을 진행해보면,
- 중복을 제거하는 UNION을 사용하면
- 중복 제거 없이, 병합만 시키는 UNION ALL을 하면
결과를 비교해보면
# UNION은 중복된 Carol을 한번만 표시하고 결과도 정렬해주지만,
UNION ALL은 두번 표시하고 정렬 없이 출력한느 것을 확인 할 수 있습니다.
√ 사용시 고려사항!
- 중복 값을 제거해서 깔끔하게 보고 싶을 때는 UNION을 사용하고
- 모든 결과가 필요하고 성능이 중요한 경우 UNION ALL을 사용해줍니다.
++ 대용량 데이터를 다룰 때는 UNION ALL이 더 효율적.!!
++ 결합하는 SELECT문들의 열 수와 데이터 타입이 일치해야 한다는 점도 중요!!
++ 결과의 열 이름은 첫번째 SELECT문의 것을 따릅니다.
'데이터 및 C언어 > SQL 공부' 카테고리의 다른 글
[SQL] SQL 공부하기 : RDBMS(관계형 데이터베이스) (0) | 2024.06.27 |
---|---|
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(3) (0) | 2024.06.24 |
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도. (0) | 2024.06.23 |
[SQL] 데이터리안 : SQL 코딩 테스트 노하우 (0) | 2024.06.21 |
[SQL] 데이터 분석을 위한 SQL 기초 공부(6)_feat:데이터리안 (0) | 2024.06.18 |
소중한 공감 감사합니다