Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

yurim45 님의 블로그

6. SQL의 기본(2) 본문

개발

6. SQL의 기본(2)

yurim45 2025. 4. 12. 09:00

1. SELECT 구문과 활용

(1) DML (Data Manipulation Language)

  • DML의 개념과 특징
    • 데이터베이스의 데이터를 조작, 검색/추가/삭제/갱신 등 수행하는 SQL 언어 
SQL 명령어 설명
INSERT 새로운 레코드를 삽입하는 명령어
SELECT 조건에 맞는 레코드를 선택하여 반환하는 명령어
UPDATE 선택된 레코드의 속성값을 수정하는 명령어
DELETE 선택된 레코드를 삭제하는 명령어

 

  • INSERT 구문- 데이터 입력
    • 명령어 형식 
      • INSERT INTO 테이블명 (column명, ...) VALUES (value 값, ...) 
      • INSERT INTO 테이블병 VALUES (값, ...) 
INSERT INTO 
employees (employee_id, first_name, last_name, email, hire_date, job_id) 
VALUES (405, 'Ruby', 'Kim', 'ruby@mail.com’, TO_DATE('2025-04-12', 'YYYY-MM-DD'), 'IT_PROG');

 

 

  • UPDATE 구문- 데이터 수정
    • 명령어 형식 
      • UPDATE 테이블명 SET column명=value
      • WHERE 절을 이용하여 조건 지정. WHERE 절이 없을 경우 모든 행이 업데이트 됨!! 
UPDATE employees SET job_id = 'AC_ACCOUNT' WHERE employee_id = 405;

 

 

  • DELETE 구문- 데이터 삭제
    • 명령어 형식 
      • DELETE FROM 테이블명 
      • WHERE 절을 이용하여 조건 지정 
 DELETE FROM employees WHERE employee_id = 405;

 

 

 

(2) SELECT 구문의 형식과 활용

  • SELECT 구문- 데이터 선택/가져오기
    • 명령어 형식 
      • SELECT 컬럼명 FROM 테이블명 
      • SELECT * FROM 테이블명
      • SELECT DISTINCT 컬럼명 FROM 테이블명
        • DISTINCT: 중복 제거
        • ALIAS(별칭)을 설정하여 간결하고 명확한 SQL 작성 가능, 별칭을 사용한 경우 별칭을 이용한 참조 필수
        • DUAL: 오라클이 제공하는 기본 더미 테이블, 연산 수행을 위해 사용
SELECT S.NAME, B.NAME FROM student_t AS S, band_t AS B WHERE S.bcode = B.bcode;

 

 

  • SELECT 구문- 산술연산자의 활용
    • 산술 연산자: 수학의 사칙연산, NUMBER / DATE 등의 데이터에 사용
      • 사칙연산: +, /, +, -
      • 나머지 연산: % (Oracle는 MOD 함수를 이용)
      • 괄호 (): 먼저 처리해야 할 것을 지정
SELECT 1+1, 10/2 FROM DUAL;
SELECT C1+C2 AS A, C1-C2 AS B FROM sample_t;

 

 

  • SELECT 구문- 문자 연결 연산자와 문자함수의 활용
    • 문자 연결 연산자: 여러 개의 문자열을 하나의 문자열로 합성
      • 오라클: ||
      • SQL 서버: +
      • MariaDB: CONCAT() 
SELECT ‘H’ || ‘I’ AS HI FROM DUAL;
SELECT NAME || ‘선수, HEIGHT || ‘cm’ FROM member_t;

 

 

  • SELECT 구문- 문자 연결 연산자와 문자함수의 활용
    • 문자함수: 문자열을 특정 목적에 따라 처리하는 함수
      • CHR (숫자): 아스키 코드에 대한 문자 출력
      • LOWER (문자열): 소문자열로 변환
      • UPPER (문자열): 대문자열로 변환
      • LTRIM (문자열, 점검문자): 문자열의 왼쪽부터 점검문자를 제거, 점검문자를 지정하지 않으면 공백 문자를 대상으로 함 
      • RTRIM (문자열, 점검문자): 문자열의 오른쪽부터 점검문자를 제거, 점검문자를 지정하지 않으면 공백 문자를 대상으로 함
      • TRIM (문자열, 점검문자): 문자열의 양쪽부터 점검문자를 제거, 점검문자를 지정하지 않으면 공백 문자를 대상으로 함 
      • SUBSTR (문자열, 시작점, 길이): 문자열의 시작위치 부터 길수(개수)만큼 추출, 길이를 지정하지 않은 경우 끝까지 추출
      • LENGTH (문자열): 문자열의 길이 반환 
      • REPLACE (문자열, 대상 문자열, 대체 문자열): 문자열에 포함된 대상 문자열을 대체, 대체 문자열을 지정하지 않으면 제거 
      • LPAD (문자열, 길이, 문자): 설정한 길이의 문자열이 될 때까지 문자열의 왼쪽을 지정한 문자로 채움
# TRIM
SELECT LTRIM(‘ CHRIS’) FROM DUAL;
SELECT TRIM(‘~~~Hi~~~’, ‘~’’) FROM DUAL;


# LPAD
SELECT SUBSTR(‘MyHome’, 3) FROM DUAL;
SELECT SUBSTR(‘YourHome’, 1, 3) FROM DUAL;
SELECT REPLACE(‘MyHome’, ‘My’, ‘Your’) FROM DUAL;
SELECT LPAD(‘Hi’, 5, ‘~’) FROM DUAL;

 

 

  • SELECT 구문- 숫자함수의 활용
    • 숫자 함수: 숫자 데이터를 특정 목적에 따라 처리하는 함수 
      • ABS (숫자): 절대값을 반환 
      • SIGN (숫자): 수의 부호를 반환 (양수 : 1, 음수 : -1, 0 : 0) 
      • ROUND (숫자, 자리수): 지정된 소수점 자리수로 반올림, 자리수를 지정하지 않을 경우 0을 기본값으로 사용 
      • TRUNC (숫자, 자리수): 지정된 소수점 자리수까지 버림하여 반환, 자리수를 지정하지 않을 경우 0을 기본값으로 사용  
      • CEIL (숫자): 소수점 이하의 수를 올림 한 정수를 반환 
      • FLOOR(숫자): 소수점 이하의 수를 버림 한 정수를 반환 
      • MOD(숫자1, 숫자2): 나머지를 반환, 숫자2가 0일 경우 숫자1을 반환
SELECT ROUND(123.76, 1) FROM DUAL;
SELECT ROUND(173.76, -2) FROM DUAL;
SELECT TRUNC(123.76, 1) FROM DUAL;
SELECT TRUNC(123.76, -1) FROM DUAL;
SELECT CEIL(12.77) FROM DUAL;
SELECT FLOOR(25.4) FROM DUAL;
SELECT FLOOR(-25.4) FROM DUAL;
SELECT MOD(15, -2) FROM DUAL;
SELECT MOD(-15, -2) FROM DUAL;

 

 

  • SELECT 구문- 날짜함수의 활용
    • 날짜함수: 날짜 데이터를 특정 목적에 따라 처리하는 함수 
      • SYSDATE: 현재의 연, 월, 시, 분, 초를 반환
      • EXTRACT(단위 FROM 날짜): 날짜 중 특정 단위의 데이터를 추출하여 반환 (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
      • ADD_MONTHS(날짜, 개월 수): 날짜에 지정한 개월 수를 더한 날짜를 반환 (기준 날짜가 없을 시 마지막 일자 반환) 
SELECT SYSDATE FROM DUAL;
EXTRACT (YEAR FROM SYSDATE) AS YEAR FROM DUAL;
ADD_MONTHS(TO_DATE(‘2025-04-12’, ‘YYYY-MM-DD’), 1) AS NEXT FROM DUAL;

 

 

  • SELECT 구문- 데이터 형식 변환 함수의 활용
    • 데이터 변환 방식의 종류 
      • 명시적 변환: 데이터 형식 변환 함수를 이용하여 명시적으로 변환
      • 암시적 변환: 연산 방식에 따라 자동으로 변환
    • 데이터 형식 변환 함수 
      • TO_NUMBER(문자열): 숫자형으로 변환
      • TO_CHAR(데이터, 포맷): 숫자, 날짜 데이터를 지정한 포맷의 문자열로 변환, 포맷 생략 시 전체를 문자열로 변환 
      • TO_DATE(문자열, 포맷): 포맷에 따라 날짜형으로 변환 (YYYY, MM, DD, HH, HH24, MI, SS) 
SELECT TO_CHAR(123) FROM DUAL;
SELECT TO_CHAR(SYSDATE, ‘YYYYMMDD HH24MISS‘) FROM DUAL;

 

 

  • SELECT 구문- NULL 관련 함수의 활용
    • NULL 관련 함수
      • 결과가 NULL일 경우 어떤 방식으로 처리할 지 지정하는 함수 
        • NVL(인자1, 인자2): 인자 1이 NULL일 경우 인자2를 반환, NULL이 아닌 경우 인자 1을 반환
        • NULLIF(인자1, 인자2): 인자1과 인자2가 같으면 NULL을 반환, 같지 않은 경우 인자1을 반환  
        • COALESCE(인자1, 인자2, 인자3, ...): 전달한 인자 중 NULL이 아닌 최초의 인자의 값을 반환
        • NVL2(인자1, 인자2, 인자3): 인자1이 NULL이 아닌 경우 인자2를 반환, NULL일 경우 인자3을 반환 
SELECT USER_NO, NVL(GRADE, 0) AS HAKJUM FROM user_t;
SELECT USER_NAME, COALESCE (TEL, MAIL, SOCIAL) AS USER_CONTACT FROM user_t;
SELECT USER_NAME, NVL2(GRADE, '학점취득', '학점미취득') AS GRADE_CHECK FROM user_t;

 

 

  • SELECT 구문- CASE, DECODE 구문의 활용
    • IF~THEN~ELSE의 논리구조와 유사한 방식
    • CASE 구문의 예와 DECODE (오라클 전용)
# ELSE 생략 시 NULL 출력
CASE WHEN GRADE ='A' THEN ‘HIGH’ WHEN GRADE ='B' THEN 'MIDDLE' ELSE 'LOW' END

CASE GRADE WHEN GRADE ='A' THEN ‘HIGH’ WHEN GRADE ='B' THEN 'MIDDLE' ELSE 'LOW' END

DECODE (GRADE, 'A', 'HIGH', 'B', 'MIDDLE', 'LOW')

 

 

 

 

2. WHERE절의 특징과 활용 

(1) WHERE절의 특징과 연산자

    • WHERE절의 목적과 기본 형식 
      • SELECT, UPDATE, DELETE 문에서 조건을 설정하는 구문 
      • 원하는 조건을 WHERE 이후에 지정  
        • SELECT * FROM user_t WHERE NAME = ‘Ruby’; 
        • SELECT * FROM user_t WHERE NAME <> ‘Ruby’;
        • UPDATE user_t SET AGE = 30 WHERE NAME = ‘Ruby’;
        • DELETE user_t WHERE NAME = ‘Ruby’;
    • WHERE절에서 사용할 수 있는 연산자
      • 비교 연산자 : = , < , <= , >, >= 
      • 부정의미의 비교 연산자 : !=, ^=, <>, not 컬럼명 = 값, not 컬럼병명 > 값
      • SQL 고유 연산자 
        • BETWEEN A AND B : A와 B를 포함한 사이의 값
        • IN (리스트) : 리스트 내의 값
          • NOT BTWEEN A AND B
          • NOT IN (리스트)
          • IS NOT NULL
        • LIKE ‘비교 문자열‘ : 비교 문자열을 포함 (% : 문자열, _ : 하나의 문자)
        • IS NULL : NULL 값 확인(※ NULL은 일반 비교연산자로 확인할 수 없음)
      • 논리 연산자 : NOT, AND, OR 
SELECT NAME, GRADE FROM user_t WHERE NAME LIKE 'Ruby%Kim%';
SELECT NAME, JUMSU FROM user_t WHERE JUMSU in (100, 80, 70);

 

 

  • 연산자 우선 순위
    • 괄호 > 부정 연산자 > 비교 연산자 > 논리연산자
      1. 괄호
      2. NOT
      3. AND
      4. 비교 연산자, SQL 연산자
      5. OR 
    • 문자열 비교: 첫 서로 다른 문자의 값 비교
    • CHAR와 VACHAR의 비교: 길이가 다르면 길이가 긴 값이 크다고 판단 

 

 

 

3. GROUP BY, HAVING, ORDER BY 절의 특징과 활용

(1) GROUP BY 절의 특징과 집계 함수 

  • 데이터를 그룹 별로 묶어서 처리하기 위해 사용
  • 형식 : GROUP BY 기준 컬럼명(기준 컬럼은 2개 이상이 될 수 있음)
  • 집계 함수를 이용한 집계 데이터 도출 가능
  • GROUP BY 사용 시 SELECT 절에는 GROUP BY에 사용된 컬럼과 집계 함수만 사용할 수 있음

 

 

 

  • 집계함수의 특징
    • 집계함수란?
      • 여러 행들의 그룹을 대상으로 하나의 결과를 반환하는 다중행 함수
    • 집계함수의 종류
      • COUNT(*): NULL 값을 포함한 행의 개수
      • COUNT(컬럼): 값이 NULL인 행을 제외한 개수 
      • COUNT(DISTINCT 컬럼): 값이 NULL이 아닌 행을 대상으로 중복을 제거한 개수 
      • SUM(컬럼): 컬럼 값들의 합계
      • AVG(컬럼): 컬럼 값들의 평균
      • MIN(컬럼): 컬럼 값 중 최소값
      • MAX(컬럼): 컬럼 값 중 최대값
SELECT AVG(AGE) AS AVG_AGE FROM user_t;

 

 

 

(2) HAVING, ORDER BY절의 특징과 활용

  • HAVING 절의 특징과 활용
    • 그룹을 나타내는 결과 집합의 행을 대상으로 조건 지정
    • 일반적으로 GROUP BY 절 뒤에 위치하며, GROUP BY 절에서 사용된 컬럼을 조건으로 사용할 수 있음 
    • SELECT 한 결과를 특정 컬럼을 기준으로 정렬하기 위해 사용하는 구문 (※ 기본 : 임의의 순으로 출력)
    • ORDER BY 절에 컬럼을 지정하는 방식
      • 컬럼명, ALIAS(별칭), 컬럼 순서를 나타내는 정수
      • GROUP BY 절이 있을 경우 GROUP BY 대상 컬럼명만 지정 가능
      • 2 개 이상의 컬럼도 지정 가능

                  - ORDER BY 절의 정렬 옵션: ASC (오름차순, 기본), DESC (내림차순)

                  - 오라클은 NULL을 최대값으로 판단함

                  - NULL FIRST, NULL LAST 옵션으로 변경 가능

SELECT JOB, COUNT(*) AS CNT, SUM(SAL) AS TOTAL_SAL FROM emp_t 
WHERE DEPT_NO IN ('1', '2', '3') 
GROUP BY JOB HAVING COUNT(*) > 2 AND SUM(SAL) > 5000


SELECT NAME, POSITION FROM player_t 
WHERE NUMBER IS NOT NULL ORDER BY NAME DESC;

 

 

 

 

 

(3) SELECT 관련 구문의 실행 순서

  • ORDER BY 절의 특징과 활용

 

 

 

'개발' 카테고리의 다른 글

5. SQL의 기본 (1)  (0) 2025.04.05
4. 논리적 모델링과 정규화  (0) 2025.03.29
3. 데이터 모델링의 이해  (0) 2025.03.23
02. DBMS의 설치와 활용 - MySQL, Docker  (0) 2025.03.15
01. 데이터베이스와 SQL 개요  (1) 2025.03.08