[SQL] SQL 기본 1

언교동·2025년 5월 26일

SQL

목록 보기
4/6
post-thumbnail

관계형 데이터베이스 개요

관계형 데이터베이스

관계형 데이터베이스(Relational Database, RDB): 관계형 데이터 모델에 기초를 둔 데이터베이스

  • 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작

RDBMS(Relational Database Management System): RDB를 관리, 감독하기 위한 시스템
ex) Oracle, SQL Server(MSSQL), MySQL, MariaDB, PostgreSQL

TABLE

  • Column: A, B, C, D 등의 세로 열
  • Row: 1, 2, 3, 4 등의 가로 행

SELECT 문

  • 저장되어 있는 데이터를 조회
SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1='아무개';

*(asterisk)

SELECT * FROM 테이블 WHERE 컬럼1='아무개';

-> 전체 컬럼 조회

Alias 별칭

SELECT USED_GOODS_BOARD.TITLE, USED_GOODS_BOARD.BOARD_ID
FROM USED_GOODS_BOARD

=

SELECT B.TITLE, B.BOARD_ID
FROM USED_GOODS_BOARD (AS) B

산술연산자

연산자의미우선순위
()괄호로 우선순위를 조정할 수 있음1
*곱하기2
/나누기(0으로 나눌 경우 에러 발생)2
+더하기3
-빼기3
% (SQL Server)나머지(0으로 나눌 경우 NULL 반환)3

합성 연산자

사용방법
'문자' || '문자'
컬럼명 || '문자'

SELECT F_NAME || '의 키는 ' || HEIGHT || 'cm 이고 몸무게는 ' || WEIGHT || 'kg 입니다!' FROM FAMILY

->

아빠의 키는 175cm 이고 몸무게는 68kg 입니다!

함수

문자 함수

  • CHR(ASCII코드): ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려줌
SELECT CHR(65) FROM DUAL;

-> A
  • LOWER(문자열): 문자열을 소문자로 변환
SELECT LOWER('GYODON') FROM DUAL;

-> gyondon
  • UPPER(문자열): 문자열을 대문자로 변환
SELECT UPPER(gyodon) FROM DUAL;

-> GYODON
  • LTRIM(문자열[, 특정문자: 옵션임])
    • default: 문자열의 왼쪽 공백 제거
    SELECT LTRIM('          GYDON') FROM DUAL;   
    -> GYODON
    • 특정 문자를 명시한 경우: 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거, 포함되지 않았으면 멈춤
SELECT LTRIM('GGGGGGGYODON', 'GY') FROM DUAL;
        
 -> ODON
  • RTRIM(문자열, [, 특정 문자: 옵션])

    • default: 문자열의 오른쪽 공백 제거

      SELECT RTRIM('GYODON           ') FROM DUAL;        
      -> GYODON
    • 특정 문자를 명시한 경우: 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거, 포함되지 않았으면 멈춤

SQL
SELECT RTRIM('GYODON', 'ON') FROM DUAL;
    
-> GYOD
  • TRIM([위치:옵션, LEADING OR TRAILING OR BOTH], [특정 문자:옵션, 한 글자만 지정 가능], [FROM:옵션] 문자열)

    • defalt: 문자열의 왼쪽과 오른쪽 공백 제거

      SELECT TRIM (    'GYODON'      ) FROM DUAL;
      
      -> GYODON
    • else: 위치로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거, 같지 않으면 멈춤

      		SELECT TRIM(LEADING 'G' FROM 'GYODON') FROM DUAL;

      -> YODON

      		SELECT TRIM(TRAILING 'N' FROM 'GYODON') FROM DUAL;

      -> GYODO

  • SUBSTR(문자열, 시작점 [, 길이: 옵션]): 시작점에서 길이만큼의 서브 문자열 반환

    	SELECT SUBSTR('GYODON', 3, 2) FROM DUAL;

    -> OD

  • LENGTH(문자열): 문자열의 길이 반환

    	SELECT LENGTH('GYODON') FROM DUAL;

    -> 6

  • REPLACE(문자열, 변경 전 문자열[, 변경 후 문자열: 옵션])

    • 변경 후 문자열 입력 시: 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔줌

      	SELECT REPLACE('GYODON_HAN', 'HAN', 'UNN') FROM DUAL;

      -> GYODON_UNN

    • default: 문자열에서 변경 전 문자열 제거

      	SELECT REPLACE('GYODON_HAN', '_HAN') FROM DUAL;

      -> GYODON

  • LPAD(문자열, 길이, 문자): 문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채움

    	SELECT LPAD('GYODON', '🩶') FROM DUAL;

    -> 🩶🩶🩶🩶GYODON


숫자 함수

  • ABS(NUMBER): 수의 절댓값 반환
SELECT ABS(-7) FROM DUAL;
-> 7
  • SIGN(NUMBER)
    • 수가 양수일 경우: 1 반환
    • 수가 음수일 경우: -1 반환
    • 수가 0일 경우: 0 반환
