SQL 데이터 분석

[인프런 스터디 빅쿼리 4주차] SQL 알아두면 언젠가 활용하는 기능? 절차적 언어? DECLARE, WHILE, EXECUTE

deviz 2024. 11. 17. 22:07
반응형

인프런에서 강의도 듣고 스터디 신청시 30% 할인 쿠폰을 통해 강의도 수강하고 ~ 스터디도 참여할 수 있습니다. 카일스쿨님의 인프런 빅쿼리 SQL 스터디 4주차에서 학습한 내용을 바탕으로 재구성했습니다. 

 

 

 

혹시 SQL에서 SELECT, FROM문법 말고 절차적 언어에 대해 들어보셨나요? 

 

 

 

 

 

🙋‍♀️ 처음 SQL 문법이나 이론을 공부하면 

SELECT, FROM, WHERE 절 등등 추출하기 위한 문법들은

많이 접하셨을텐데요 ! 

 


오늘은 절차적 언어에 대해 설명드리겠습니다. 

 

 

먼저, SQL에서 주로 분류되는 언어들의 종류를 살펴보겠습니다. 

 

 

📌 1. SQL의 주요 분류 

  • DDL (Data Definition Language):
    데이터 정의 언어로, 데이터베이스의 구조(스키마)를 정의하거나 수정하는 데 사용됩니다.
    예: CREATE, ALTER, DROP

  • DML (Data Manipulation Language):
    데이터 조작 언어로, 데이터의 조회, 삽입, 수정, 삭제와 같은 작업을 수행합니다.
    예: SELECT, INSERT, UPDATE, DELETE

  • DCL (Data Control Language):
    데이터 제어 언어로, 데이터베이스에 대한 접근 권한과 관련된 명령을 관리합니다.
    예: GRANT, REVOKE

  • TCL (Transaction Control Language):
    트랜잭션 제어 언어로, 데이터 조작 작업의 일관성을 보장하는 데 사용됩니다.
    예: COMMIT, ROLLBACK, SAVEPOINT

 

 

그렇다면, 절차적 언어와 SQL의 언어는 어떤 관계일까요? 

 

 

✅ 2. 절차적 언어의 특징과 SQL 분류와의 관계

절차적 언어는 위의 분류에서 명확히 독립된 한 영역으로 구분되지는 않습니다. 하지만 절차적 언어는 DML과 밀접한 관련이 있습니다.

  • DML과의 관계:
    절차적 언어는 데이터 조회 및 변경(SELECT, UPDATE, DELETE 등)을 수행하기 위해 DML 명령어를 기반으로 작업을 수행합니다.
     
WHILE condition DO 
EXECUTE IMMEDIATE 'UPDATE table_name SET column_name = value WHERE condition'; 
END WHILE;

 

  • DDL과의 관계:
    절차적 언어 내에서 DDL 명령어도 동적으로 실행 가능합니다. 예를 들어, EXECUTE IMMEDIATE를 사용해 테이블을 생성하거나 삭제할 수 있습니다.
EXECUTE IMMEDIATE 'CREATE TABLE new_table (id INT64, name STRING)';

 

 

  • TCL과의 관계:
    트랜잭션 내에서 절차적 언어를 활용해 복잡한 작업 흐름을 제어하거나 COMMIT과 ROLLBACK을 수행할 수 있습니다.
BEGIN TRANSACTION; 
EXECUTE IMMEDIATE 'INSERT INTO table_name VALUES (1, "example")'; 
ROLLBACK; -- 트랜잭션 롤백 
END TRANSACTION;

 

  • DCL과의 관계:
    DCL은 데이터 접근 권한과 관련된 명령어로, 절차적 언어와 직접적인 연관은 적습니다. 다만, EXECUTE IMMEDIATE로 권한 부여 또는 회수를 동적으로 실행할 수 있습니다.
EXECUTE IMMEDIATE 'GRANT SELECT ON table_name TO user_name';

 

 


