Database 108

[MySQL] IN 조건 순서대로 데이터 조회하기

개요데이터베이스 테이블에 대해 여러 조건에 맞는 행을 조회할 때 IN 절을 곧잘 사용하게 된다. 데이터를 조회하면 기본적으로 데이터를 조회하는 쿼리에서 사용하는 INDEX의 순서로 정렬되며, 필요한 경우에는 명시적으로 ORDER BY를 사용해 정렬할 기준을 명시해 데이터를 확인한다.하지만 IN 절에 전달한 순서대로 데이터를 확인하고 싶을 때는 어떻게 해야 할까? 방법을 적어둔다. ORDER BY FIELDORDER BY 절에서 FIELD를 사용하면 특정한 값에 대한 정렬 우선순위를 지정할 수 있다.SELECT column1, column2, ...FROM your_tableORDER BY FIELD(column_name, value1, value2, ...); 예로 들어 아래와 같은 movie 테이블이..

Database 2025.07.08

[MySQL] WHERE ~ IN - 다중 컬럼 지정

개요데이터베이스에서 데이터를 조회하다 보면 여러 컬럼에 대한 조건을 OR 조건으로 연달아 나열해야 하는 경우가 있다. SELECT * FROM table1 WHERE (column1 = value1 AND column2 = value2) OR (column1 = value3 AND column2 = value4) OR (column1 = value5 AND column2 = value6);나열할 조건이 많아질수록 쿼리도 길어지고 보기 어려운데, IN 조건을 활용하면 조금 더 가독성 있는 쿼리를 작성할 수 있다.문법을 적어둔다. 다중컬럼 IN 조건일반적으로 단일 컬럼을 예로 들은 문서가 많아서 몰랐는데, 조건절에 사용할 컬럼을 소괄호로 묶어서 나열하고, 값도 동일하게 소괄호로 묶어서 ..

Database 2025.07.04

[CloudBeaver] 웹 클라우드 데이터베이스 클라이언트

개요업무를 하다가 웹 브라우저 상에서 동작하는 데이터베이스 클라이언트 소프트웨어를 하나 발견했다. CloudBeaver라는 소프트웨어인데 어떻게 설치하고 사용하는지 간단히 알아본다. CloudBeaver효율적이고 안전한 데이터 관리를 위해 설계된 경량 웹 애플리케이셔이다. 웹 브라우저를 통해 접근하며 SQL, NoSQL, 클라우드 데이터베이스 등 다양한 데이터베이스를 지원한다.Java 애플리케이션이고, 웹은 TypeScript, React로 구현되어 있다. DBeaver에서 관리하며 엔터프라이즈 버전과 무료인 커뮤니티 버전을 제공한다. CloudBeaver는 다음과 같은 기능을 제공한다.- 사용자 친화적인 인터페이스- 안전한 연결- 다양한 배포 옵션- 다중 사용자 환경- 다양한 데이터베이스 지원- 클..

Database 2025.06.23

[MySQL] OPTIMIZE - 테이블 최적화

개요AWS RDS 사용 중 총 100GB의 스토리지 용량 중 95GB를 사용하고 있다는 알람을 받았다.문제를 해결하기 위해 데이터베이스 테이블에서 데이터를 삭제했는데 스토리지 용량을 줄어들지 않는 상태다.이번 글은 이 문제를 해결하는 방법 중 하나인 OPTIMIZE TABLE 구문에 대해서 정리한다. 원인데이터베이스는 데이터를 삭제하면 실제로 데이터를 삭제하는 것이 아니라 삭제 표시만 한 후 다른 데이터가 오면 그 위에 덮어쓰는 방식으로 동작한다.좀 더 간결하게 표현하면 데이터를 삭제해도 해당 공간을 바로 회수하지 않는다. 이후에 데이터를 삽입할 떼 보다 빠른 성능을 위해 할당한 공간을 재사용하기 위함인데, 용량 확보 필요시 OPTIMIZE TABLE 구문으로 삭제한 공간을 실제 디스크 공간으로 회수..

Database 2025.05.30

[MySQL] LIMIT ~ OFFSET - 조회 범위 지정

개요데이터베이스를 조회한 데이터를 응답하는 RestAPI의 응답시간이 늦다는 피드백이 왔다. 관련해서 요청 데이터 양을 변경하여 API 테스트가 필요한데, 요청할 때마다 데이터를 다르게 주고 싶다.관련해서 LIMIT과 OFFSET을 활용하고자 사용 방법 등을 정리한다.  LIMITLIMIT은 조회하는 행의 수를 제한할 때 사용한다. SELECT column_name(s)FROM table_nameLIMIT number;예시 데이터는 1부터 10까지의 값을 가진 테이블인데 이 테이블을 5행까지만 조회하는 것으로 제한한 것이다.  LIMIT ~ OFFSETLIMIT은 OFFSET 옵션으로 조회 시 건너뛸 행의 수를 지정할 수 있다.SELECT column1, column2, ...FROM table_name..