SELECT SIGN(100) FROM DUAL;
-> 1
  • ROUND(NUMBER [, 자릿수: 옵션])
    • default: 반올림된 정수 반환. 음수일 경우 정수부를 반올림
    • 자릿수 지정하였을 때: 수를 지정된 자릿수까지 반올림하여 반환
SELECT ROUND(223.55, -2) FROM DUAL;
-> 200
  • TRUNC(수 [, 자릿수: 옵션])
    • default: 버림한 정수 반환. 음수일 경우 지정된 정수부에서 버림
    • 자릿수 지정하였을 때: 지정된 소수점 자릿수까지 버림하여 반환
SELECT TRUNC(223.55) FROM DUAL;
-> 223.5
  • CEIL(NUMBER): 소수점 이하의 수를 올림한 정수 반환
SELECT CEIL(-223.55) FROM DUAL;
-> -223
  • FLOOR(NUMBER): 소수점 이하의 수를 버림한 정수 반환
SELECT FLOOR(-223.55) FROM DUAL;
-> 224
  • MOD(num1, num2): num1 을 num2로 나눈 나머지 반환.
    • 단, num2가 0일 경우 num1을 반환
SELECT MOD(-15, -4) FROM DUAL;
-> -3

날짜 함수

  • SYSDATE: 현재의 연, 월, 일, 시, 분, 초 반환
    • nls_date_format에 따라서 출력 양식이 달라질 수 있음
SELECT SYSDATE FROM DUAL;
-> 2025-05-27 02:19:08
  • EXTRACT(특정 단위 FROM 날짜 데이터): 날짜 데이터에서 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 와 같은 특정 단위만 출력하여 반환
SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR FROM DUAL;
-> 2025
  • ADD_MONTHS(날짜 데이터, 특정 개월 수): 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환
SELECT ADD_MONTH(DATE '2025-01-31', 1) FROM DUAL;
-> 2025-02-28

변환 함수

명시적 형변환과 묵시적(암시적) 형변환

명시적 형변환: 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄

  • TO_NUMBER(문자열): 문자열을 숫자형으로 변환
SELECT TO_NUMBER('1234') FROM DUAL;
-> 1234
  • TO_CHAR(수 or 날짜[, 포맷]): 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환
SELECT TO_CHAR(1234) FROM DUAL;
-> 1234(문자열)
  • TO_DATE(문자열, 포맷): 포맷 형식의 문자형의 데이터를 날짜형으로 변환

    포맷 표현의미
    YYYY
    MM
    DD
    HH시(12)
    HH24시(24)
    MI
    SS
    SELECT TO_DATE('2025-05-27', YYYYMMDD) FROM DUAL;
    
       -> 2025-05-27(날짜 타입)

묵시적 형변환: 데이터베이스가 내부적으로 알아서 데이터 유형 변환
ex) 조건절에서 VARCHAR 유형의 BIRTHDAY 컬럼을 숫자와 비교할 경우, 데이터베이스는 내부적으로 BIRTHDAY 컬럼을 NUMBER 형으로 변환


NULL 관련 함수

  • NVL(인수1, 인수2): 인수1의 값이 NULL일 경우 인수2 반환, NULL이 아닐 경우 인수1 반환
NVL(GRADE, 0)
-> GRADE 가 NULL 일 경우 0 반환, NULL 이 아닐 경우 GRADE 값 반환
  • NULLIF(인수1, 인수2)
    • 인수1과 인수2가 같은 경우: NULL 반환
    • 인수1과 인수2가 다른 경우: 인수1 반환
NULLIF(GRADE, 'F')
-> GRADE 가 F 인 경우 NULL 반환, 아닐 경우 GRADE 값 반환
  • COALESCE(인수1, 인수2, 인수3, ...): NULL 이 아닌 최초의 인수 반환
SELECT NAME, COALESCE(PHONE, PARENTS_PHONE, EMAIL) AS CONTACT FROM STUDENT;
  • NVL2(인수1, 인수2, 인수3)
    • 인수1이 NULL 이 아닌 경우: 인수2 반환
    • 인수1이 NULL 일 경우: 인수3 반환
SELECT NAME, NVL2(PHONE, '연락처있음', '연락처 없음') FROM STUDENT;
  • CASE: ~이면 ~이고, ...이면 ...이다
CASE WHEN GATE='1' THEN 'EAST'
   	 WHEN GATE='2' THEN 'SOUTH'
     WHEN GATE='3' THEN 'WEST'
     [ELSE 'NORTH']
END
  • DECODE: CASE 와 같은 기능
    • ELSE 가 없을 경우 default 값: NULL
DECODE(GATE, '1', 'EAST', '2', 'SOUTH', '3', 'WEST' [, 'NORTH'])

0개의 댓글