[SQLD]「2」(2.1) SELECT 문, 다양한 함수
「1」 데이터 모델링의 이해
> 「2」 SQL 기본 / 활용
「3」 관리 구문
> 1. SELECT 문
> 2. 다양한 함수
3. WHERE 절
4. GROUP BY 절, HAVING 절
5. ORDER BY 절
6. JOIN
7. STANDARD JOIN
1. SELECT 문
SELECT
⸰ 저장된 데이터를 조회하는 명령어
SELECT 칼럼1, 칼럼2, ... FROM 테이블 WHERE 조건;
⸰ 칼럼 명시하지 않고, *(asterisk)를 사용하면 전체 칼럼 조회
SELECT * FROM 테이블;
⸰ 테이블명에 AS 설정하면 테이블명 대신 AS 사용해야 함
SELECT 칼럼 FROM 테이블 [AS] 테이블명
√. ALIAS 를 별도로 지정하지 않으면, 칼럼명이 대문자로 출력
산술 연산자
( ) |
괄호로 우선순위 조정 |
* |
곱하기 |
/ |
나누기(0으로 나누면 오류발생) |
+ |
더하기 |
- |
빼기 |
% |
나머지(0으로 나누면 NULL 반환) |
합성 연산자
⸰ 문자와 문자 연결 시 사용하는 연산자
SELECT 'S'||'Q'||'L' AS SQLD FROM DUAL;
2. 다양한 함수
문자 함수
⸰CHR(아스키코드)
: 아스키코드를 인수로 입력 시 매핑되는 문자 반환
SELECT CHR(65) FROM DUAL;
-- A
⸰LOWER(문자열)
: 문자열을 소문자로 변환
⸰UPPER(문자열)
: 문자열을 대문자로 변환
SELECT LOWER('SQL') FROM DUAL;
-- sql
SELECT UPPER('sql') FROM DUAL;
-- SQL
⸰LTRIM(문자열 [, 특정 문자])
- 특정 문자 없으면, 문자열 왼쪽 공백 제거
- 특정 문자 있으면, 문자열의 왼쪽부터 특정 문자 한 글자씩 비교하여 포함되어 있으면 제거
⸰RTRIM(문자열 [, 특정 문자])
- 특정 문자 없으면, 문자열 오른쪽 공백 제거
- 특정 문자 있으면, 문자열의 오른쪽부터 특정 문자 한 글자씩 비교하여 포함되어 있으면 제거
SELECT LTRIM(' SQL') FROM DUAL;
-- SQL
SELECT LTRIM('SQL DEVELOPER', 'SQL') FROM DUAL;
-- DEVELOPER
SELECT LTRIM('SQL DEVEROPER', 'QSA') FROM DUAL;
-- L DEVEROPER
SELECT RTRIM('SQL DEVEROPERER', 'ER') FROM DUAL;
-- SQL DEVEROP
SELECT RTRIM('SQL DEVEROPERRE', 'ER') FROM DUAL;
-- SQL DEVEROP
SELECT RTRIM(LTRIM('SQL DEVELOPER', 'SLQ'), 'RER') FROM DUAL;
-- DEVELOPER > DEVELOP
⸰TRIM([위치] [특정 문자(한 글자)] [FROM] 문자열)
- 옵션이 없으면, 문자열의 왼쪽과 오른쪽 공백 제거
- 위치(LEADING
|TRAILING
|BOTH
)가 있으면, 지정된 곳부터 특정 문자 한 글자씩 비교하여 포함되어 있으면 제거
SELECT TRIM(' SQL ') FROM DUAL;
-- SQL
SELECT TRIM(LEADING 'V' FROM 'SQL DEVELOPER') FROM DUAL;
-- ELOPER
SELECT TRIM(TRAILING 'O' FROM 'SQL DEVELOPER') FROM DUAL;
-- SQL DEVEL
SELECT TRIM(BOTH 'S' FROM 'SQL DEVELOPERS') FROM DUAL;
-- QL DEVELOPER
⸰SUBSTR(문자열, 시작점 [, 길이])
- 옵션이 없으면, 문자열을 시작점부터 끝까지 잘라서 반환
- 길이가 있으면, 문자열을 시작점부터 해당 길이만큼 잘라서 반환
-시작점
옵션이 음수이면, 시작점이 문자의 오른쪽 끝이 됨
SELECT SUBSTR('SQL DEVELOPER', 4, 3) FROM DUAL;
-- DEV
⸰LENGTH(문자열)
: 문자열의 길이를 반환
SELECT LENGTH('SQL') FROM DUAL;
-- 3
⸰REPLACE(문자열, 교체할 부분 [, 교체할 문자열])
- 옵션이 없으면, 문자열에서 교체할 부분을 제거
- 교체할 문자열이 있으면, 문자열에서 교체할 부분을 교체할 문자열로 바꿈
SELECT REPLACE('SQL DEVELOPER', 'ER') FROM DUAL;
-- SQL DEVELOP
SELECT REPLACE('SQL DEVELOPER', 'ER', 'ED') FROM DUAL;
-- SQL DEVELOPED
⸰LPAD(문자열, 길이, 문자)
: 문자열이 설정한 길이만큼 왼쪽을 특정 문자로 채움
SELECT LPAD('SQL', 6, 'V') FROM DUAL;
-- VVVSQL
숫자 함수
⸰ABS(수)
: 수의 절댓값 반환
SELECT ABS(-20) FROM DUAL;
-- 20
⸰SIGN(수)
: 수의 부호 반환
SELECT SIGN(-2) FROM DUAL;
-- -1
SELECT SIGN(49) FROM DUAL;
-- 1
⸰ROUND(수 [, 자릿수])
- 옵션이 없으면, 수를 반올림한 정수로 반환
- 자릿수가 있으면, 수를 지정된 소수점 자릿수까지 반올림하여 반환
- 자릿수가 음수이면, 수를 지정된 정수부를 반올림하여 반환
SELECT ROUND(154.92, 1) FROM DUAL;
-- 154.9
SELECT ROUND(163.39, -2) FROM DUAL;
-- 200
⸰TRUNC(수 [, 자릿수])
- 옵션이 없으면, 수를 버림된 정수로 반환
- 자릿수가 있으면, 수를 지정된 소수점 자릿수까지 버림 하여 반환
- 자릿수가 음수이면, 수를 지정된 정수부에서 버림하여 반환
SELECT TRUNC(32.15, 1) FROM DUAL;
-- 32.1
SELECT TRUNC(152.35, -2) FROM DUAL;
-- 100
⸰CEIL(수)
: 소수점 이하의 수를 올림한 정수로 반환
SELECT CEIL(12.49) FROM DUAL;
-- 13
⸰FLOOR(수)
: 소수점 이하의 수를 버림한 정수로 반환
SELECT FLOOR(-14.56) FROM DUAL;
-- -15
⸰MOD(수1, 수2)
- 수1을 수2로 나눈 나머지를 반환
- 수2가 0인 경우, 수1을 반환
SELECT MOD(15, 6) FROM DUAL;
-- 3
날짜 함수
⸰SYSDATE
: 현재의 연, 월, 일, 시, 분, 초를 반환
SELECT SYSDATE FROM DUAL;
-- 2024-05-31 21:23:40
⸰EXTRACT(특정 단위 FROM 날짜 데이터)
: 날짜 데이터에서 특정 단위(YEAR
,MONTH
,DAY
,HOUR
,MINUTE
,SECOND
)만 출력하여 반환
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;
-- 5
⸰ADD_MONTHS(날짜 데이터, 특정 개월 수)
- 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환
- 날짜의 이전 달, 다음 달에 기준 날짜의 일자가 존재하지 않으면, 해당 월의 마지막 일자 반환
SELECT ADD_MONTHS(TO_DATE('2024-05-31', 'YYYY-MM-DD'), -1) FROM DUAL;
-- 2024-04-30 00:00:00
변환 함수
⸰ 명시적 형변환, 암시적 형변환
-명시적 형변환
: 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄, 지향
-암시적 형변환
: 데이터베이스가 내부적으로 알아서 데이터 유형을 변환, 지양
⸰ 명시적 형변환에 쓰이는 함수
-TO_NUMBER(문자열)
: 문자열을 숫자로 변환, 숫자로 변환할 수 없는 문자열을 사용하면 ERROR 발생
SELECT TO_NUMBER('1234') FROM DUAL;
-- 1,234
-TO_CHAR(수 or 날짜 [, 포맷])
: 수나 날짜형 데이터를 포맷 형식의 문자형으로 변환
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24MISS') FROM DUAL;
-- 20240531 213321
-TO_DATE(문자열, 포맷)
: 포맷 형식의 문자형의 데이터를 날짜형으로 변환
포맷 표현 | 의미 | 포맷 표현 | 의미 |
YYYY | 년 | HH | 시(12) |
MM | 월 | HH24 | 시(24) |
DD | 일 | MI | 분 |
SS | 초 |
SELECT TO_DATE('20240531', 'YYYYMMDD') FROM DUAL;
-- 2024-05-31
NULL 관련 함수
⸰NVL(인수1, 인수2)
,ISNULL(인수1, 인수2)
: 인수1이 NULL이면 인수2 반환, NULL이 아니면 인수1 반환
SELECT NVL(SCORE, 0) FROM DUAL;
-- SCORE가 NULL이면 0 반환, NULL이 아니면 SCORE 반환
⸰NVL2(인수1, 인수2, 인수3)
: 인수1이 NULL이 아니면 인수2 반환, NULL이면 인수3 반환
SELECT NVL2(SCRE, '있음', '없음') FROM DUAL;
-- SCORE가 NULL이 아니면 '있음' 반환, NULL이면 '없음' 반환
⸰NULLIF(인수1, 인수2)
: 인수1과 인수2가 같으면 NULL 반환, 다르면 인수1 반환
SELECT NULLIF(SCORE, 0) FROM DUAL;
-- SCORE가 0이랑 같으면 NULL 반환, 다르면 SCORE 반환
⸰COALESCE(인수1, 인수2, 인수3 ...)
: NULL이 아닌 최초의 인수 반환
SELECT COALESCE(PHONE, EMAIL, FAX) FROM DUAL;
-- PHONE, EMAIL, FAX 순으로 확인하며 NULL이 아닌 첫 번째 인수 반환
CASE WHEN 절
⸰ ~이면 ~이고, ~이면 ~이다
⸰ ELSE 뒤의 값이 DEFAULT 값이 되고, 별도의 ELSE가 없을 경우 NULL이 DEFAULT 값
√. 마지막 DEFAULT 값만 ELSE로 사용
SELECT CASE WHEN SUBWAY_LINE = '1' THEN 'BLUE'
WHEN SUBWAY_LINE = '2' THEN 'GREEN'
WHEN SUBWAY_LINE = '3' THEN 'ORANGE'
[ELSE 'GRAY']
END AS LINE_COLOR
FROM DUAL;
SELECT CASE SUBWAY_LINE
WHEN '1' THEN 'BLUE'
WHEN '2' THEN 'GREEN'
WHEN '3' THEN 'ORANGE'
[ELSE 'GRAY']
END AS LINE_COLOR
FROM DUAL;
SELECT DECODE(SUBWAY_LINE, '1', 'BLUE', '2', 'GREEN', '3', 'ORANGE', 'GRAY') FROM DUAL;
유선배 SQLD 과외노트
'💠기타 > 자격증' 카테고리의 다른 글
[SQLD]「2」(2.3) JOIN, STANDARD JOIN (1) | 2024.06.18 |
---|---|
[SQLD]「2」(2.2) WHERE 절, GROUP BY 절/HAVING 절, ORDER BY 절 (0) | 2024.06.17 |
[SQLD]「1」(1.2) 정규화, 반정규화, 트랜잭션, NULL (0) | 2024.05.29 |
[SQLD]「1」(1.1) 데이터 모델, 엔티티, 속성, 관계, 식별자 (0) | 2024.05.08 |
[정처기 실기] 「6」 신기술 용어 - (6.1) 신기술 용어 (1) | 2024.04.03 |