✅ 3. 절차적 언어는 독립적인 확장 기능

절차적 언어는 SQL 자체의 확장 개념으로, DML을 기반으로 동작하며, 필요에 따라 DDL, DCL, TCL 명령어를 실행할 수 있는 "메타 레벨" 기능이라고 할 수 있습니다.



쉽게 말해, 절차적 언어는 "SQL의 각 기능을 조합하고 흐름 제어를 추가한 고급 기능"으로 보는 것이 적절합니다.



📜 4. 절차적 언어를 SQL의 분류와 함께 요약

 

SQL 분류 주요 역할 및  절차적 언어의 활용 관계

DDL 데이터 정의 (테이블 생성/삭제 등) EXECUTE IMMEDIATE로 동적 DDL 실행 가능
DML 데이터 조작 (삽입, 삭제, 수정, 조회) 변수 선언, 반복문, 조건문으로 DML 활용
DCL 권한 제어 (접근 허가/제거) EXECUTE IMMEDIATE로 동적 DCL 실행 가능
TCL 트랜잭션 제어 (COMMIT, ROLLBACK 등) 절차적 언어로 복잡한 트랜잭션 제어 가능

 

 

 

❗️ 5. 절차적 언어의 종류 

5.1 변수 선언 (DECLARE, SET)

SQL에서 변수는 데이터를 임시 저장하고 동적으로 작업을 수행할 때 유용합니다.

  • DECLARE를 사용해 변수의 타입과 기본값을 선언합니다.
  • SET을 사용해 변수에 값을 할당할 수 있습니다.

예시 코드:

DECLARE total_count INT64; SET total_count = 0;​




5.2 조건문 (IF, WHILE)

조건문을 사용하면 특정 조건에서만 코드를 실행하거나, 반복문과 결합하여 동작을 반복적으로 수행할 수 있습니다.

  • IF: 조건에 따라 실행 경로를 결정합니다.
  • WHILE: 특정 조건이 충족될 때까지 반복적으로 실행합니다.

예시 코드:

 
DECLARE i INT64; SET i = 0; WHILE i < 10 DO SET i = i + 1; END WHILE;
 
 
 
 

5.3 동적 쿼리 실행 (EXECUTE IMMEDIATE)

EXECUTE IMMEDIATE는 동적으로 SQL 쿼리를 실행할 수 있는 기능으로, 쿼리 결과를 변수에 저장하거나 사용자 지정 작업에 활용됩니다.

 

예시 코드 : 
 
DECLARE dynamic_query STRING; SET dynamic_query = 'SELECT COUNT(*) FROM `project.dataset.table`'; 
EXECUTE IMMEDIATE dynamic_query INTO total_count;

 

 

5.4 오류 처리 (RAISE)

BigQuery 절차적 언어에서는 RAISE를 통해 오류를 명시적으로 발생시킬 수 있습니다. 이 기능은 예외 상황을 관리하는 데 유용합니다.

예시 코드 : 

DECLARE current_value INT64;
SET current_value = -5; -- 테스트를 위해 음수 값 설정

-- 값이 음수일 경우 오류를 발생시킴
IF current_value < 0 THEN
  RAISE USING MESSAGE = '값이 음수일 수 없습니다: ' || CAST(current_value AS STRING);
END IF;

-- 값이 유효한 경우 처리 계속
SELECT '유효한 값입니다: ' || CAST(current_value AS STRING) AS message;



 

오류 처리 구문은 사용해 본 적 없지만, Python의 try, except 구문과 유사한 역할인 것 같네요 -! 

 

 

 

 

이외, 🙌 더 자세한 내용은 카일스쿨님 블로그  인프런 Bigquery(SQL) 활용편 강의에서 만나볼 수 있습니다. 

 

 

 

 

 

 

데비즈 인스타그램 : @dataviz_easy (스스로 성장하는 모습을 기록하며 정보도 공유하려고 합니당-!) 

데비즈 이메일 : dataviz.easy@gmail.com

 

 

반응형