중복 데이터를 정리하면서 각 항목의 값을 하나의 목록으로 묶어야 할 때가 있습니다. 이럴 때 GROUP_CONCAT() 함수를 사용하면 여러 행의 값을 쉼표로 구분된 단일 문자열로 손쉽게 변환할 수 있으며, DISTINCT 키워드를 함께 사용하면 중복된 값까지 제거한 고유한 목록을 얻을 수 있습니다.1. 샘플 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
MySQL에서는 하나의 쿼리 안에서 GROUP BY, HAVING, ORDER BY 절을 함께 사용하여 그룹별 합계가 특정 범위에 속하는 레코드만 손쉽게 조회할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, CustomerName varchar(20), ProductPrice in
날짜 값이 저장된 레코드 중에서 마지막 날짜, 즉 가장 최신 날짜를 조회하려면 집계 함수 MAX()를 서브쿼리와 함께 사용하면 됩니다. 이번 글에서는 예제 테이블을 만들고 실제 데이터를 넣은 뒤, 최신 날짜에 해당하는 레코드만 추출하는 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ExpiryDate date ); Query OK, 0
MySQL에서 특정 열(column)의 n번째로 높은 값을 구하고 싶다면 LIMIT와 OFFSET을 함께 사용하면 됩니다. 핵심 아이디어는 간단합니다. 값을 내림차순으로 정렬한 뒤, OFFSET으로 앞의 값들을 건너뛰고 원하는 순번의 값 하나만 가져오는 것입니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 만들어 보겠습니다.mysql> create table DemoTable ( Value int ); Query OK, 0 rows affected (0.49 sec)2. 샘플 데이터 삽입하기INSERT 명령어를 사용
MySQL의 SERIAL에는 NOT NULL이 이미 포함되어 있습니다MySQL에서 SERIAL은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE의 별칭(alias)입니다. 즉, SERIAL 타입에는 NOT NULL 제약 조건이 기본적으로 내장되어 있기 때문에, 컬럼을 정의할 때 SERIAL 뒤에 NOT NULL을 중복해서 작성할 필요가 없습니다.예제: SERIAL 컬럼을 가진 테이블 생성다음 예제에서는 “serial”이라는 이름의 컬럼을 가진 테이블을 생성해 보겠습니다.mys
MySQL UPDATE 문으로 직원 급여 레코드 수정하기MySQL에서 UPDATE 명령어는 테이블의 기존 레코드를 수정할 때 사용됩니다. UPDATE 문과 함께 SET 절을 사용하면 새로운 값을 지정할 수 있습니다. 이번 글에서는 직원 급여 데이터를 예시로, UPDATE 문을 활용해 여러 레코드를 한 번에 갱신하는 방법을 단계별로 알아보겠습니다.1단계: 테이블 생성먼저 직원 정보를 저장할 테이블을 생성합니다.mysql> create table DemoTable ( EmployeeId int NOT NULL AUTO_IN
LIKE 연산자로 특정 단어가 포함된 레코드 삭제하기컬럼 값에 MONTH_JAN과 같은 특정 단어가 포함된 레코드를 삭제하려면 LIKE 연산자와 와일드카드(%)를 함께 사용하면 됩니다. 먼저 예제용 테이블을 생성해 보겠습니다.mysql> create table DemoTable( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(40), BornMonth varchar(40));Query OK, 0 rows af
테이블의 열에 있는 모든 값을 John1, John2, John3과 같이 순차적인 숫자가 붙은 형태로 업데이트하려면, 증분 값(1, 2, 3...)을 생성한 뒤 기존 레코드와 연결(concatenate)하면 됩니다. 이 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 만듭니다.mysql> create table DemoTable ( StudentId varchar(80) ); Query OK, 0 rows affected (0.50 sec)2. 데이터 삽입INSERT 명령어를 사용해 테이블에
MySQL에서 NVARCHAR 컬럼 생성하기MySQL에서는 NVARCHAR 타입을 선언하면 자동으로 VARCHAR로 변환됩니다. 여기서 NVARCHAR는 National Varchar의 약자로, 유니코드 문자셋을 사용하는 문자열 타입을 의미합니다. MySQL은 내부적으로 이를 VARCHAR로 처리하기 때문에 결과적으로 두 타입은 동일하게 동작합니다.그럼 실제 예제를 통해 NVARCHAR 컬럼이 어떻게 변환되는지 확인해 보겠습니다.1. NVARCHAR 컬럼을 포함한 테이블 생성먼저 StudentName 컬럼을 NVARCHAR 타입으로
MySQL에서 오늘 날짜와 동일한 레코드를 가져오려면 CURDATE() 함수를 사용하여 날짜 레코드를 현재 날짜와 비교하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.mysql> create table DemoTable( RegistrationLastDate datetime);Query OK, 0 rows affected (0.61 sec)현재 날짜가 다음과 같다고 가정해 보겠습니다.2019-09-032.
MySQL에서 특정 열에 단일 단어만 포함된 레코드를 조회하고 싶다면 LIKE 연산자를 활용하면 됩니다. 핵심 아이디어는 간단합니다. 값에 공백( )이 없다면 그 문자열은 한 단어로만 구성되어 있다는 점입니다. 따라서 NOT LIKE % % 조건으로 공백이 포함된 레코드를 제외하면 원하는 결과를 얻을 수 있습니다. 아래에서 단계별 예제를 통해 자세히 살펴보겠습니다. 1단계: 테이블 생성하기 예제에 사용할 DemoTable 테이블을 먼저 생성합니다. mysql> create table DemoTable ( Name var
여러 레코드에 걸쳐 열 값이 서로 동일한지 확인하고, 그 값들을 하나의 행에 특수 문자로 구분해 나열하려면 GROUP_CONCAT() 함수와 DISTINCT 키워드를 함께 사용하면 됩니다. 먼저 예제에 사용할 테이블부터 만들어 보겠습니다. 1. 예제 테이블 생성 mysql> create table DemoTable ( Id int, Subject varchar(40) ); Query OK, 0 rows affected (0.56 sec) 2. 샘플 데이터 삽입 insert 명령을 사용해 테이블에 레코드를 몇 개
MySQL 조건부 합계란?데이터베이스 작업을 하다 보면 테이블 전체가 아닌 특정 조건을 만족하는 행만 대상으로 합계를 구해야 하는 경우가 자주 발생합니다. 예를 들어, 특정 국가의 고객들이 구매한 상품 금액의 총합을 알고 싶다면 SUM 함수에 WHERE 절을 함께 사용하면 됩니다.이번 글에서는 실제 예제를 통해 MySQL에서 조건에 따라 열의 합계를 구하는 방법을 단계별로 살펴보겠습니다.1. 샘플 테이블 생성먼저 예제에 사용할 테이블을 생성합니다. 고객 ID, 상품 금액, 고객 국가명 세 개의 컬럼으로 구성된 간단한 테이블입니다.m
CREATE TABLE IF NOT EXISTS로 테이블 생성과 데이터 삽입 동시에 처리하기MySQL에서는 CREATE TABLE IF NOT EXISTS 구문을 사용하면 테이블이 존재하지 않는 경우에만 새 테이블을 생성하면서, 동시에 SELECT 절을 통해 레코드까지 삽입할 수 있습니다. 아래 기본 문법을 확인해 보세요.create table if not exists yourTableName ( yourColumnName1 dataType, yourColumnName2 dataType, yourColumnNa
MySQL에서 SELECT 문의 결과에 행 인덱스(순위)를 부여하고 싶다면 윈도우 함수인 ROW_NUMBER()를 사용하는 것이 가장 간단하고 효율적인 방법입니다. 이 글에서는 실제 예제를 통해 중복된 값이 있는 데이터에 그룹별 순위를 매기는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.49 sec)2. 샘플 데이터 삽입하기INSER
학생별 평균 점수를 계산한 후 그중 가장 높은 평균 점수만 조회하려면 서브쿼리(subquery)를 활용하면 됩니다. 이 글에서는 예제 테이블을 직접 만들고 단계별로 쿼리를 작성하는 방법을 살펴보겠습니다. 1단계: 테이블 생성 먼저 학생 이름과 점수를 저장할 테이블을 생성합니다. mysql> create table DemoTable ( StudentName varchar(40), StudentMarks int ); Query OK, 0 rows affected (0.50 sec) 2
개요MySQL에서 NOT IN 연산자와 서브쿼리를 활용하면, 특정 값만 반복해서 가진 레코드만 골라내는 조건부 GROUP BY 로직을 손쉽게 구현할 수 있습니다. 이번 글에서는 예제 테이블을 생성하고, NOT IN()을 사용해 원하는 결과를 추출하는 과정을 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable ( Name varchar(40), Score int ); Query OK, 0 rows affected (0.48 sec)2단계:
MySQL의 INSERT() 함수로 substr_replace 기능 구현하기PHP의 substr_replace()와 같은 기능이 필요하다면, MySQL에서는 INSERT() 함수를 사용하면 됩니다. 이 함수는 지정한 위치부터 일정 길이만큼의 부분 문자열을 새로운 문자열로 교체해 줍니다.INSERT() 함수의 문법과 동작 방식기본 문법은 다음과 같습니다.INSERT(str, pos, len, newstr)각 인자의 의미와 동작은 아래와 같습니다.str: 원본 문자열pos: 치환을 시작할 위치len: 치환할 문자 수newstr: 삽입할
MySQL에서 쉼표로 구분된 값의 개수를 세는 방법데이터베이스에 저장된 쉼표로 구분된 값(CSV 형식) 중에서 특정 값이 포함된 행의 개수를 확인하고 싶다면, 집계 함수 COUNT(*)와 FIND_IN_SET() 함수를 함께 사용하면 됩니다.FIND_IN_SET() 함수는 첫 번째 인자로 전달한 값이 두 번째 인자(쉼표로 구분된 문자열) 내에 존재하면 해당 위치를 반환하고, 존재하지 않으면 0을 반환합니다. 이 특성을 활용하면 원하는 값을 손쉽게 검색할 수 있습니다.1단계: 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.my
그룹화된 데이터 중에서 다른 열 값과 함께 가장 많은 개수(count)를 가진 레코드를 조회하려면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. 아래 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable ( Value int ); Query OK, 0 rows affected (0.54 sec)2단계: 레코드 삽입INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다. 의도적으로 동일한 값(88)을 여러 번