MySQL COUNT DISTINCT가 느린 이유와 해결 방법대량의 데이터가 저장된 테이블에서 COUNT(DISTINCT ...) 쿼리를 실행하면 전체 행을 스캔해야 하기 때문에 처리 속도가 크게 느려질 수 있습니다. 이러한 문제를 해결하는 가장 효과적인 방법 중 하나는 인덱스(INDEX)를 활용하는 것입니다.아래 예제를 통해 복합 인덱스를 생성하고, 이를 통해 고유 값 개수를 빠르게 집계하는 과정을 단계별로 살펴보겠습니다.1. 인덱스가 포함된 테이블 생성먼저 FirstName과 LastName 두 컬럼에 복합 인덱스를 설정하여 테
DATE_FORMAT() 함수로 날짜 형식 변경하기MySQL에서 날짜 형식을 변경하려면 DATE_FORMAT() 함수를 사용하면 됩니다. 이 함수는 저장된 날짜(datetime) 값을 원하는 형식의 문자열로 변환해 주며, 다양한 형식 지정자를 조합해 연도, 월, 일, 시간 등을 자유롭게 표현할 수 있습니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1906 ( DueTime datetime );Query OK
MySQL에서 테이블을 생성할 때 AUTO_INCREMENT 속성을 사용하면 기본 키 값이 자동으로 1부터 증가합니다. 하지만 경우에 따라 100이나 1000처럼 특정 값부터 시작하도록 지정해야 할 때가 있습니다. 이 글에서는 테이블 생성 시 AUTO_INCREMENT 시작 값을 직접 설정하는 방법을 예제와 함께 알아보겠습니다.1. AUTO_INCREMENT 시작 값을 지정하여 테이블 생성테이블 생성 문 마지막에 AUTO_INCREMENT=100 옵션을 추가하면, 자동 증가 값이 100부터 시작됩니다.mysql> create
MySQL에서 REGEXP(정규 표현식)를 사용할 때 괄호 ()는 특수 문자로 해석되기 때문에, 문자 그대로의 괄호를 검색하려면 별도의 처리가 필요합니다. 이 글에서는 REGEXP 절에서 괄호를 올바르게 다루고, 괄호가 포함된 특정 패턴의 값만 조회하는 방법을 예제와 함께 살펴보겠습니다.1. 예제 테이블 생성먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable1908 ( Code text ); Query OK, 0 rows affected (0.00 sec)2. 샘플
MySQL에서 이번 달 레코드를 합산하는 방법MySQL에서 현재 월에 해당하는 레코드의 값을 합산하려면 SUM() 함수와 MONTH() 함수를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 자세히 알아보겠습니다.1단계: 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. 납기일(DueDate)과 금액(Amount) 두 개의 컬럼을 가진 테이블입니다.mysql> create table DemoTable1889 ( DueDate date, Amount int ); Query OK,
MySQL에서 타임스탬프 컬럼의 값을 조건에 따라 판별하여 부울(Boolean) 형태로 반환하려면 IF() 함수를 활용하면 됩니다. 이번 글에서는 예제 테이블을 만들고, 날짜 조건에 따라 0 또는 1의 값을 반환하는 방법을 단계별로 살펴보겠습니다.1. 현재 날짜 확인하기먼저 CURDATE() 함수를 사용해 현재 날짜를 확인합니다.mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-12-10 | +------------+ 1 row in set
INSERT ON DUPLICATE KEY UPDATE로 중복 레코드 처리하기MySQL에서 특정 항목이 이미 존재하는지 확인한 후, 존재할 경우 해당 열의 값을 다른 값으로 덮어쓰려면 INSERT ... ON DUPLICATE KEY UPDATE 구문을 사용하면 됩니다. 이 구문은 INSERT 실행 시 고유 키(UNIQUE KEY) 충돌이 발생하면 새 행을 추가하는 대신 자동으로 UPDATE를 수행합니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1891 &nbs
MySQL 저장 프로시저에서 두 개의 변수 선언 후 곱셈 연산하기 MySQL 저장 프로시저 내부에서는 DECLARE 문을 사용하여 지역 변수를 선언할 수 있습니다. 이번 글에서는 두 개의 정수형 변수를 선언하고 값을 할당한 뒤, 두 값의 곱셈 결과를 조회하는 저장 프로시저를 만드는 과정을 단계별로 살펴보겠습니다. 1. 저장 프로시저 생성 먼저 CREATE PROCEDURE 문으로 저장 프로시저를 생성합니다. 프로시저 본문 안에서 DECLARE로 변수를 선언하고, SET으로 값을 할당한 후 SELECT로 결과를 반환합니다. mysq
MySQL SELECT 문에서 정규식 일치가 가능할까요?네, 가능합니다. MySQL에서는 REGEXP 연산자를 사용하면 SELECT 문 안에서 정규식 기반의 패턴 매칭을 수행할 수 있습니다. REGEXP는 단순한 부분 일치만 지원하는 LIKE와 달리, 문자열의 시작·끝 조건, 반복, 문자 집합 등 훨씬 강력하고 유연한 검색 기능을 제공합니다.기본 문법select yourColumnName from yourTableName where yourColumnName regexp ^yourValue;여기서 ^ 기호는 문자열의 시작을 의미합니
Java 애플리케이션에서 MySQL 데이터베이스에 NULL 값을 삽입해야 하는 경우가 종종 있습니다. 이때는 PreparedStatement의 setNull() 메서드를 사용하면 됩니다.NULL 값 설정 기본 문법Java에서 NULL 값을 설정하는 기본 구문은 다음과 같습니다.ps.setNull(파라미터인덱스, Types.NULL);첫 번째 인자는 SQL 문에서의 파라미터 위치(인덱스)이며, 두 번째 인자는 JDBC 타입입니다. 일반적으로 Types.NULL을 사용하지만, 컬럼의 실제 데이터 타입에 맞춰 Types.VARCHAR 등
MySQL에서 특정 필드에 현재 날짜와 시간을 유닉스 타임스탬프(UNIX Timestamp) 값으로 저장하려면 unix_timestamp() 함수를 사용하면 됩니다. 이 함수는 현재 시각을 1970년 1월 1일 00:00:00 UTC 이후 경과한 초 단위 정수 값으로 반환해 주기 때문에, 만료 시간(DueTime)처럼 시간 계산이 필요한 컬럼에 매우 유용합니다.아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 테스트에 사용할 테이블을 생성합니다.mysql> create table DemoTable
데이터베이스를 설계할 때 특정 열이 반드시 값을 가져야 한다면 NOT NULL 제약 조건으로 정의해야 합니다. NOT NULL로 선언된 열에는 NULL 값이나 빈 값을 삽입할 수 없으며, 이를 위반하면 MySQL은 오류를 반환합니다.NOT NULL 제약 조건이 있는 테이블 생성먼저 일부 열을 NOT NULL로 지정하여 테이블을 생성해 보겠습니다.mysql> create table DemoTable1895 ( Id int NOT NULL, FirstName varchar(20), LastName va
개요MySQL에서 테이블의 특정 행에 있는 단일 값을 조회하여 변수에 저장하고 싶다면, SELECT ... INTO 변수 구문과 WHERE 절을 함께 사용하면 됩니다. 이 방법을 사용하면 쿼리 결과를 별도의 처리 없이 바로 사용자 정의 변수에 담아 활용할 수 있습니다.실제 예제를 통해 단계별로 살펴보겠습니다.1. 샘플 테이블 생성먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable1896 ( StudentI
MySQL에서 REPLACE() 함수를 사용하면 필드(컬럼)의 값을 그대로 가져오면서 특정 문자만 원하는 형태로 바꿀 수 있습니다. 이번 글에서는 이름 데이터에서 특정 알파벳을 대문자로 변환하는 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable1897 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. 샘플 데이터 삽입INSERT 명령을 사용해 테이블에 여러 개
MySQL에서 현재 날짜보다 작은 날짜 선택하기MySQL에서 특정 테이블에 저장된 날짜(datetime) 값 중 현재 날짜보다 이전인 데이터만 조회하고 싶다면, WHERE 절과 NOW() 함수를 함께 사용하면 됩니다. 아래 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.mysql> create table DemoTable1877 ( DueDate datetime );Query OK, 0 rows affe
MySQL에서 IFNULL() 함수를 사용하면 NULL 값을 찾아 원하는 특정 값으로 대체할 수 있습니다. 이 함수는 첫 번째 인자가 NULL이 아니면 그 값을 그대로 반환하고, NULL이면 두 번째 인자로 지정한 값을 반환합니다.예제 테이블 생성먼저 실습용 테이블을 생성해 보겠습니다.mysql> create table DemoTable1878 ( FirstName varchar(20) ); Query OK, 0 rows affected (0.00 sec)데이터 삽입insert 명령을 사용해 몇 개의 레코
MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하려면 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 문법은 원본 테이블에서 조건에 맞는 행을 조회하여 대상 테이블에 바로 삽입할 수 있어 매우 유용합니다.1. 원본 테이블 생성하기먼저 복사할 데이터를 담고 있는 원본 테이블을 생성합니다.mysql> create table DemoTable1879 ( Id int, Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. 원본
MySQL에서 5-9처럼 하이픈(-)으로 구분된 숫자 문자열에 비교 연산자를 적용하려면 substring() 함수와 cast()를 함께 활용하면 됩니다. 이번 글에서는 예제 테이블을 생성하고, 문자열에서 숫자 부분만 추출해 조건 비교를 수행하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable1881 ( UserId int, UserEducationGap varchar(2
MySQL SELECT 문에서 쉼표 사용하기네, 가능합니다. MySQL에서 FROM 절에 여러 테이블을 쉼표(,)로 나열하면 두 테이블의 카티션 곱(Cartesian Product), 즉 교차 조인(CROSS JOIN)이 수행됩니다. 구문은 다음과 같습니다.구문 1: select * from yourTableName1, yourTableName2;구문 2: select * from yourTableName1 cross join yourTableName2;위의 두 구문은 완전히 동일한 결과를 반환합니다.첫 번째 테이블 생성먼저 예제에
개요MySQL에서는 FIELD() 함수와 OR 조건을 함께 사용하면 특정 값을 원하는 우선순위대로 정렬할 수 있습니다. 이 글에서는 실제 예제를 통해 ORDER BY FIELD()의 활용법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1884 ( Marks int ); Query OK, 0 rows affected (0.00 sec)2. 데이터 삽입하기INSERT 명령어를 사용해 테이블에 샘플 레코드를 추가합니다.m