MySQL 테이블에 저장된 행(레코드)의 개수를 확인하는 가장 간단한 방법은 집계 함수인 COUNT(*)를 사용하는 것입니다. COUNT(*)는 테이블 전체 행의 수를 빠르고 정확하게 반환해 주기 때문에 가장 널리 사용되는 방법입니다.1. 예제 테이블 생성먼저 실습을 위한 테이블을 생성하겠습니다.mysql> create table DemoTable1575 -> ( -> FirstName varchar(20) -> );Query OK, 0 rows affected (1.00 sec)2. 데이터 삽
MySQL에서 하나의 쿼리로 SELECT와 INSERT 동시에 처리하기MySQL에서는 INSERT INTO ... SELECT 문과 UNION ALL을 조합하면 단일 쿼리만으로 다른 테이블의 데이터를 조회하면서 새로운 테이블에 삽입할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.1단계: 첫 번째 테이블 생성먼저 학생 이름과 점수를 저장할 첫 번째 테이블을 생성합니다.mysql> create table DemoTable1 -> ( &n
MySQL에서 테이블의 마지막 몇 개 행을 가져오되 결과를 오름차순으로 정렬해야 하는 경우가 종종 있습니다. 예를 들어, 최근에 추가된 데이터 중 가장 오래된 순서부터 보여주고 싶을 때가 그렇습니다. 이럴 때는 서브쿼리와 함께 ORDER BY DESC와 LIMIT를 활용하면 간단하게 해결할 수 있습니다.기본 문법마지막 세 개의 행을 오름차순으로 선택하려면 아래와 같은 문법을 사용합니다. 먼저 내부 쿼리에서 역순(내림차순)으로 정렬한 뒤 원하는 개수만큼 제한하고, 외부 쿼리에서 다시 오름차순으로 정렬하는 방식입니다.SELECT * F
MySQL 행 고유성 검증을 위한 UNIQUE 제약 조건 활용법MySQL에서 특정 행이 중복되지 않도록 보장하려면 UNIQUE 제약 조건(Unique Constraint)을 사용해야 합니다. 이 제약 조건은 하나 또는 여러 개의 컬럼 조합에 적용할 수 있으며, 동일한 값이 다시 입력되는 것을 데이터베이스 차원에서 자동으로 차단합니다.1. 테이블 생성먼저 예제로 사용할 테이블을 생성하겠습니다.mysql> create table DemoTable1580 -> ( -> id int, -> Nam
MySQL에서 TINYINT 타입으로 저장된 값 중 1이 아닌 값(<> 1) 또는 NULL인 레코드를 조회하는 방법을 알아보겠습니다. 이때 주의할 점은 NULL 비교에는 반드시 IS NULL 연산자를 사용해야 한다는 것입니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. 직원 정보를 저장하며, 결혼 여부를 TINYINT 타입의 isMarried 컬럼으로 관리합니다.mysql> create table DemoTable-> (-> EmployeeId int NOT NULL AUTO_INCREMENT PRI
MySQL에서 테이블의 두 번째 최대값(두 번째로 큰 값)을 구하고 싶다면 LIMIT 1 OFFSET 1을 사용하면 간단하게 해결할 수 있습니다. 이 방법은 값을 내림차순으로 정렬한 뒤, 첫 번째 행(최대값)을 건너뛰고 그 다음 행만 가져오는 원리입니다.실제 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected
MySQL에서 오름차순(ASC) 정렬을 하다 보면 가장 작은 값이 항상 맨 위로 올라옵니다. 하지만 실무에서는 특정 값 이상인 데이터를 먼저 오름차순으로 정렬한 뒤, 그보다 작은 값들이 다시 첫 번째 값으로 순환(wrap around)되어 뒤따르도록 정렬해야 하는 경우가 있습니다.이 글에서는 단일 쿼리만으로 이러한 순환 정렬 효과를 구현하는 방법을 예제와 함께 살펴봅니다.1. 예제 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable-> (-> Value int-> )
MySQL에서 데이터를 조회할 때 열에 빈 문자열()이 저장되어 있는 경우, 그대로 두지 않고 Not Applicable처럼 원하는 텍스트로 대체하여 표시해야 하는 경우가 자주 있습니다. 이럴 때 IF() 함수를 사용하면 아주 간단하게 해결할 수 있습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> FirstName varchar(20) -> );Query OK, 0 rows affected (0.77 sec)2.
IP 주소는 문자열 그대로 정렬하면 의도와 다른 순서가 나올 수 있습니다. 예를 들어 192.168.110.87이 192.168.110.78보다 앞에 오는 등 사전순 비교 때문에 어색한 결과가 발생합니다. 이 문제를 해결하려면 MySQL의 INET_ATON() 함수를 활용하면 됩니다.INET_ATON() 함수란?INET_ATON()은 IP 주소 문자열을 숫자 값으로 변환하는 함수입니다. IP 주소를 숫자로 바꾼 뒤 ORDER BY 절을 적용하면, 사람이 인식하기 자연스러운 올바른 순서대로 레코드를 정렬할 수 있습니다.1. 테이블 생
MySQL에서 CASE 문으로 빈 값에 사용자 지정 이름 표시하기데이터베이스를 다루다 보면 컬럼 값이 NULL이거나 빈 문자열()인 레코드를 자주 만나게 됩니다. 이런 경우 화면에 아무것도 표시되지 않아 사용자에게 혼란을 줄 수 있습니다. MySQL에서는 CASE WHEN 문을 활용하면 빈 값 대신 원하는 사용자 지정 이름을 손쉽게 표시할 수 있습니다.이번 글에서는 실제 예제를 통해 빈 값을 다른 이름으로 치환하여 출력하는 방법을 단계별로 살펴보겠습니다.1. 예제 테이블 생성먼저 테스트용 테이블을 생성합니다. 여기서는 이름을 저장할
MySQL에서 테이블의 마지막 30개 행을 가져오려면 ORDER BY ... DESC로 내림차순 정렬한 뒤 LIMIT 30을 사용하면 됩니다. 기본 문법은 다음과 같습니다.SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 30;1. 예제 테이블 생성먼저 실습용 테이블을 생성해 보겠습니다.mysql> CREATE TABLE DemoTable1567 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
MySQL에서 여러 데이터베이스의 테이블 행 수 합계 구하기여러 데이터베이스에 흩어져 있는 동일한 이름의 테이블들의 전체 행(row) 수를 한 번에 확인하려면, 집계 함수 SUM()과 INFORMATION_SCHEMA를 함께 사용하면 됩니다.INFORMATION_SCHEMA는 MySQL 서버 내 모든 데이터베이스, 테이블, 컬럼 등의 메타데이터를 담고 있는 가상 데이터베이스입니다. 그중 information_schema.tables 뷰에는 각 테이블의 대략적인 행 수를 나타내는 TABLE_ROWS 컬럼이 포함되어 있어, 이를 활용하
MySQL에서 이미 존재하는 테이블의 특정 행(row)과 열(column)에 값을 삽입하거나 수정하려면 UPDATE 문과 WHERE 절을 함께 사용해야 합니다. 이번 글에서는 예제를 통해 단계별로 그 방법을 알아보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1569 -> ( -> StudentId varchar(10), -> StudentName varchar(20) -> );Query OK, 0 rows af
데이터베이스 작업을 하다 보면 현재 시간 기준으로 일정 시간 이내의 레코드만 조회해야 하는 경우가 자주 발생합니다. 예를 들어 최근 5시간 안에 도착한 데이터만 추출하고 싶다면 INTERVAL 키워드를 활용하면 간단하게 처리할 수 있습니다. 이번 글에서는 실제 예제를 통해 MySQL에서 시간 차이를 계산하고 원하는 데이터를 조회하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다. 도착 시간(ArrivalTime)을 저장할 datetime 타입의 컬럼 하나로 구성된 간단한 테이블입니다.mys
MySQL에서 order는 예약어(reserved word)입니다. 따라서 이 단어를 테이블 이름으로 그대로 사용하면 쿼리 오류가 발생합니다.해결 방법: 백틱(Backticks) 사용하기예약어를 테이블 이름이나 컬럼 이름으로 사용하려면 이름을 백틱(`)으로 감싸주어야 합니다. 아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.1. 백틱으로 테이블 생성하기mysql> create table `order` -> ( -> StudentId int -> ); Query OK, 0 rows affe
MySQL에서 DELETE 문을 사용하면 테이블의 레코드를 손쉽게 삭제할 수 있습니다. 하지만 동일한 값이 여러 번 중복되어 저장된 경우, DELETE 문을 그대로 실행하면 해당 값을 가진 모든 행이 한꺼번에 삭제됩니다. 이럴 때 LIMIT 절을 함께 사용하면 삭제되는 레코드의 개수를 원하는 만큼 제한할 수 있습니다.기본 문법DELETE FROM yourTableName WHERE yourColumnName = yourValue LIMIT 1;위 문법에서 LIMIT 1은 조건에 일치하는 레코드 중 딱 하나만 삭제하겠다는 의미입니다.
MySQL 테이블에 여러 개의 중복 데이터가 저장되어 있을 때, 그중 특정 값에 해당하는 중복 레코드만 골라서 확인하고 싶은 경우가 있습니다. 이럴 때 LIKE 연산자를 사용하면 간단하게 원하는 레코드만 조회할 수 있습니다.기본 문법특정 중복 레코드만 표시하려면 아래와 같이 WHERE 절과 함께 LIKE 연산자를 사용합니다.SELECT * FROM yourTableNameWHERE yourColumnName LIKE yourValue;실습 예제먼저 실습용 테이블을 생성해 보겠습니다.mysql> CREATE TABLE DemoT
이미 생성된 테이블에 새로운 열을 추가할 때는 ALTER TABLE 문과 ADD COLUMN 절을 함께 사용합니다. 여기에 AUTO_INCREMENT 속성을 적용하고 시작 값을 직접 지정하면, 기존 데이터에도 원하는 번호부터 순차적으로 자동 증가 값이 부여됩니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable-> (-> StudentName varchar(20)-> );Query OK, 0 rows affected (0.63 sec)2. 샘
개요SQL에서 특정 컬럼의 최대값(MAX)을 가진 행의 다른 컬럼 값까지 함께 조회하고 싶을 때가 있습니다. 단순히 MAX() 함수만 사용하면 최대값 자체만 반환되기 때문에, 같은 행에 있는 다른 필드를 가져오려면 서브쿼리(Sub Query)와 함께 활용해야 합니다.이 글에서는 예제 테이블을 만들고, MAX() 함수를 이용해 원하는 데이터를 조회하는 과정을 단계별로 살펴보겠습니다.1. 예제 테이블 생성먼저 상품 ID와 상품 금액을 저장할 테이블을 생성합니다.mysql> create table DemoTable-> (-&g
MySQL에서는 CONCAT() 함수를 사용하여 서로 다른 테이블에 있는 열의 값을 하나로 연결할 수 있습니다. 이 글에서는 두 개의 테이블을 만들고, JOIN과 함께 CONCAT() 함수를 활용해 열을 결합하는 방법을 단계별로 살펴보겠습니다.1. 첫 번째 테이블 생성먼저 이름(FirstName)을 저장할 테이블을 생성합니다.mysql> create table DemoTable1 -> ( -> FirstName varchar(20)&n