MySQL에서 테이블의 레코드(열 값)를 무작위로 섞으려면 ORDER BY RAND()를 사용하면 됩니다. 이 함수는 각 행에 임의의 난수를 부여한 뒤 그 숫자를 기준으로 정렬하기 때문에, 쿼리를 실행할 때마다 결과 순서가 달라집니다.1. 샘플 테이블 생성먼저 실습에 사용할 테이블을 만들어 보겠습니다.mysql> create table DemoTable1557 -> ( -> SubjectId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> SubjectName va
MySQL에서 저장된 날짜·시간(datetime) 값을 원하는 형식으로 다시 표현하려면 DATE_FORMAT() 함수를 사용하면 됩니다. MySQL은 기본적으로 yyyy-mm-dd(예: 2019-10-13) 형식으로 날짜를 저장하지만, 이 함수를 활용하면 화면에 출력되는 형식을 자유롭게 변경할 수 있습니다.1. 예제 테이블 생성하기먼저 실습용 테이블을 생성합니다.mysql> create table DemoTable1558 -> ( -> EmployeeJoiningDate datetime ->
ORDER BY RAND()로 쿼리 결과 무작위 정렬하기MySQL에서 쿼리 결과를 무작위(랜덤)로 정렬하려면 ORDER BY RAND()를 사용하면 됩니다. 여기에 WHERE 절의 IN 조건과 LIMIT 절을 함께 사용하면, 지정한 값들 중에서 원하는 개수만큼 임의의 행을 손쉽게 추출할 수 있습니다.기본 구문은 다음과 같습니다.SELECT * FROM DemoTable1559WHERE yourColumnName IN(yourValue1, yourValue2, ....N)ORDER BY RAND()LIMIT yourLimitValue
MySQL에서 index를 열 이름으로 사용할 때 발생하는 오류MySQL에서 index는 예약어(reserved word)이기 때문에 일반적인 방식으로는 열 이름으로 사용할 수 없습니다. 예약어를 열 이름으로 그대로 사용하면 아래와 같은 구문 오류가 발생합니다.오류가 발생하는 경우mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> index int -> )ENGINE=MyISAM;ERR
MySQL에서는 하나의 저장 프로시저(Stored Procedure) 안에 여러 개의 SELECT 문을 포함할 수 있습니다. 이 경우 프로시저를 호출하면 각 SELECT 문의 결과가 별도의 결과 집합(Result Set)으로 순차적으로 출력됩니다. 이번 글에서는 두 개의 SELECT 문을 가진 저장 프로시저를 만들고 실행하는 과정을 살펴보겠습니다.1. 저장 프로시저 생성먼저 두 개의 SELECT 문을 포함하는 저장 프로시저를 생성해 보겠습니다. 프로시저 내부에는 여러 SQL 문이 들어가므로, 구문 구분자(Delimiter)를 변경하
데이터베이스 작업을 하다 보면 전화번호나 코드처럼 숫자 사이에 공백이 포함된 문자열 데이터를 다루는 경우가 많습니다. 이런 공백을 한 번에 제거하고 싶다면 MySQL의 REPLACE() 함수를 활용하면 간단하게 해결할 수 있습니다.1. 예제 테이블 생성먼저 숫자를 저장할 테이블을 생성합니다. 공백이 포함된 값을 그대로 저장할 수 있도록 VARCHAR 타입으로 컬럼을 정의합니다.mysql> create table DemoTable1546 -> ( -> Number varchar(20) -> );Q
MySQL에서 특정 마지막 문자열을 기준으로 정렬하는 쿼리 작성 방법MySQL에서 특정 마지막 문자열(예: 하이픈 뒤에 붙는 접미사)을 기준으로 데이터를 정렬하려면 CASE 문과 ORDER BY 절을 조합하여 사용할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1단계: 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Client
현재 날짜와 학생의 성적 발표 날짜 사이의 차이를 비교하고 계산하려면 DATEDIFF() 함수를 사용하면 됩니다. 여기에 AND 연산자를 함께 활용하면 성적 점수 조건까지 추가로 필터링할 수 있습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1547 -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, &n
쉼표로 구분된 값(예: 56,78,90,87)이 저장된 컬럼에서 특정 값과 일치하는 레코드를 조회하려면 MySQL의 FIND_IN_SET() 함수를 사용하면 됩니다. 이 함수는 문자열 목록 안에 찾고자 하는 값이 존재하는지 확인해 주며, WHERE 절과 함께 사용하면 원하는 레코드만 간단하게 추출할 수 있습니다.1. 샘플 테이블 생성먼저 학생 정보와 쉼표로 구분된 점수 목록을 저장할 테이블을 생성합니다.mysql> create table DemoTable1548 -> (
MySQL에서 SHOW INDEX, SHOW INDEXES, SHOW KEYS는 모두 동일합니다MySQL에서 SHOW INDEX, SHOW INDEXES, SHOW KEYS 세 가지 구문은 문법적 표현만 다를 뿐 기능과 결과가 완전히 동일합니다. 세 구문 모두 테이블에 정의된 인덱스 정보를 조회하는 데 사용되며, 어떤 것을 사용해도 출력 결과에는 차이가 없습니다.실제 예제를 통해 세 구문이 동일한 결과를 반환하는지 확인해 보겠습니다.1. 테스트용 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create tab
동일한 테이블에 서로 다른 날짜 형식으로 날짜 데이터를 삽입해야 하는 경우가 있습니다. 이럴 때는 INSERT INTO ... SELECT 문과 DATE_FORMAT() 함수를 함께 사용하면 손쉽게 해결할 수 있습니다.DATE_FORMAT() 함수는 datetime 타입의 값을 지정한 형식 문자열에 맞춰 변환해 주는 함수로, %W(요일), %e(일), %b(월 약어), %Y(연도), %r(12시간제 시간) 등 다양한 형식 지정자를 지원합니다.1. 예제 테이블 생성먼저 datetime 컬럼과 text 컬럼을 가진 테이블을 생성합니다.
MySQL에서 IN 조건으로 여러 ID를 조회할 때, 결과가 원하는 순서대로 나오지 않아 불편했던 경험이 있으신가요? 기본적으로 MySQL은 지정한 ID 순서를 보장하지 않기 때문에, 별도의 정렬 로직이 필요합니다. 이럴 때 유용하게 쓸 수 있는 것이 바로 ORDER BY CASE 문입니다.1. 예제 테이블 생성하기먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1550 -> ( -> Id int, -> Name varchar(20) -&g
MySQL에서 쉼표로 구분된 열 검색하기데이터베이스를 운영하다 보면 하나의 열에 여러 값을 쉼표(,)로 구분해 저장하는 경우가 종종 있습니다. 이럴 때 특정 값이 포함된 행을 찾으려면 일반적인 LIKE 연산자 대신 FIND_IN_SET() 함수를 사용하는 것이 훨씬 정확하고 안전합니다.FIND_IN_SET() 함수는 첫 번째 인수로 검색할 문자열을, 두 번째 인수로 쉼표로 구분된 문자열 목록을 받습니다. 해당 값이 목록에 존재하면 위치(인덱스)를 반환하고, 존재하지 않으면 0을 반환합니다.1. 테이블 생성하기먼저 예제에 사용할 테이
개요MySQL 테이블에서 정렬된 상태로 특정 개수의 행만 가져오고 싶다면 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. ORDER BY는 결과를 특정 컬럼 기준으로 정렬하고, LIMIT은 반환되는 행의 수를 제한하는 역할을 합니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1551 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT P
데이터베이스 작업을 하다 보면 EMP9, EMP4, EMP8처럼 공통된 접두사가 붙어 있는 값을 만나고, 여기서 문자열 부분을 제거하고 숫자만 추출해야 하는 경우가 있습니다. 이럴 때 MySQL에서는 RIGHT() 함수와 LENGTH() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.아래 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성하기먼저 테스트용 테이블을 생성합니다.mysql> create table DemoTable1540 -> ( -> EmployeeCode varchar(20)
MySQL에서 EXPLAIN 키워드를 사용하면 SELECT 쿼리가 실제로 어떻게 실행되는지, 즉 인덱스를 사용하는지, 몇 개의 행을 검사하는지 등의 실행 계획(Execution Plan)을 미리 확인할 수 있습니다. 쿼리 성능을 분석하고 최적화할 때 매우 유용한 도구입니다.1. 샘플 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1541 -> ( -> EmployeeId int
MySQL에서 문자열 컬럼의 숫자 값만 캐스팅하여 업데이트하는 방법MySQL에서는 CEIL() 함수와 CAST()를 함께 사용하여 VARCHAR 타입으로 저장된 문자열 값을 숫자로 변환할 수 있습니다. 이 글에서는 문자열 컬럼에 저장된 값을 정수 컬럼으로 캐스팅하고 업데이트하는 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 첫 번째 컬럼을 VARCHAR 타입으로 지정하여 테이블을 생성합니다.mysql> create table DemoTable -> ( &n
MySQL에서 특정 컬럼의 값이 중복되는 레코드들을 하나의 행으로 그룹화하고, 각 그룹에 속한 레코드의 개수와 함께 해당 ID 목록까지 한 번에 확인해야 하는 경우가 있습니다. 이럴 때 GROUP_CONCAT(), COUNT() 함수와 GROUP BY, HAVING 절을 함께 사용하면 손쉽게 해결할 수 있습니다.1. 테이블 생성하기먼저 예제로 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> CompanyId int NOT NULL AUTO_INCREMENT PRIMARY K
대용량 텍스트 데이터에서 빠르고 정확한 검색이 필요하다면 MySQL의 FULLTEXT(전체 텍스트) 검색 인덱스를 활용하는 것이 가장 효과적입니다. 전체 텍스트 검색은 MATCH() ... AGAINST 구문을 사용하여 수행하며, 일반적인 LIKE 연산자보다 훨씬 뛰어난 성능과 관련도 기반 검색 결과를 제공합니다.1. 샘플 테이블 생성먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1542 -> ( -> Id int NOT NULL AUTO_INCREM
MySQL에서 한 컬럼에 있는 값이 다른 컬럼에도 존재하는 등 상호 관계(mutual relation)가 있는 행의 개수를 구하려면 집계 함수 COUNT(*)와 셀프 조인(Self Join)을 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 만들고 단계별로 쿼리를 작성하는 방법을 살펴보겠습니다.1. 예제 테이블 생성먼저 두 개의 정수 컬럼을 가진 테이블을 생성합니다.mysql> create table DemoTable1543 -> ( -&