[SQLD]「2」(2.1) SELECT 문, 다양한 함수

728x90

[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 과외노트

728x90