Database 2025.04.16

[MySQL] GET DIAGNOSTICS

개요2025.03.24-[MySQL] Stored Procedure - HANDLER에서 SQL을 사용하며 발생하는 에러를 처리하기 위한 핸들러를 알아보았었다. 이번 글에서는 비슷하게 에러를 다루는 데 사용할 수 있는 GET DIAGNOSTICS라는 구문을 알아보려고 한다.  DIAGNOSTICSSQL문을 실행 시 진단 영역에 진단 정보를 생성하는데, 진단 정보는 SQL 실행 중 발생한 오류에 대한 정보를 포함한다. 진단 정보를 통해서 오류 코드, 경고, 영향을 받은 행 수 및 조건, 명령문에 대한 기타 진단 데이터와 같은 세부 정보에 접근할 수 있다.진단 영역은 크게 발생한 조건 수나 영향을 받은 행 수와 같은 명령문 정보와 오류 코드 및 메시지 등의 조건 정보로 구성되어 있다. 명령문이 여러 조건(c..

Database 2025.04.07

[MySQL] Stored Procedure - HANDLER

개요2025.03.06-[MySQL] Stored Procedure - 매개변수에 이어서 이번 글도 프로시저와 관련된 부분이다.Stored Procedure를 다루다보면 자연스럽게 에러 처리에 대한 요구사항도 생기기 마련이다. 이번 글에서는 Stored Procedure에서 에러를 적절하게 처리하기 위한 개념인 Handler에 대해서 알아본다.  Handler프로시저 내에서 DECLARE ~ HANDLER 구문은 하나 이상의 조건을 처리하는 핸들러를 정의할 수 있다. DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statementhandler_action: { CONTINUE | EXIT | UND..

Database 2025.04.01

[MySQL] Prepared Statement

개요프로시저를 분석하다 보면 PREPARE라는 구문을 종종 발견하게 되는데, 이번 글에서는 관련 개념을 정리해보려고 한다.  Prepared StatementPrepared Statement은 미리 컴파일된 문장을 의미하며, 컴파일하여 저장해 둔 문장을 여러 번 실행할 수 있을 뿐만 아니라 자리 표시자를 활용하여 동적으로 SQL을 실행시킬 수도 있다. 미리 컴파일된 문장을 활용하기 때문에 구문을 실행시킬 때마다 분석하는 오버헤드를 줄일 수 있다는 장점이 있다.MySQL에서는 PREPARE(컴파일) -> EXECUTE(실행) -> DEALLOCATE PREPARE(해제)의 흐름으로 Prepared Statement을 사용한다.  PREPAREPREPARE는 SQL문을 주닙하고 나중에 참조할 수 있도록 이름..

Database 2025.03.28

[MySQL] GREATEST/LEAST - 행 별 최대/최소 찾기

개요평소 많이 사용하는 MAX 함수는 특정 열 내의 최댓값을 찾는 함수이다. 그런데 이번에는 특정 행 내의 최댓값을 확인해야 하는 경우가 발생했다. 이번 글에서는 greatest라는 함수를 사용해 각 행의 최댓값을 찾아본다.  GREATESTGREATEST는 주어진 수에서 가장 큰 값을 반환한다. 숫자 뿐만 아니라 문자열을 대상으로도 연산을 할 수 있다.GREATEST(arg1, arg2, arg3, ...)-- 예시SELECT GREATEST(1, 10, 100, 32) AS greatestUNIONSELECT GREATEST("w3Schools.com", "microsoft.com", "apple.com") AS greatest아래는 테이블에 대해 사용하는 예시이다. 먼저 다음과 같은 세 개의 숫자형..

Database 2025.03.27

[MySQL] DELETE JOIN - 교차 테이블 데이터 삭제

개요2025.03.12-[MySQL] UPDATE JOIN - 교차 테이블 갱신에서 UPDATE JOIN 구문에 대해서 알아보았는데, 이번에는 DELETE JOIN이라는 구문도 발견해서 추가로 정리한다.  DELETE JOINDELETE JOIN은 다른 테이블과 관련된 조건에 따라 한 테이블에서 행을 삭제할 수 있다. 여러 연결된 테이블에 존재하는 데이터에 대해 특정 조건에 따라 행을 삭제해야 할 때 유용하다.DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE condition;데이터를 삭제할 테이블을 DELETE와 FROM 절 사이에 나열한다. 위의 예시의 경우 T1, T2 테이블을 나열했는데, 만약 T1만 기재하면 T1 테이블의 데이터만 삭제..

Database 2025.03.26