MySQL에서 GROUP_CONCAT() 함수를 사용할 때 여러 행의 값을 하나로 합치는 경우가 많습니다. 그런데 구분자를 일반적인 콤마(,) 대신 줄바꿈(new line)으로 지정하면 의도대로 동작하지 않는 것처럼 보이는 경우가 종종 있습니다. 이 글에서는 줄바꿈 구분자를 올바르게 사용하는 방법과 결과가 한 줄로 보이는 이유까지 자세히 알아보겠습니다.GROUP_CONCAT에서 줄바꿈 구분자를 사용하는 기본 문법줄바꿈 문자(\r\n)를 구분자로 사용하려면 아래와 같은 형식으로 쿼리를 작성합니다.SELECT GROUP_CONCAT(C
MySQL에서 id 오름차순(ASC)으로 정렬된 상태의 마지막 3개 행을 조회하려면 서브쿼리(subquery)를 사용하면 됩니다. 핵심 아이디어는 내부 쿼리에서 먼저 내림차순(DESC)으로 정렬해 최신 3개 행을 추출한 후, 외부 쿼리에서 다시 오름차순으로 정렬하는 것입니다. 기본 문법 SELECT * FROM ( SELECT * FROM yourTableName ORDER BY yourIdColumnName DESC LIMIT 3 ) anyAliasName ORDER BY yourIdCo
MySQL에서 NOT NULL 값의 개수 계산하기MySQL에서 특정 컬럼의 NULL이 아닌 값(NOT NULL)만 카운트하려면 집계 함수인 COUNT(컬럼명)을 사용하면 됩니다. COUNT 함수는 기본적으로 NULL 값을 제외하고 실제 값이 존재하는 행만 세기 때문에, 별도의 조건 처리 없이 간편하게 사용할 수 있습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Num
MySQL에서 공통 요소 개수 세는 방법테이블에 저장된 값들 중 같은 값이 몇 번 등장하는지, 즉 중복(공통) 요소의 개수를 확인하고 싶다면 COUNT() 함수와 GROUP BY 절을 함께 사용하면 됩니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.1. 테이블 생성하기mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
개요MySQL에서는 저장 프로시저(Stored Procedure)를 활용하면 테이블 생성 작업을 자동화하고 재사용할 수 있습니다. 이 글에서는 세 개의 컬럼을 가진 테이블을 생성하는 저장 프로시저를 만드는 방법을 단계별로 살펴보겠습니다.1. 테이블을 생성하는 저장 프로시저 작성아래는 테이블을 생성하는 저장 프로시저를 만드는 쿼리입니다. 여기서는 Id, UserFirstName, UserLastName 세 개의 컬럼을 가진 DemoTable이라는 테이블을 생성합니다. Id 컬럼은 자동 증가(AUTO_INCREMENT)되는 기본 키(P
MySQL에서 열 이름 길이가 5자보다 긴 열 찾기 데이터베이스의 네이밍 규칙을 점검하거나 스키마를 정리할 때, 열(컬럼) 이름이 일정 길이 이상인 것만 골라내야 하는 경우가 종종 있습니다. MySQL에서는 INFORMATION_SCHEMA.COLUMNS 테이블과 HAVING 절을 조합하면 이런 작업을 SQL 한 문장으로 간단히 처리할 수 있습니다. 1. 기본 원리: INFORMATION_SCHEMA.COLUMNS MySQL은 테이블 구조와 같은 메타데이터를 INFORMATION_SCHEMA라는 가상 데이터베이스에 보관합니다. 그
MySQL에서 테이블의 열(컬럼) 이름이 대소문자 혼합으로 정의되어 있을 때, 이를 모두 소문자로 변환하여 조회하고 싶은 경우가 있습니다. 이럴 때는 INFORMATION_SCHEMA.COLUMNS 뷰와 LOWER() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.1. 예제 테이블 생성하기먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable ( UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserFirstName v
MySQL REGEXP 정규 표현식으로 여러 일치 문자열을 가진 레코드 선택하기MySQL에서 특정 패턴과 일치하는 여러 문자열을 가진 레코드를 조회하려면 정규 표현식(REGEXP)을 활용하면 됩니다. 이번 글에서는 예제를 통해 그 방법을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable ( ProductId int NOT NULL AUTO_INCREMENT PRIMARY
MySQL에서 제품 테이블에 저장된 재고의 총 가치를 구하려면 각 제품의 수량 × 단가를 곱한 값들을 모두 더하면 됩니다. 이때 SUM() 함수와 산술 연산자를 함께 사용하면 하나의 쿼리로 간단하게 처리할 수 있습니다. 아래에서 테이블 생성부터 결과 확인까지 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable ( ProductId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ProductQuan
MySQL에서 MyISAM 테이블을 복구할 때 인덱스가 크면 repair with keycache 방식이 사용되어 복구 속도가 매우 느려질 수 있습니다. 이를 피하려면 아래와 같은 문법을 따르는 것이 좋습니다.기본 문법create table yourNewTableName as (select * from yourOldTableName);alter table yourNewTableName add index(yourColumnName);핵심은 기존 테이블의 데이터를 새 테이블로 복사한 후, 인덱스를 나중에 추가하는 것입니다. 이렇게 하면
MySQL LIMIT으로 특정 행 범위의 데이터 가져오기MySQL에서 두 행 사이에 있는 데이터를 조회하려면 LIMIT 절을 활용하면 됩니다. LIMIT은 LIMIT 오프셋, 개수 형태로 작성할 수 있어서, 원하는 시작 위치부터 지정한 개수만큼의 행만 간편하게 추출할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREM
MySQL에서 여러 열(column)을 동시에 기준으로 데이터를 필터링하려면 WHERE 절과 OR 연산자를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 여러 열 조건으로 행을 조회하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. 아래 쿼리는 Id, Name, Score 세 개의 열을 가진 DemoTable을 만듭니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
MySQL에서 문자열 값의 일부(예: 접두사를 제외한 숫자 부분)를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때 ORDER BY 절과 RIGHT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.RIGHT() 함수란?RIGHT() 함수는 문자열의 오른쪽부터 지정한 길이만큼의 문자를 반환합니다. 예를 들어 User1234라는 값에서 RIGHT(UserId, 4)를 적용하면 1234가 반환되며, 이 값을 기준으로 정렬할 수 있습니다.1. 샘플 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create
MySQL에서 특정 월과 연도 조건에 해당하는 데이터만 조회하고 싶다면, WHERE 절과 함께 OR 연산자를 사용하면 됩니다. 이 글에서는 테이블 생성부터 실제 쿼리 실행, 결과 분석까지 전 과정을 예제와 함께 살펴보겠습니다.1. 테이블 생성하기먼저 월(MonthNumber)과 연도(YearNumber) 정보를 저장할 테이블을 만듭니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, MonthNumber int,
데이터베이스에서 VARCHAR와 같은 문자열 타입으로 저장된 숫자를 정렬할 때, 일반적인 ORDER BY 절은 사전 순(문자열 기준)으로 정렬되기 때문에 의도한 숫자 크기순 결과가 나오지 않습니다. 예를 들어 3, 20, 90이 있다면 90, 20, 3 순서가 아니라 20, 3, 90처럼 정렬될 수 있습니다.이 문제를 해결하려면 MySQL의 CAST() 함수를 사용해 문자열을 숫자(SIGNED)로 변환한 뒤 정렬하면 됩니다.기본 문법SELECT * FROM yourTableNameORDER BY CAST(yourColumnName
MySQL에서 아포스트로피 대체하기MySQL에서 문자열 데이터에 포함된 아포스트로피()를 다른 문자로 바꾸거나 완전히 제거하려면 replace() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.update yourTableName set yourColumnName=replace(yourColumnName,\,);replace() 함수는 세 개의 인자를 받습니다. 첫 번째는 대상 컬럼, 두 번째는 찾을 문자열, 세 번째는 교체할 문자열입니다. 위 예제에서는 아포스트로피를 빈 문자열()로 교체하여 사실상 제거하는 방식입니다.예제
MySQL에서 특정 필드 값에 따라 다른 열의 값들을 합산하려면 집계 함수 SUM()과 CASE문을 함께 사용하면 됩니다. CASE문은 조건에 따라 합산할 대상 열을 선택해 주는 역할을 하며, 이를 통해 조건부 합계를 손쉽게 계산할 수 있습니다.1. 예제 테이블 생성먼저 실습에 사용할 테이블을 생성합니다. 고객 여부(isValidCustomer)에 따라 가격(Price) 또는 최종 가격(FinalPrice) 중 어떤 값을 합산할지 결정하는 구조입니다.mysql> create table DemoTable ( Id
MySQL에서는 GROUP_CONCAT() 함수를 사용하면 여러 행의 데이터를 쉼표로 구분된 하나의 목록으로 손쉽게 표시할 수 있습니다. 이번 글에서는 실제 예제를 통해 GROUP_CONCAT() 함수의 사용법을 단계별로 살펴보겠습니다. 1. 테이블 생성하기 먼저 예제에 사용할 테이블을 생성합니다. mysql> create table DemoTable ( Value int ); Query OK, 0 rows affected (0.26 sec) 2. 데이터 삽입하기 INSERT 명령을 사용하여 테이블에 여러
MySQL에서 특정 열의 값 중 가장 낮은 숫자를 가진 행을 가져오려면 집계 함수 MIN()과 GROUP BY 절을 함께 사용하면 됩니다. 이 글에서는 NumberOfProduct 값별로 최소 ID를 조회하는 방법을 예제와 함께 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, NumberOfProdu
DATE_FORMAT 함수로 날짜만 추출하기MySQL에서 datetime 형태로 저장된 값 중 날짜 부분만 따로 조회해야 하는 경우가 종종 있습니다. 이럴 때 DATE_FORMAT 함수를 활용하면 원하는 형식으로 날짜만 손쉽게 추출할 수 있습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable ( ShippingDate varchar(200) );Query OK, 0 rows affected (0.25 sec)