전체 글 1242

[MySQL] UPDATE JOIN - 교차 테이블 갱신

개요데이터베이스를 다룰 때에 UPDATE를 수행할 때는 단순하게 단일 테이블에 대해서만 수행을 했었는데, 현재 사용 중인 프로시저를 분석하던 중 UPDATE 문에서 JOIN을 사용하는 문법을 발견했다.이번 글에서 UPDATE JOIN 구문이 어떻게 동작하는지 정리해 둔다.  UPDATE JOINUPDATE JOIN은 다른 테이블의 값을 기반으로 한 테이블을 업데이트하는 등의 작업을 할 때 사용할 수 있는데, 그 구문은 다음과 같다.UPDATE T1[INNER JOIN | LEFT JOIN] T2 ON T1.C1 = T2.C1SET T1.C2 = T2.C2, T2.C3 = exprWHERE condition; 동작 흐름UPDATE 키워드 뒤에 갱신할 테이블 지정한다.JOIN 절 사용한다. JOIN ..

Database 2025.03.25

[MySQL] Function - 정의/호출/삭제

개요2025.02.26-[Database] Stored Procedure - 정의/호출에서 데이터베이스에서 여러 쿼리를 한 번에 처리하는 목적으로 사용하는 프로시저에 대해서 알아보았다.프로시저는 호출하여 사용한다는 점에서 함수(Function)와 유사한 점이 있는데, 이번 글에서는 함수에 대해서 알아보려고 한다.  Function 데이터베이스에서의 함수는 일반적인 프로그래밍 언어에서의 함수 개념과 동일하다. 입력값을 받아 특정 결과를 수행한 결괏값을 출력하는 구조로, DML에서 사용할 수 있다. 일반적으로 데이터베이스에서는 count, sum, avg 등과 같은 함수를 제공하고 있는데, 데이터베이스에서 제공하지 않는 함수는 사용자가 직접 정의하여 사용할 수도 있다.    정의함수를 정의할 때는 CREAT..

Database 2025.03.24

[LeetCode] 1789 - Primary Department for Each Employee

문제문제 : https://leetcode.com/problems/primary-department-for-each-employee/?envType=study-plan-v2&envId=top-sql-50다음과 같은 스키마를 가진 테이블 Employee가 존재한다.+---------------+---------+| Column Name | Type |+---------------+---------+| employee_id | int || department_id | int || primary_flag | varchar |+---------------+---------+employee_id는 직원의 ID이고,  department_id는 직원이 속한 부서의 ID이다. employ..

[LeetCode] 392 - Is Subsequence

문제문제 : https://leetcode.com/problems/is-subsequence/?envType=study-plan-v2&envId=leetcode-75문자열 s, t가 주어질 때 s가 T의 하위 문자열이면 True를 반환하고, 하위 문자열이 아니면 False를 반환하는 프로그램을 작성하라.여기서 하위 문자열이란, 나머지 문자의 상대적인 위치를 방해하지 않고 일부 문자열을 삭제하여 원래 문자열에서 형성되는 새로운 문자열을 말한다.  예시 )- s가 abc이고 t가 ahbgdc인 경우, t는 s의 하위 문자열이다.- s가 axc이고 t가 ahbgdc인 경우, t는 s의 하위 문자열이 아니다.   풀이정규표현식 패턴을 만들어, t가 패턴에 일치하는지 확인하는 방식으로 구현했다.예로 들어 s가 a..

[MySQL] Stored Procedure - 매개변수

개요2025.02.26-[Database] Stored Procedure - 정의/호출에서 프로시저의 매개변수를 정의하는 부분을 간단하게 살펴봤었다. 이번 글에서는 매개변수를 정의하고 실제로 사용하는 예시를 정리해두려고 한다.   ININ 유형의 매개변수는 프로시저를 호출할 때 전달하는 입력 매개변수이다. 프로시저 내에서 사용할 때는 변수명만 기재하면 된다.CREATE PROCEDURE test_procedure( IN value VARCHAR(20))BEGIN SELECT value;END-- 호출CALL test_procedure('test');   OUTOUT 유형 매개변수는 프로시저가 호출자에게 값을 반환하는 매개변수이다. 프로시저 내에서 NULL로 초기화된다.CREATE PROCEDU..

Database 2025.03.19

[MySQL] DELIMITER - 구분 기호

