MySQL에서 AND 연산자로 UPDATE 수행하기MySQL에서는 UPDATE 문과 함께 AND 연산자를 활용하여 조건에 따라 컬럼 값을 동적으로 설정할 수 있습니다. 이번 글에서는 예제를 통해 AND 연산자를 사용한 업데이트 방법을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable613 (Id int,Age int,isMarried tinyint(1));Query OK, 0 rows affected (0.54 sec)2. 레코드 삽입insert 명령을
MySQL에서 공백이 다른 유사한 이름을 비교하는 방법데이터베이스 작업을 하다 보면 두 열에 저장된 값이 실제로는 같은 이름인데도 앞뒤 공백(leading/trailing spaces) 때문에 다른 값으로 취급되는 경우가 자주 발생합니다. 예를 들어 John 과 John은 사람 눈에는 동일해 보이지만, MySQL에서 단순히 = 연산자로 비교하면 일치하지 않습니다.이런 문제를 해결하려면 LTRIM() 함수와 RTRIM() 함수를 함께 사용하면 됩니다. LTRIM()은 문자열 왼쪽의 공백을 제거하고, RTRIM()은 오른쪽의 공백을
MySQL에서 여러 행에 흩어져 있는 데이터를 하나의 문자열로 합치고 싶다면 GROUP_CONCAT() 함수가 가장 유용한 해결책입니다. 이 글에서는 실제 예제를 통해 테이블 생성부터 저장 프로시저(Stored Procedure) 작성, 그리고 조건에 맞는 여러 행을 연결하는 과정까지 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable (CountryName varchar(100)); Query OK, 0 rows affected (1.01 s
MySQL의 CHANGE 명령어는 테이블의 컬럼(열) 이름을 변경할 때 사용합니다. ALTER TABLE 문과 함께 쓰이며, 기존 컬럼의 이름뿐만 아니라 데이터 타입까지 한 번에 수정할 수 있다는 점이 특징입니다.1. 테스트용 테이블 생성하기먼저 예제로 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable796 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(100), StudentAge int ); Q
INITCAP() 함수란?MySQL의 INITCAP() 함수는 문자열에서 각 단어의 첫 글자를 대문자로, 나머지 글자는 모두 소문자로 변환하여 표시합니다.그렇다면 이와 반대되는 기능, 즉 각 단어의 첫 글자만 소문자로, 나머지 글자는 모두 대문자로 변환하려면 어떻게 해야 할까요? 안타깝게도 MySQL에는 이러한 기능이 내장되어 있지 않기 때문에, 사용자 정의 함수(Stored Function)를 직접 작성해야 합니다.사용자 정의 함수 만들기아래는 각 단어의 첫 글자만 소문자로 바꾸고 나머지는 모두 대문자로 변환하는 함수입니다.mys
UNION으로 여러 개의 MySQL SELECT 쿼리 결합하기MySQL에서 여러 개의 복잡한 SELECT 쿼리 결과를 하나로 합쳐야 할 때 가장 좋은 방법은 UNION을 사용하는 것입니다. UNION은 각 쿼리의 컬럼 수와 데이터 타입이 서로 호환되기만 하면, 서로 다른 테이블에서 조회한 결과도 손쉽게 하나의 결과 집합으로 묶어 줍니다.실제 예제를 통해 확인해 보겠습니다.1. 첫 번째 테이블 생성mysql> create table DemoTable1 (Value1 int, Value2 int);Query OK, 0 rows a
MySQL에서 하나의 열에 함께 저장된 성(last name)과 이름(first name)을 두 개의 새로운 열로 분리하려면 SUBSTRING_INDEX() 함수와 REPLACE() 함수를 함께 활용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable (Name varchar(100)); Query OK, 0 rows affected (0.53 sec)insert 명령을 사용하여 테이블에 샘플 데이터를 삽입합니다. 여기서는 이름과 성이 하나의 문자열로 함께 저장되어
MySQL ENUM 타입과 NOT NULL의 관계MySQL에서 ENUM 데이터 타입은 정해진 값 목록 중 하나만 저장할 수 있는 편리한 자료형입니다. 그런데 이때 NOT NULL 제약 조건을 선언했는지 여부에 따라, 아무 값도 지정하지 않고 레코드를 삽입할 때의 기본 동작이 달라집니다.NOT NULL을 선언하지 않은 경우 → 기본값으로 NULL이 저장됩니다.NOT NULL을 선언한 경우 → ENUM 목록의 첫 번째 값이 기본값으로 저장됩니다.아래 두 가지 경우를 실제 예제를 통해 확인해 보겠습니다.CASE 1 — NOT NULL 없
MySQL에서 특정 열의 값이 두 개의 모음 문자(a, e, i, o, u)로 시작하는 레코드만 조회하고 싶다면, RLIKE 또는 REGEXP 연산자와 정규식 패턴을 활용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable664 (CityName varchar(100));Query OK, 0 rows affected (0.89 sec)2. 샘플 데이터 삽입INSERT 명령을 사용하여 도시 이름 데이터를 몇
MySQL에서 특정 키워드가 포함된 행을 우선적으로 정렬하고 싶을 때가 있습니다. 이럴 때 ORDER BY 절과 CASE, INSTR() 함수를 함께 사용하면 원하는 키워드 일치 순서대로 결과를 정렬할 수 있습니다.예제 테이블 생성하기먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable602 (GameName text); Query OK, 0 rows affected (0.55 sec)샘플 데이터 삽입하기INSERT 명령을 사용해 몇 개의 게임 이름 레코드를 삽입합니다.mysql>
MySQL 식별자 인용의 기본 원칙MySQL에서 테이블 이름, 저장 프로시저, 뷰 이름, 컬럼(열) 이름과 같은 모든 식별자(identifier)는 백틱(`)으로 감싸 인용하거나, 감싸지 않고 그대로 사용할 수 있습니다. 다만 식별자가 예약어(reserved keyword)인 경우에는 반드시 인용해야 하며, 그렇지 않으면 오류가 발생합니다.예약어를 필드 이름으로 사용한 테이블 생성먼저 테이블을 생성해 보겠습니다. 여기서는 필드 이름을 의도적으로 예약어로 지정했습니다.mysql> create table `INT` (`select
MySQL에서 특정 테이블의 열(컬럼) 이름을 확인하고 싶다면 SHOW COLUMNS 명령어 또는 INFORMATION_SCHEMA.COLUMNS를 사용하면 됩니다. 이 글에서는 두 가지 방법을 예제와 함께 자세히 살펴보겠습니다. 예제 테이블 생성하기 먼저 실습에 사용할 테이블을 생성해 보겠습니다. mysql> create table DemoTable603 ( ClientId int NOT NULL AUTO_INCREMENT, ClientName varchar(100), Clie
MySQL 저장 프로시저의 설명 표시하기MySQL에서 이미 생성된 저장 프로시저(stored procedure)의 정의, 즉 생성 코드를 확인하려면 SHOW CREATE PROCEDURE 문을 사용합니다. 기본 문법은 다음과 같습니다.SHOW CREATE PROCEDURE yourProcedureName();1. 예제용 저장 프로시저 생성먼저 실습에 사용할 간단한 저장 프로시저를 만들어 보겠습니다.mysql> DELIMITER //mysql> CREATE PROCEDURE sample_Procedure() &n
MySQL에서 하나의 테이블에 대해 조건이 서로 다른 두 행 집합의 개수(COUNT)를 각각 구한 뒤, 그 값을 나누어야 하는 경우가 있습니다. 예를 들어 특정 조건을 만족하는 행 수와 만족하지 않는 행 수의 비율을 구할 때 유용합니다.이 작업은 count(*) 함수와 스칼라 서브쿼리(scalar subquery)를 활용하면 간단하게 처리할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable(isMarried tin
MySQL에서 데이터를 정렬할 때 기본적인 ORDER BY 절은 오름차순 또는 내림차순으로만 정렬합니다. 하지만 특정 값들을 원하는 임의의 순서대로 정렬해야 하는 경우가 종종 발생합니다. 이럴 때 CASE 문을 활용하면 각 값에 우선순위를 부여하여 사용자 지정 순서로 정렬할 수 있습니다.예제 테이블 생성먼저 실습에 사용할 테이블을 생성하겠습니다.mysql> create table DemoTable(StudentId varchar(100)); Query OK, 0 rows affected (1.69 sec)데이터 삽입INSERT
MySQL SLEEP() 함수는 바쁜 대기(Busy-Wait) 방식인가?결론부터 말하면 아니요, MySQL의 SLEEP() 함수는 바쁜 대기(busy-wait) 방식으로 동작하지 않습니다. SLEEP() 함수는 지정한 시간(초 단위) 동안 해당 쿼리의 실행을 일시 정지시키는 함수로, CPU를 계속 점유하는 방식이 아니라 대기 상태로 전환됩니다.그럼 실제로 테이블을 생성하고 SLEEP() 함수를 직접 구현하면서 동작 방식을 확인해 보겠습니다.1단계: 테이블 생성하기먼저 간단한 테이블을 하나 만들어 보겠습니다.mysql> crea
MySQL에서 두 개의 테이블에 서로 다른 자동 증가(auto-increment) ID를 부여해야 하는 경우가 있습니다. 이럴 때 LAST_INSERT_ID() 함수와 사용자 정의 변수를 함께 활용하면 간단하게 해결할 수 있습니다.LAST_INSERT_ID()는 현재 세션에서 가장 최근에 삽입된 행의 자동 증가 값을 반환하는 함수입니다. 이 값을 변수에 저장한 뒤, 다른 테이블에 삽입할 때 원하는 값으로 조정하여 사용하면 됩니다.1단계: 첫 번째 테이블 생성먼저 StudentId 컬럼에 auto_increment 속성을 설정한 테이
MySQL 저장 프로시저로 난수 5개 생성하기MySQL에서 난수를 생성하려면 ORDER BY RAND() 함수를 활용하면 됩니다. 이번 글에서는 저장 프로시저 안에서 특정 범위의 값 중 5개를 무작위로 추출하는 방법을 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable (Value int);Query OK, 0 rows affected (0.76 sec)2단계: 샘플 데이터 삽입INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다
현재 시점부터 앞으로 12시간 이내에 도래하는(datetime) 레코드를 조회하려면 DATE_ADD() 함수와 INTERVAL 12 HOUR 구문을 활용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.1. 예제 테이블 생성하기먼저 마감 시각(DueDateTime)을 저장할 테이블을 생성합니다.mysql> create table DemoTable (DueDateTime datetime);Query OK, 0 rows affected (0.60 sec)2. 샘플 데이터 삽입하기INSERT 명령을 사용해 몇 개
데이터 조건 분기를 처리할 때 MySQL CASE문과 PHP if문 중 어느 쪽이 더 빠를까요? 결론부터 말하면 MySQL CASE문이 더 빠릅니다.왜 MySQL CASE문이 더 빠를까?PHP의 if문은 데이터베이스에서 데이터를 먼저 불러온 뒤 애플리케이션 레벨에서 조건을 판별하고 가공해야 합니다. 이 과정에서 데이터 로딩과 전송에 추가적인 시간이 소요됩니다.반면 MySQL CASE문은 데이터베이스 엔진 내부에서 직접 조건을 평가하고 결과를 반환하기 때문에 불필요한 데이터 전송과 후처리 과정이 없어 훨씬 효율적입니다.MySQL CA