MySQL에서 무작위 행을 특정 열 기준으로 정렬하기MySQL에서 RAND() 함수로 무작위 행을 추출한 뒤, 그 결과를 특정 열(예: 이름) 기준으로 다시 정렬하고 싶은 경우가 있습니다. 이때는 서브쿼리와 ORDER BY 절을 조합하면 간단하게 해결할 수 있습니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1339 -> ( -&g
MySQL에서 날짜 경과 여부 확인하기MySQL에서 특정 날짜(예: 마감일)가 이미 지났는지 아직 남아 있는지 확인하려면, 저장된 DATE 컬럼의 값과 CURDATE() 함수가 반환하는 현재 날짜를 비교하면 됩니다. 이 글에서는 테이블 생성부터 실제 쿼리 실행까지 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 마감일(Deadline)을 저장할 DATE 타입의 컬럼을 가진 테이블을 생성합니다.mysql> create table DemoTable1340 -> (
MySQL에서 문자열의 마지막 점(.) 뒤에 있는 부분 문자열을 가져오려면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나누고, 세 번째 인자인 count 값에 따라 원하는 부분만 반환합니다. 특히 count가 음수(-1)이면 구분자를 오른쪽에서부터 찾기 때문에, 마지막 점 뒤의 내용을 손쉽게 추출할 수 있습니다.1. 예제 테이블 생성먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1341-> (-> Value
yyyy-mm-dd 구조로 저장된 날짜 컬럼에서 특정 연도(yyyy)와 일치하는 데이터를 조회하려면 MySQL의 YEAR() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.select * from yourTableName where year(yourColumnName)=yourYearValue;YEAR() 함수는 DATE 타입의 값에서 연도 부분만 추출해 반환하기 때문에, 전체 날짜가 아닌 연도 기준으로 간단하게 조건을 걸 수 있다는 장점이 있습니다.1. 테이블 생성먼저 실습용 테이블을 생성해 보겠습니다.mysql> c
INFORMATION_SCHEMA.TABLES를 활용한 최근 생성 테이블 조회MySQL에서 가장 마지막에 생성된 테이블의 이름을 확인하려면 INFORMATION_SCHEMA.TABLES 개념을 활용하면 됩니다. 이 스키마는 데이터베이스 내 모든 테이블의 메타데이터(테이블 이름, 생성 시간 등)를 저장하고 있어, 생성 시간 기준으로 정렬하여 최신 테이블을 손쉽게 찾을 수 있습니다.먼저 예제를 위해 테이블을 하나 생성해 보겠습니다. 이 테이블이 곧 가장 최근에 생성된 테이블이 됩니다.mysql> create table DemoTa
MySQL에서 특정 테이블에 복합 기본 키(Composite Primary Key)가 설정되어 있는지 확인하려면 information_schema.KEY_COLUMN_USAGE 뷰와 집계 함수 count(*)를 함께 사용하면 됩니다. 조회 결과가 1보다 크다면, 해당 테이블에는 두 개 이상의 컬럼으로 구성된 복합 기본 키가 존재한다는 의미입니다.1단계: 테이블 생성하기먼저 예제로 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1324 -> ( -> StudentId
MySQL에서는 컬럼명이나 식별자를 직접 지정하지 않고도 ORDER BY 절에 컬럼의 위치 번호를 사용해 결과를 정렬할 수 있습니다. 예를 들어 ORDER BY 1은 SELECT 문에서 첫 번째로 선택된 컬럼을 기준으로 정렬하라는 의미입니다.기본 문법은 다음과 같습니다.select * from yourTableName order by 1 DESC LIMIT yourLimitValue;예제 테이블 생성하기먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable1325 -> (
MySQL에서 저장된 시간(TIME) 값에서 초 단위를 제외하고 시:분 형식만 추출하고 싶다면 TIME_FORMAT() 함수를 사용하면 됩니다. 이 함수는 날짜 및 시간 형식 지정자를 활용해 원하는 형태로 시간 값을 손쉽게 변환해 줍니다.아래에서 실제 테이블 생성부터 데이터 삽입, 그리고 초 없이 시간을 조회하는 전체 과정을 단계별로 살펴보겠습니다.1. 샘플 테이블 생성먼저 시간 값을 저장할 테이블을 만들어 보겠습니다.mysql> create table DemoTable1326-> (-> Arrivaltime tim
MySQL에서 한 테이블의 데이터를 조회(SELECT)하여 다른 테이블에 삽입(INSERT)하려면 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 문법은 기존 테이블에서 조건에 맞는 레코드를 선택해 새로운 테이블에 그대로 복사할 때 매우 유용합니다.1. 첫 번째 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1-> (-> Id int,-> Name varchar(20),-> Age int-> );Query OK, 0 row
MySQL 문자열 끝에서 N개의 문자 제거하기MySQL에서 문자열 끝에서부터 지정한 개수만큼의 문자를 잘라내려면 substring() 함수와 length() 함수를 함께 사용하면 됩니다. substring()은 문자열의 특정 부분을 추출하는 함수이며, length()는 문자열의 전체 길이를 바이트 단위로 반환하는 함수입니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1329-> (-> StudentName varchar(40)-> );Query OK, 0
MySQL에서 숫자를 10진수로 저장하려면?MySQL에서는 숫자를 별도로 형식화(formatting)할 필요가 없습니다. 대신 DECIMAL 데이터 타입을 사용하면 원하는 자릿수의 10진수 값을 정확하게 저장할 수 있습니다.DECIMAL(10,2)는 전체 10자리 숫자 중 소수점 이하 2자리를 의미합니다. 이 경우 소수점 셋째 자리부터는 자동으로 반올림되어 저장됩니다.1. 테이블 생성하기먼저 DECIMAL 타입의 컬럼을 가진 테이블을 생성해 보겠습니다.mysql> create table DemoTable1330 &nb
MySQL에서 @ 기호란 무엇인가?MySQL에서 @ 기호는 사용자 정의 변수(user-defined variable)를 선언하고 값을 저장할 때 사용됩니다. SET 명령어와 함께 사용하면 세션 내에서 값을 저장해 두었다가 이후 쿼리에서 재사용할 수 있어 매우 유용합니다.기본 문법사용자 정의 변수를 설정하는 기본 문법은 다음과 같습니다.SET @변수명 := 값;또는 아래와 같이 작성할 수도 있습니다.SET @변수명 = 값;예제 테이블 생성하기먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table Dem
MySQL에서 ZF는 ZEROFILL(제로필)을 의미합니다. 행 선언 시 컬럼에 ZEROFILL 옵션을 지정하면, 설정된 자릿수보다 숫자가 짧을 경우 앞부분이 0으로 채워져 표시됩니다.ZEROFILL 테이블 생성하기먼저 int 필드 크기를 10으로 설정한 테이블을 생성해 보겠습니다.mysql> create table DemoTable1332 -> ( -> Number int(10) ZEROFILL NOT NULL DEFAULT 0
문제 정의ER(Entity-Relationship) 다이어그램은 데이터베이스를 구성하는 여러 테이블과 테이블 간의 관계를 시각적으로 표현한 그림입니다. ER 다이어그램을 분석하면 관계의 카디널리티(cardinality) 유형에 따라 데이터베이스의 테이블 수를 최소화할 수 있습니다.일대일(1:1) 카디널리티아래는 일대일 카디널리티를 가진 ER 다이어그램 예시입니다.위 ER 다이어그램은 3개의 엔티티로 구성되어 있습니다.Employee 엔티티는 emp_name 속성을 가지며, emp_id가 기본키(primary key)입니다.Compa
MySQL에서 서로 다른 여러 테이블의 레코드 개수(COUNT)를 각각 조회한 뒤 그 합계를 구하려면 UNION ALL을 활용하면 됩니다. UNION ALL은 각 SELECT 문의 결과를 중복 제거 없이 그대로 합쳐주기 때문에, 개별 테이블의 COUNT 값을 하나의 결과 집합으로 모은 후 SUM() 함수로 더할 수 있습니다.먼저 예제에 사용할 첫 번째 테이블을 생성해 보겠습니다.mysql> create table DemoTable1-> (-> Id int,-> Name varchar(30)-> );Quer
MySQL에서 두 개의 숫자 컬럼 값의 차이를 기준으로 레코드를 정렬하려면 ORDER BY 절에 두 컬럼의 뺄셈 결과를 지정하면 됩니다. 이렇게 하면 계산된 차이값이 작은 순서대로(오름차순) 레코드가 표시됩니다.기본 문법SELECT * FROM yourTableName ORDER BY (yourIntegerColumnName1 - yourIntegerColumnName2);예제 테이블 생성먼저 예제로 사용할 테이블을 생성해 보겠습니다.mysql> CREATE TABLE DemoTable1313 -> ( -> Name
MySQL의 IN() 연산자 안에 쉼표로 구분된 문자열을 그대로 넣어 조건을 지정할 수 있습니다. 기본 문법은 다음과 같습니다.select * from yourTableName where yourColumnName IN(yourCommaSeparatedValue);예제 테이블 생성먼저 예제로 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1314 -> ( -> Number varchar(100) -> ); Query OK, 0 rows affected (0.53 sec)다
MySQL에서는 UPDATE 문의 SET 절과 WHERE 절을 조합하면 빈 문자열()을 NULL로 손쉽게 변환할 수 있습니다. 데이터 정합성을 위해 빈 값과 NULL을 구분해야 하는 경우에 유용한 방법입니다.먼저 실습용 테이블을 생성해 보겠습니다.mysql> create table DemoTable1315-> (-> CountryName varchar(10)-> );Query OK, 0 rows affected (0.60 sec)INSERT 명령어로 몇 개의 레코드를 삽입합니다. 이때 의도적으로 빈 값도 함께
MySQL에서는 테이블에 이미 저장되어 있는 값들을 활용하여 특정 문장이나 텍스트 내에서 해당 단어들이 포함되어 있는지 확인할 수 있습니다. 이번 글에서는 LIKE 연산자와 CONCAT 함수를 조합하여 이를 구현하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1316 -> ( -> Value varchar(40) -> ); Query OK, 0 rows affected (0.47 sec)2. 데이터 삽입INSERT 명
MySQL에서는 IN() 연산자를 활용하면 하위 쿼리(서브쿼리)가 반환한 여러 개의 결과값을 손쉽게 처리할 수 있습니다. IN()은 하위 쿼리가 돌려준 값 목록과 일치하는 행만 필터링해 주기 때문에, 다중 결과 비교에 매우 유용합니다.먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1317 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows