MySQL 저장 프로시저에서 WHERE IN() 절 사용하기MySQL에서 저장 프로시저(Stored Procedure) 내부에 WHERE IN() 조건을 적용하려면 일반적인 방식으로는 동작하지 않습니다. IN() 절에 전달되는 값 목록이 단순 문자열로 처리되기 때문입니다. 따라서 동적 SQL과 PREPARE 문을 함께 활용해야 합니다.아래 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Id int,
MySQL에서 데이터를 집계할 때 특정 조건에 해당하는 레코드는 제외하고, 나머지 레코드의 숫자 값만 합산해야 하는 경우가 자주 있습니다. 이때 SUM() 함수와 WHERE 절을 함께 사용하면 간단하게 해결할 수 있습니다.1. 테이블 생성하기먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> Name varchar(20),-> Amount int-> );Query OK, 0 rows affected (0.61 sec)2. 레코드 삽입하기INSERT 명령을
MySQL 최적화 및 복구 작업에 필요한 최소 사용자 권한MySQL에서 OPTIMIZE(최적화) 및 REPAIR(복구) 작업을 수행하기 위해 사용자에게 반드시 부여해야 하는 최소 권한은 SELECT(조회)와 INSERT(삽입)입니다. 즉, 이 두 가지 권한만 있으면 테이블 최적화와 복구 명령을 정상적으로 실행할 수 있습니다.권한 부여 기본 문법아래 문법을 사용하면 사용자에게 INSERT와 SELECT 권한을 부여할 수 있습니다.GRANT INSERT, SELECT ON yourDatabaseName.* TO yourUserName@
MySQL에서 다른 열의 조건이 충족되는 경우 특정 열의 값을 합산하려면 집계 함수 SUM()과 GROUP BY 절을 함께 사용하면 됩니다. GROUP BY를 사용하면 특정 기준(예: 입사 연도와 월)으로 데이터를 그룹화한 뒤, 각 그룹별로 급여 합계를 손쉽게 계산할 수 있습니다.예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> EmployeeName varchar(20), -> Jo
MySQL에서 varchar 열(또는 여러 열의 조합)에 고유성을 부여하려면 UNIQUE 제약 조건을 사용하면 됩니다. 하나의 열뿐만 아니라 두 개 이상의 열 조합에도 적용할 수 있으며, 이 경우 해당 열들의 값 조합 전체가 중복되지 않도록 강제됩니다.alter table yourTableName add unique(yourColumnName1, yourColumnName2, ...N);예제 테이블 생성먼저 예제로 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1598 -> (
MySQL에서 날짜 데이터를 월별로 조회하려면 MONTH() 함수를 사용하면 됩니다. 이 함수는 DATETIME 또는 DATE 타입의 값에서 월(1~12)에 해당하는 숫자를 추출해 줍니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. 배송 날짜를 저장할 Shippingdate 컬럼을 DATETIME 타입으로 선언합니다.mysql> create table DemoTable1599 -> ( -> Shippingdate datetime -> );Query OK, 0 rows affect
MySQL에서 디스크 공간 조회하기네, 가능합니다. information_schema.tables를 조회하면 특정 테이블의 데이터 크기(DATA_LENGTH), 인덱스 크기(INDEX_LENGTH), 평균 행 길이(AVG_ROW_LENGTH) 등을 확인하여 해당 테이블이 차지하는 디스크 공간을 파악할 수 있습니다.기본 구문사용하는 구문은 다음과 같습니다.SELECT * FROM information_schema.tables WHERE table_name = yourTableName;1단계: 테이블 생성먼저 예제로 사용할 테이블을 생
MySQL에서 빈 문자열을 NULL로 업데이트하는 방법테이블에 저장된 빈 문자열()을 NULL로 변경하고 싶다면 IF() 함수와 UPDATE 명령을 함께 사용하면 됩니다. IF() 함수는 조건이 참일 때 두 번째 인자를, 거짓일 때 세 번째 인자를 반환하는 조건 함수로, 이를 활용하면 빈 값인 경우에만 NULL을 넣도록 간단히 처리할 수 있습니다.아래에서 전체 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1601 &
MySQL에서 문자열을 타임스탬프 형식으로 변환하는 방법MySQL에서 VARCHAR로 저장된 날짜 문자열을 타임스탬프(날짜·시간) 형식으로 변환하려면 STR_TO_DATE() 함수와 DATE_FORMAT() 함수를 함께 사용하면 됩니다. STR_TO_DATE()는 지정된 형식에 맞춰 문자열을 날짜/시간 값으로 파싱하고, DATE_FORMAT()은 그 값을 원하는 출력 형식으로 다시 포맷해 줍니다.아래 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 날짜 문자열을 저장할 테이블을 만듭니다.mysql> create t
MySQL에서는 INSERT 문에 SELECT 쿼리를 결합하여 데이터를 삽입할 수 있습니다. 이 방식은 값을 직접 입력하는 것뿐만 아니라, 다른 테이블의 데이터를 조회해서 삽입하는 등 다양한 상황에서 유용하게 활용됩니다.기본 문법SELECT 쿼리와 함께 INSERT를 수행하려면 아래와 같은 문법을 사용합니다.insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N)select yourValue1,yourValue2,yourValue3,......N;
MySQL에서 UPDATE 문을 사용하면 여러 열을 한 번에 수정할 수 있지만, 경우에 따라서는 하나의 열(컬럼) 값만 선택적으로 변경해야 할 때가 있습니다. 이 글에서는 WHERE 조건절과 함께 UPDATE 문을 활용하여 원하는 열의 값만 안전하게 수정하는 방법을 예제와 함께 살펴보겠습니다.1. 테이블 생성하기먼저 실습에 사용할 테이블을 생성합니다. 학생 ID, 이름, 국가명 세 개의 열을 가진 테이블입니다.mysql> create table DemoTable1605 -> ( -> StudentId in
MySQL 저장 프로시저 내에서 조건 분기를 처리하려면 IF-ELSE 문을 사용하면 됩니다. 기본적인 문법 구조는 다음과 같습니다.if yourCondition then yourStatement1;else yourStatement2;end if;end//저장 프로시저 생성 예제위 문법을 실제로 적용해 보겠습니다. 입력값이 10이면 당첨 메시지를, 그렇지 않으면 다른 메시지를 출력하는 프로시저를 만들어 보겠습니다.mysql> delimiter //mysql> create procedure Test_Demo(In
MySQL에는 조화 평균(Harmonic Mean)이나 2차 평균(Quadratic Mean, 제곱평균제곱근)을 계산하는 전용 함수가 없습니다. 하지만 COUNT(), SUM(), SQRT() 같은 기본 집계 함수를 조합하면 손쉽게 구현할 수 있습니다.각 평균의 수식은 다음과 같습니다.조화 평균: n / Σ(1/xᵢ) — 값들의 역수 합으로 나눈 값2차 평균(RMS): √(Σ(xᵢ²) / n) — 값들을 제곱한 후 평균을 내고 다시 제곱근을 취한 값1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create
현재 날짜로부터 2주 후보다 이전인 레코드 조회하기MySQL에서 현재 날짜(current date)에 2주를 더한 날짜보다 이전인 레코드를 조회하려면 DATE_ADD() 함수와 CURDATE() 함수를 함께 사용하면 됩니다.기본 문법다음과 같은 문법을 사용합니다.SELECT * FROM yourTableNameWHERE yourColumnName < DATE_ADD(CURDATE(), INTERVAL 2 WEEK);이 문법은 현재 날짜에 2주를 더한 날짜보다 작은(이전인) 값만 필터링하여 가져옵니다.현재 날짜 확인하기먼저 이
MySQL에서는 FirstName과 LastName처럼 분리되어 있는 두 개의 컬럼 값을 하나로 합쳐 새로운 컬럼에 저장해야 하는 경우가 자주 발생합니다. 대표적인 예가 이름과 성을 결합하여 FullName(전체 이름) 컬럼을 만드는 것입니다. 이 글에서는 ALTER TABLE과 CONCAT() 함수를 활용해 이 작업을 수행하는 방법을 단계별로 살펴보겠습니다.기본 문법두 개의 필드를 결합하여 세 번째 필드에 저장하려면 먼저 ALTER TABLE 문으로 새 컬럼을 추가한 뒤, CONCAT() 함수를 이용해 UPDATE 문으로 값을 채
varchar 타입으로 저장된 시간 문자열(예: 1620)을 실제 시간 형식(예: 04:20)으로 변환하려면 TIME_FORMAT() 함수를 사용하면 됩니다. 이 함수를 SUBSTRING(), CONCAT()과 함께 조합하면 붙어 있는 숫자 형태의 시간 데이터를 사람이 읽기 쉬운 시간 표현으로 손쉽게 바꿀 수 있습니다.1. 예제 테이블 생성먼저 시간 값을 varchar로 저장하는 테이블을 생성합니다.mysql> create table DemoTable1591 -> (
MySQL에서 기존 데이터가 NULL 또는 0인 경우에만 특정 값으로 업데이트하고, 그 외의 유효한 값은 그대로 유지해야 하는 경우가 종종 있습니다. 이럴 때는 IF() 함수를 활용하면 간단하게 해결할 수 있습니다.핵심 아이디어UPDATE 문에서 IF(조건, 참일 때 값, 거짓일 때 값) 형태로 조건을 걸어, 컬럼 값이 NULL이거나 0일 때만 새 값을 대입하고 나머지 경우에는 원래 값을 유지하도록 처리합니다.1. 테스트용 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1
MySQL에서 CASE WHEN 대신 IF() 함수 사용하기MySQL에서는 IF() 함수를 CASE WHEN 구문의 대안으로 사용할 수 있습니다. 조건이 단순한 경우 IF() 함수를 활용하면 쿼리를 더 짧고 가독성 있게 작성할 수 있습니다. IF() 함수는 IF(조건식, 참일 때 값, 거짓일 때 값) 형태로 세 개의 인자를 받습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1593 -> ( -> PlayerScore int -> );Que
MySQL에서 N번째로 높은 값 선택하기데이터 분석이나 시험 성적 처리 등을 하다 보면 테이블에서 N번째로 높은 값을 찾아야 하는 경우가 자주 발생합니다. 예를 들어 두 번째로 높은 점수나 세 번째로 높은 매출액을 구하는 상황이 대표적입니다.MySQL에서는 ORDER BY와 LIMIT 절을 조합하면 이러한 요구 사항을 간단하게 해결할 수 있습니다. 기본 문법은 다음과 같습니다.SELECT DISTINCT(yourColumnName) FROM yourTableName ORDER BY yourColumnName DESC LIMIT (N
MySQL에서 문자열에 포함된 숫자는 모두 제거하고 알파벳 문자와 슬래시(/)만 남기고 싶을 때가 있습니다. 이럴 때 REGEXP_REPLACE() 함수를 사용하면 정규 표현식 기반으로 손쉽게 처리할 수 있습니다.1. 예제 테이블 생성하기먼저 실습에 사용할 테이블을 만들어 보겠습니다.mysql> create table DemoTable1595 -> ( -> StudentCode varchar(50) -> );Query OK, 0 rows affected (0.44 sec)2. 샘플 데이터 삽입하