단일 MySQL 쿼리에서 여러 COUNT() 구현하기조건별 레코드 개수를 각각 별도의 쿼리로 조회하지 않고, 하나의 쿼리에서 여러 COUNT() 값을 동시에 얻으려면 CASE 문을 활용하면 됩니다. 이 방식은 집계 보고서를 만들 때 쿼리 실행 횟수를 줄여 성능 면에서도 유리합니다.먼저 실습용 테이블을 생성해 보겠습니다.mysql> create table DemoTable -> ( -> LastName varchar(100) -> );Query OK, 0 rows affected (0.60 sec
MySQL 문자열에서 숫자만 추출하기데이터베이스 작업을 하다 보면 John19383처럼 문자와 숫자가 섞여 있는 값에서 숫자 부분만 분리해야 하는 경우가 종종 있습니다. 이 글에서는 MySQL의 REVERSE(), FORMAT(), REPLACE() 함수를 조합하여 문자열 끝에 붙어 있는 숫자만 깔끔하게 추출하는 방법을 예제와 함께 알아보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 만듭니다.mysql> create table DemoTable -> ( -> StudentId varchar(100)
MySQL에서 UPDATE 문과 SET, LIMIT 절을 함께 사용하면 테이블의 모든 행이 아닌 원하는 개수의 행만 동일한 값으로 업데이트할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable-> (-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> Name varchar(20)-> );Query OK, 0 rows affected (0.69 sec)2. 데이터
MySQL에서 두 문자열을 하나로 합칠 때는 CONCAT() 함수를 사용하면 됩니다. 이 함수는 여러 개의 문자열 인자를 받아 하나의 문자열로 연결해 주며, 두 값 사이에 공백( )을 인자로 전달하면 원하는 위치에 공백을 넣어 연결할 수 있습니다.실습을 위해 먼저 테이블을 생성해 보겠습니다.1. 테이블 생성하기mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PR
MySQL에서 특정 값이 두 번 이상 반복해서 나타나는 레코드를 찾고 싶다면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. GROUP BY로 데이터를 그룹화한 뒤, HAVING 조건을 통해 그룹별 개수가 특정 기준을 초과하는 항목만 필터링할 수 있습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. Id 컬럼은 자동 증가 기본 키로 설정하고, Subject 컬럼에는 과목명을 저장합니다.mysql> create table DemoTable -> ( -> Id int NOT
MySQL에서 특정 행 제외하기MySQL에서 테이블의 특정 행을 제외하고 조회하려면 비교 연산자 <>(같지 않음, NOT EQUAL)를 사용하면 됩니다. 이 연산자는 !=와 동일한 기능을 하며, WHERE 절과 함께 사용해 원하지 않는 행을 손쉽게 걸러낼 수 있습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable -> ( -> Id int,
MySQL에서 / 연산자로 숫자 열을 나누면 기본적으로 소수점 형태의 결과가 반환됩니다. 만약 소수점 없이 정수 형태의 결과가 필요하다면 CAST 함수를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Number int -> ); Qu
MySQL에서 지정한 범위의 값을 테이블에 한 번에 자동으로 삽입하고 싶다면 저장 프로시저(Stored Procedure)를 활용하는 것이 가장 효율적입니다. 반복문을 사용해 원하는 범위만큼 데이터를 순차적으로 입력할 수 있기 때문입니다.이번 글에서는 10부터 20까지의 값을 테이블에 자동으로 삽입하는 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 값을 삽입할 테이블을 생성합니다.mysql> create table DemoTable -> (
MySQL에서 데이터베이스나 테이블의 문자셋(character set)이 무엇으로 설정되어 있는지 확인하는 것은 인코딩 문제를 예방하고 다국어 데이터를 올바르게 처리하는 데 매우 중요합니다. 이 글에서는 간단한 SQL 쿼리만으로 문자셋과 콜레이션(collation) 설정을 확인하는 방법을 알아보겠습니다.데이터베이스 문자셋 확인하기데이터베이스의 기본 문자셋을 확인하려면 SHOW CREATE DATABASE 문을 사용합니다. 예를 들어 web이라는 데이터베이스의 설정을 확인해 보겠습니다.mysql> SHOW CREATE DATAB
개요MySQL에서 전체 점수의 합계를 고유 ID(중복을 제거한 ID)의 개수로 나누어 평균을 구해야 하는 경우가 있습니다. 이때는 DISTINCT 키워드와 COUNT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.이 글에서는 예제 테이블을 만들고, 고유 ID 개수를 기준으로 Score 열의 총합에 대한 평균을 구하는 과정을 단계별로 살펴보겠습니다.1. 예제 테이블 생성하기먼저 Id와 Score 두 개의 열을 가진 테이블을 생성합니다.mysql> create table DemoTable-> (-> Id int,
MySQL 오류 1064(42000)의 주요 원인ERROR 1064 (42000)는 SQL 구문이 올바르게 작성되지 않았을 때 주로 발생하는 오류입니다. 특히 데이터베이스를 생성할 때 다음과 같은 상황에서 자주 나타납니다.백틱(`) 기호를 잘못 사용했거나 누락한 경우데이터베이스 이름에 하이픈(-)을 포함한 경우예를 들어 Demo-Table처럼 이름에 하이픈이 들어가면 MySQL은 이를 유효한 식별자로 인식하지 못해 ERROR 1064 (42000)를 반환합니다.오류 없이 데이터베이스 생성하는 기본 구문특수문자가 없는 일반적인 데이터
MySQL에서 하나의 쿼리만으로 특정 열에 있는 값이 몇 번 등장하는지 확인하고 싶다면, GROUP BY 절과 IN() 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> Name varchar(100)-> );Query OK, 0 rows affected (
MySQL에서 생년월일(DOB)을 기준으로 나이를 계산하려면 TIMESTAMPDIFF() 함수를 사용하면 됩니다. 이 함수는 두 날짜 사이의 차이를 지정한 단위(년, 월, 일 등)로 반환해 주기 때문에 나이 계산에 매우 유용합니다.TIMESTAMPDIFF() 기본 문법select TIMESTAMPDIFF(YEAR, yourColumnName, CURRENT_DATE) AS anyAliasName from yourTableName;그럼 실제 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다
MySQL에서 문자열 필드에 새로운 문자열을 이어 붙여(연결하여) 업데이트하려면 CONCAT() 함수를 사용하면 됩니다. CONCAT() 함수는 여러 개의 문자열을 하나로 합쳐 주는 MySQL 내장 함수로, UPDATE 문과 함께 활용하면 기존 값 뒤에 원하는 문자열을 손쉽게 추가할 수 있습니다.1. 예제 테이블 생성먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable -> ( -> SequenceId int NOT NULL AUTO_INCREMENT PRIM
저장된 날짜(DueDate)를 현재 날짜와의 차이를 기준으로 정렬하고, 그 차이 값을 함께 표시하려면 ORDER BY 절과 DATEDIFF() 함수를 활용하면 됩니다. 먼저 현재 날짜를 확인해 보겠습니다.mysql> select now(); +---------------------+ | now() | +---------------------+ | 2019-06-09 21:08:16 | +---------------------+ 1 row in set (0.00 sec)1. 테이블 생성예제에 사용할 테이
MySQL에서 자동 증분(Auto Increment) 열을 사용하려면 테이블을 생성할 때 해당 열에 AUTO_INCREMENT 속성을 지정하면 됩니다. 이렇게 설정하면 새로운 레코드가 삽입될 때마다 해당 열의 값이 자동으로 1씩 증가하므로, 일련번호나 고유 식별자(ID)를 직접 관리할 필요가 없습니다.1. 테이블 생성하기먼저 테이블을 생성해 보겠습니다. 아래 예제에서는 Id 필드를 자동 증분 열로 설정하고, 기본 키(PRIMARY KEY)로 함께 지정했습니다.mysql> create table DemoTable ->
MySQL에서 특정 테이블의 현재 크기와 메모리 사용량 등 상세 정보를 확인하려면 SHOW TABLE STATUS 명령어를 사용하면 됩니다. 이 명령은 테이블 이름, 스토리지 엔진, 행 수, 데이터 길이 등 다양한 정보를 한 번에 보여줍니다.1. 기본 문법SHOW TABLE STATUS LIKE 테이블명\G여기서 \G 옵션을 붙이면 결과가 세로 형태로 출력되어 가독성이 훨씬 좋아집니다.2. 예제 테이블 생성먼저 실습용 테이블을 만들어 보겠습니다.mysql> CREATE TABLE DemoTable -> (
MySQL에서 데이터베이스 내 가장 최근에 생성된 테이블의 이름과 생성 시간을 확인하려면 information_schema.TABLES를 활용하면 됩니다. 이 시스템 뷰에는 테이블 이름, 생성 시간, 업데이트 시간 등 다양한 메타데이터가 저장되어 있어, CREATE_TIME 기준으로 내림차순 정렬한 후 첫 번째 행만 가져오면 가장 최근에 만들어진 테이블 정보를 얻을 수 있습니다.기본 문법SELECT table_name, create_time FROM information_schema.TABLES WHERE table_schema =
MySQL에서 여러 시간 값을 합산할 때, TIME 타입 그대로 SUM() 함수를 적용하면 원하는 결과를 얻기 어렵습니다. 이럴 때 TIME_TO_SEC() 함수로 시간을 초 단위로 변환한 뒤 합산하고, 다시 SEC_TO_TIME() 함수로 시간 형식으로 되돌리는 방법이 가장 효과적입니다.1. 예제 테이블 생성먼저 시간 값을 저장할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> ArrivalTime time -> );Query OK, 0 rows affe
네, CASE 문을 사용하면 MySQL 결과 집합에서 숫자를 의미 있는 문자열로 손쉽게 변환할 수 있습니다. 예를 들어 불리언 값인 1과 0을 Married(기혼)와 Not Married(미혼)처럼 사람이 읽기 좋은 텍스트로 바꿀 수 있습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable -> ( -> isMarried boolean -> );Query OK, 0 rows affected (0.76 sec)insert 명령을 사용하여 테이블에