개요Stored Procedure에 대해서 알아보다보면 SQL 구문에 DELIMITER 라는 키워드를 찾아볼 수 있다. 이번 글에서는 DELIMITER의 역할에 대해서 잠깐 알아보려고 한다.  DELIMITER기본적으로 SQL의 구문기호는 세미콜론(;)이다. 데이터베이스는 세미콜론을 기준으로 하나의 쿼리문을 인식하고 실행시킨다. 하지만 필요한 경우 구분 기호를 변경하여 사용하기도 한다. 이 때 사용하는 키워드가 바로 DELIMITER이다.DELIMITER DELIMITER는 쿼리를 구분하는 구분 기호를 전달받은 문자열로 재정의하여 사용한다.DELIMITER //select 1//select 2//테스트해보면 기본 구분 기호인 세미콜론이 아니라 '//' 문자열을 구분 기호로 하여 쿼리가 실행되고 있음을 확..

Database 2025.03.18

[Pandas] 문자열 데이터로 DataFrame 로드하기

개요Pandas를 사용하면 주로 딕셔너리, 배열 등을 사용해 데이터프레임을 만들거나 파일을 읽어서, 데이터 처리를 수행하게 된다. 하지만 단순한 테스트 경우에는 간단히 문자열 데이터를 사용해 데이터프레임을 만들게 되는데, 이번 글에서는 문자열로만 데이터프레임을 만드는 방법을 소개하려고 한다.   방법Pandas에서 파일을 읽어 들여 데이터프레임을 만드는 함수는 대개 매개변수로 파일 경로나 버퍼를 전달받는다. 즉, read__csv나 read_json 같은 함수에 파일 경로가 아니라 문자열 버퍼를 전달하면 된다. 방법은 무척 간단하다. 문자열 값을 io.StringIO를 사용해 StringIO 객체로 만들어 read_csv 함수 등에 전달하면 된다.참고로 StringIO는 인메모리 텍스트 버퍼를 사용하는 ..

Python 2025.03.17

[MySQL] Stored Procedure - 반복문

개요2025.02.28-[MySQL] Stored Procedure - 조건문에서 프로시저 내에서 조건에 따라 실행흐름을 제어해 보았다. 이번 글에서는 반복문을 사용해보려고 한다.  WHILEWHILE문은 조건문이 참인 경우 계속 반복하며 실행된다. 다시 말해 조건이 거짓이 되면 반복을 종료한다.[begin_label:] WHILE search_condition DO statement_listEND WHILE [end_label] 예시 )아래 예시는 입력으로 받은 문자를 입력받은 수만큼 반복하여 SELECT 하는 프로시저이다. DELIMITER &&CREATE PROCEDURE test_procedure( IN loop_str CHAR, IN loop_val INT)BEGIN declare..

Database 2025.03.14

[Python] itertools.groupby - 연속적인 부분 찾기

개요알고리즘 문제를 풀다 보면 문자열이나 리스트에서 연속적인 부분을 찾아야 하는 문제를 찾아볼 수 있다. 직접 순회하면서 확인하는 방법도 있지만, 이번 글에서는 itertools의 groupby를 사용해 찾아보려고 한다.  iterrtools.groupbygroupby는 연속적인 키과 그룹을 반환하는 iterator를 만든다. 키는 각 요소에 대한 키 값을 계산하는 함수로, 지정하지 않으면 항등 함수로 기본 설정된다. 키 값이 변경될 때마다 그룹이 새로 생성되기 때문에 기본적으로 정렬된 상태에서 사용해야 한다.  사용 예시예로 들어 abbbaaaa라는 문자열에서 연속적인 부분을 찾으려고 한다.from itertools import groupbystr_input = 'abbbaaaa'for k, val i..

Python 2025.03.13

[Python] sqlalchemy - Trino 다루기

개요운영 중인 서비스에서 Trino를 백엔드로 사용하고 있는데, 기존에는 Trino CLI나 별도의 프런트엔드를 사용해서 작업을 수행했었다. 최근 프로그래밍적인 방법을 사용해서 작업을 할 필요가 있어, 방법을 적어두려고 한다.사용 언어는 Python이다.  필요 라이브러리 설치Python으로 Trino를 다루기 위해서는 trino 클라이언트 라이브러리를 선택할 수 있다. trino 클라이언트 라이브러리는 아래와 같이 pip 명령어로 설치할 수 있는데…… pip install trino테스트 환경이 컨테이너 기반이라서 그런지 trino 라이브러리로는 연결이 잘 안 됐다. 때문에 이 글에서는 sqlalchemy를 사용해 다뤄보려고 한다.pip install sqlalchemy  사용법연결 URLsqlalch..

Python 2025.03.12