MySQL에서 테이블 내 최댓값과 최솟값에 해당하는 행을 동시에 조회하려면 서브쿼리와 함께 MIN(), MAX() 함수를 사용하면 됩니다. 두 값을 하나의 결과로 합쳐서 비교하기 위해 UNION ALL을 활용합니다.1. 샘플 테이블 생성먼저 직원 이름과 급여를 저장할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> EmployeeName varchar(20), -> EmployeeSalary int -> );Query OK, 0 rows affe
IP 주소는 문자열이기 때문에 단순히 ORDER BY를 사용하면 문자열 기준으로 정렬되어 의도하지 않은 순서가 나올 수 있습니다. 예를 들어 192.168.110.9는 192.168.110.10보다 뒤에 위치해야 하지만, 문자열 비교에서는 앞에 오게 됩니다.이 문제를 해결하려면 MySQL의 INET_ATON() 함수를 사용하면 됩니다. 이 함수는 IP 주소를 숫자 값으로 변환해 주기 때문에, 변환된 숫자를 기준으로 ORDER BY를 적용하면 네트워크 순서대로 올바르게 정렬할 수 있습니다.1. 테이블 생성하기먼저 IP 주소를 저장할
MySQL 테이블에서 동일하거나 가장 가까운 큰 값 조회하기MySQL에서 특정 기준값과 같거나 그보다 큰 수 중 가장 가까운 값을 조회해야 하는 경우가 있습니다. 이런 작업은 ORDER BY 절과 ABS() 함수를 조합하면 간단하게 구현할 수 있습니다. 예제를 통해 단계별로 살펴보겠습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> Value int-> );Query OK, 0 rows affected (1.33 sec)2. 데이터 삽입
MySQL 단일 쿼리에서 여러 LIKE 조건 결합하기 MySQL에서 하나의 SELECT 문 안에 여러 개의 LIKE 조건을 적용하려면 각 조건을 OR 연산자로 연결하면 됩니다. 이렇게 하면 이름, 나이, 국가처럼 서로 다른 컬럼을 대상으로 한 번의 쿼리만으로 패턴 검색을 수행할 수 있습니다. 기본 문법 SELECT * FROM yourTableName WHERE yourColumnName1 LIKE %yourValue1% OR yourColumnName2 LIKE %yourValue2% OR yourColumnName3
MySQL에서 데이터를 다루다 보면 컬럼 값 끝에 불필요한 밑줄(_)이 붙어 있는 경우가 종종 있습니다. 이런 후행 문자를 제거하려면 TRIM() 함수를 활용하면 됩니다. 아래의 UPDATE 문법처럼 TRAILING 옵션과 함께 사용하면 문자열 뒤쪽의 특정 문자만 깔끔하게 삭제할 수 있습니다.후행 문자 제거 기본 문법UPDATE yourTableNameSET yourColumnName = TRIM(TRAILING _ FROM yourColumnName);실습 예제1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql>
MySQL에서 동일한(또는 유사한) 날짜를 기준으로 값을 합산하려면 집계 함수인 SUM()과 GROUP BY 절을 함께 사용하면 됩니다. 이 방법을 사용하면 같은 날짜에 속한 여러 레코드의 값들을 하나로 묶어 총합을 구할 수 있습니다.1. 예제 테이블 생성하기먼저 실습에 사용할 테이블을 만들어 보겠습니다. 상품 구매 날짜와 수량을 저장하는 간단한 테이블입니다.mysql> create table DemoTable1522 -> ( -> ProductPurchaseDate date, -> Num
MySQL에서 배열 요소와 일치하는 값 조회하기MySQL에서 특정 값들의 집합(배열)과 모두 일치하는 레코드를 찾으려면 IN 절과 GROUP BY, HAVING COUNT(*)를 함께 활용하면 됩니다. 이번 글에서는 예제 테이블을 만들고, 지정한 값들이 모두 포함된 Id를 조회하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1523 -> ( -
MySQL 테이블의 열(컬럼) 개수를 자바에서 확인하려면 ResultSetMetaData를 활용하면 됩니다. ResultSetMetaData는 결과 집합(Result Set)에 대한 메타데이터, 즉 열의 개수, 이름, 데이터 타입 등의 정보를 제공하는 인터페이스입니다.1. 테스트용 테이블 생성먼저 MySQL에서 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
MySQL GROUP_CONCAT 결과에서 마지막 값 가져오기MySQL에서 콤마(,)로 구분된 문자열이 저장된 컬럼의 마지막 값을 추출하려면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나누고, 양수 인덱스는 앞에서부터, 음수 인덱스는 뒤에서부터 값을 반환합니다.실제 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 과목 목록을 저장할 테이블을 생성합니다.mysql> create table DemoTable1525-> (-> ListOfSubject
MySQL에서 특정 열 값을 기준으로 여러 행을 마치 배열처럼 하나로 묶어 조회하고 싶다면 GROUP_CONCAT() 함수를 사용하면 됩니다. 여기에 ORDER BY 절을 함께 활용하면 그룹의 출력 순서까지 원하는 대로 지정할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다. 1단계: 테이블 생성하기 먼저 예제에 사용할 테이블을 만듭니다. mysql> create table DemoTable -> ( -> Id int, -> FirstName varchar(20) ->
MySQL에서 저장된 날짜 값을 원하는 텍스트 형식으로 조회하려면 DATE_FORMAT() 함수를 사용하면 됩니다. 이 함수는 날짜 컬럼과 형식 지정자(format specifier)를 인자로 받아, 지정한 패턴에 맞게 변환된 문자열을 반환합니다.기본 문법select date_format(yourColumnName, %e %b %y) from yourTableName;여기서 사용된 형식 지정자의 의미는 다음과 같습니다.%e : 일(日)을 나타내며, 한 자리 숫자일 경우 앞에 0을 붙이지 않습니다. (예: 1~31)%b : 월을 영문
MySQL에서 최근 3개월 이내의 데이터를 먼저 출력하고, 그 다음 고객 이름을 알파벳 순으로 정렬해야 하는 경우가 종종 있습니다. 예를 들어 최근에 구매한 고객을 상단에 노출하고, 오래된 기록은 이름순으로 깔끔하게 보여주고 싶을 때 유용합니다. 이 글에서는 ORDER BY 절과 CURDATE(), INTERVAL 함수를 활용해 이를 구현하는 방법을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1526 &nb
MySQL DATE_FORMAT()으로 시간과 분만 출력하기MySQL에서 날짜·시간(datetime) 데이터 중 시간(Hour)과 분(Minutes)만 표시하고 싶다면 DATE_FORMAT() 함수를 사용하면 됩니다. 형식 지정자(format specifier)를 활용해 원하는 형태로 손쉽게 출력할 수 있습니다.기본 문법은 다음과 같습니다.SELECT DATE_FORMAT(컬럼명, %H:%i) AS 별칭 FROM 테이블명;여기서 %H는 24시간 형식의 시를, %i는 분을 의미합니다.1. 테스트용 테이블 생성먼저 예제에 사용할 테이블
개요MySQL에서 데이터를 삽입할 때 값에 큰따옴표()를 포함하려면, 해당 문자가 SQL 구문 오류로 잘못 해석되지 않도록 백슬래시(\)로 이스케이프 처리해야 합니다. 아래 구문을 참고하세요.구문insert into yourTableName values(\yourValue\);이제 실제 예제를 통해 단계별로 살펴보겠습니다.1단계: 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Name varchar(20) -> );Query OK,
MySQL에서 사용자 정의 변수를 결과 테이블에 표시하려면 @ 기호로 변수를 선언하고, concat_ws() 함수를 활용하여 여러 컬럼의 값을 하나로 연결해 출력할 수 있습니다.1. 샘플 테이블 생성먼저 학생 이름 정보를 저장할 테이블을 생성합니다.mysql> create table DemoTable1508 -> ( -> StudentFirstName varchar(20), -> StudentLastName varchar(20) -> ); Query OK, 0 rows affe
MySQL에서 DATETIME 컬럼의 기존 값을 유지하면서 특정 기간을 더해 업데이트해야 하는 경우가 있습니다. 예를 들어 기존 날짜·시간 데이터에 10년 3개월 22일 10시간 30분을 추가하고 싶다면 INTERVAL 키워드를 활용하면 됩니다. 이 글에서는 테이블 생성부터 업데이트, 결과 확인까지 전 과정을 단계별로 살펴보겠습니다.1. 테이블 생성먼저 DATETIME 타입의 컬럼을 가진 테이블을 생성합니다.mysql> create table DemoTable1509 -> (&nb
데이터베이스 작업 중에는 하나의 필드(컬럼) 값 안에 포함된 특정 문자, 예를 들어 쉼표(,)의 개수를 확인해야 하는 경우가 종종 있습니다. MySQL에서는 LENGTH() 함수와 REPLACE() 함수를 조합하면 복잡한 로직 없이 간단하게 해결할 수 있습니다.기본 문법SELECT LENGTH(yourColumnName) - LENGTH(REPLACE(yourColumnName, ,, )) AS anyAliasName FROM yourTableName;동작 원리는 매우 직관적입니다. 먼저 전체 문자열의 길이를 구한 뒤, 쉼표를 모두
MySQL에서 GROUP BY 절을 사용하면 NULL 값들은 기본적으로 하나의 그룹으로 묶여 단일 행으로 출력됩니다. 이러한 동작을 방지하고 NULL 값이 포함된 각 행을 개별적으로 유지하려면 IFNULL() 함수를 활용하면 됩니다. 아래에서 예제와 함께 자세히 살펴보겠습니다.예제 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable1511 -> ( -> Id int NOT NULL A
MySQL에서는 row_count() 함수를 사용하여 INSERT ... ON DUPLICATE KEY UPDATE 쿼리 실행 시 실제로 어떤 동작이 일어났는지 확인할 수 있습니다.row_count() 반환값의 의미1을 반환하는 경우: 새로운 레코드가 삽입된 것입니다. 즉, ON UPDATE 이벤트가 발생하지 않았습니다.2를 반환하는 경우: 기존 레코드가 업데이트된 것입니다. 즉, 쿼리 실행과 함께 ON UPDATE 이벤트가 발생했습니다.기본 문법select row_count();실습 예제1단계: 테이블 생성먼저 테스트에 사용할 테
개요MySQL에서 INSERT 문에 열 목록(컬럼 리스트)을 지정하지 않으면, 테이블에 정의된 모든 열의 순서와 개수에 맞춰 값을 반드시 나열해야 합니다. 이때 특정 열에 값을 저장하고 싶지 않다면, 해당 자리에 NULL을 명시적으로 작성하면 됩니다.insert into yourTableName values(NULL, yourValue, NULL, NULL, ...N);예제 테이블 생성먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable1513 -> ( ->