MySQL에서 중복된 데이터를 모두 조회하려면 서브쿼리(subquery)를 활용하면 됩니다. 핵심 아이디어는 GROUP BY로 이름별 개수를 세고, HAVING 절로 2개 이상 존재하는 값만 걸러내는 것입니다. 이번 글에서는 예제 테이블을 직접 만들고, 중복 레코드를 조회하는 과정을 단계별로 살펴보겠습니다.1단계: 예제 테이블 생성먼저 자동 증가 기본키(Id)와 이름(Name) 컬럼을 가진 데모 테이블을 생성합니다.mysql> create table DemoTable -> ( -> Id int NOT NU
MySQL에서 특정 테이블의 데이터를 조회할 때, 오늘 날짜에 해당하는 레코드는 제외하고 나머지 레코드만 모두 가져와야 하는 경우가 있습니다. 이 글에서는 CURDATE() 함수와 DATE() 함수를 조합하여 이를 간단하게 처리하는 방법을 예제와 함께 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> Name varchar(100),-> DueDate datetime-> );Query OK, 0 rows affected
MySQL에서 여러 값에 대해 부분 일치 검색을 수행하려면 정규 표현식(REGEXP)을 활용하는 것이 더욱 효율적입니다. LIKE 연산자는 패턴 매칭을, IN 연산자는 특정 값 목록과의 비교를 담당하는데, 두 기능을 하나의 조건으로 결합해야 할 때 REGEXP가 유용한 대안이 됩니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성하겠습니다.mysql> create table DemoTable -> ( -> Name varchar(30) -> );Query OK, 0 rows affected (0
전화번호 목록이 저장된 테이블에서 지역번호(area code)만 따로 추출해야 하는 경우가 종종 있습니다. 지역번호란 예를 들어 전화번호 맨 앞에 위치한 몇 자리 숫자를 의미하며, MySQL에서는 LEFT() 함수를 사용하면 간단하게 추출할 수 있습니다.1. 테이블 생성하기먼저 실습에 사용할 테이블을 생성합니다.mysql> create table DemoTable-> (-> AreaCodes varchar(100)-> );Query OK, 0 rows affected (0.62 sec)2. 샘플 데이터 삽입하기
MySQL에서 대용량 문자열을 저장하려면 TEXT 데이터 타입을 사용하는 것이 가장 좋습니다. TEXT 타입은 최대 65,535바이트(약 64KB)까지의 문자열을 저장할 수 있으며, 더 큰 용량이 필요하다면 MEDIUMTEXT(16MB)나 LONGTEXT(4GB)를 활용할 수도 있습니다.TEXT 데이터 타입 기본 문법CREATE TABLE yourTableName ( yourColumnName text, . . N );테이블 생성 예제먼저 TEXT 타입의 컬럼을 가진 테이블을 생성해 보겠습니다.mysql
FIND_IN_SET() 함수로 사용자 지정 정렬 구현하기MySQL에서 ASC(오름차순)나 DESC(내림차순) 키워드를 사용하지 않고도 원하는 순서대로 결과를 정렬할 수 있습니다. 이때 유용하게 활용되는 것이 바로 FIND_IN_SET() 함수입니다. 이 함수는 쉼표로 구분된 문자열 목록에서 특정 값의 위치를 반환하기 때문에, ORDER BY 절과 함께 사용하면 개발자가 직접 지정한 임의의 순서대로 데이터를 정렬할 수 있습니다.1단계: 테이블 생성먼저 데모용 테이블을 생성합니다.mysql> create table DemoTab
MySQL에서 특정 길이 이하의 문자열을 가진 행을 조회해야 하는 경우가 종종 있습니다. 이럴 때 CHAR_LENGTH() 함수를 활용하면 간단하게 해결할 수 있습니다. CHAR_LENGTH()는 문자열의 문자 개수를 반환하는 함수로, 이를 WHERE 절과 함께 사용하면 원하는 조건의 데이터를 손쉽게 필터링할 수 있습니다.1. 테이블 생성하기먼저 실습에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable-> (-> Name varchar(100)-> );Query OK, 0
MySQL에서 WHERE 절을 사용하면 특정 점수 이상을 받은 학생들의 기록을 손쉽게 조회할 수 있습니다. 이 글에서는 예제 테이블을 만들고, 조건에 맞는 학생 데이터를 추출하는 전체 과정을 단계별로 살펴보겠습니다.1. 테이블 생성하기먼저 학생 정보를 저장할 테이블을 생성합니다. 아래 예제에서는 학생 ID, 이름, 점수를 담는 DemoTable을 만듭니다.mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
MySQL COUNT(DISTINCT)로 고유 레코드 개수 세기MySQL에서 특정 열에 저장된 값 중 중복을 제거한 고유(distinct) 레코드의 개수를 구하려면 COUNT() 함수와 함께 DISTINCT 키워드를 사용하면 됩니다. 이 조합은 데이터 분석 시 중복 값을 배제하고 실제 고유한 값이 몇 개 존재하는지 확인할 때 매우 유용합니다.기본 문법SELECT COUNT(DISTINCT yourColumnName) FROM yourTableName;위 문법에서 yourColumnName에는 고유 개수를 세고 싶은 열의 이름을, y
MySQL 5.7 버전부터 도입된 JSON 데이터 타입을 사용하면 관계형 데이터베이스 안에서도 JSON 형식의 데이터를 손쉽게 저장하고 조회할 수 있습니다. 이 글에서는 JSON 타입 컬럼을 가진 테이블을 만들고, 데이터를 삽입한 뒤, JSON_CONTAINS() 함수로 특정 값을 조회하는 방법을 단계별로 살펴보겠습니다. 1단계: JSON 타입 테이블 생성하기 먼저 JSON 데이터 타입의 컬럼을 포함하는 테이블을 생성합니다. mysql> create table DemoTable-> (-> StudentName js
MySQL에서 두 시간 값의 차이를 초 단위로 변환하려면 TIME_TO_SEC() 함수를 활용하면 됩니다. TIME_TO_SEC()는 시간 값을 초로 변환해 주는 함수로, TIMEDIFF() 함수와 함께 사용하면 두 시간 사이의 차이를 손쉽게 초 단위로 계산할 수 있습니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다. mysql> create table DemoTable -> ( -> SourceTime time, -> DestinationTime time -> ); Que
날짜가 VARCHAR 타입으로 저장된 경우에도 MySQL에서 특정 월의 데이터를 필터링할 수 있습니다. 이때 STR_TO_DATE() 함수를 사용해 문자열을 날짜 형식으로 변환한 뒤, MONTH() 함수를 함께 사용하면 원하는 월의 데이터만 손쉽게 추출할 수 있습니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성하겠습니다.mysql> create table DemoTable -> ( -> DueDate varchar(100) -> );Query OK, 0 rows affected (1.18
개요MySQL에서 특정 사용자가 데이터베이스의 모든 저장 프로시저(Stored Procedure)를 실행할 수 있도록 권한을 부여하려면 GRANT EXECUTE 문을 사용하면 됩니다. 이 글에서는 전체 사용자 목록을 확인하는 방법부터 실제 권한을 부여하는 과정까지 단계별로 살펴보겠습니다.1단계: MySQL의 전체 사용자 및 호스트 확인먼저 mysql.user 테이블을 조회하여 현재 등록된 모든 사용자와 호스트 정보를 확인합니다.mysql> SELECT user, host FROM mysql.user;위 쿼리를 실행하면 다음과
MySQL에서 AND와 OR의 연산 우선순위MySQL이 TRUE OR TRUE AND FALSE라는 조건식을 참(TRUE)으로 평가하는 이유는 연산자 우선순위 때문입니다. SQL에서 AND 연산자가 OR 연산자보다 높은 우선순위를 가지며, 따라서 OR보다 먼저 평가됩니다.즉, MySQL은 위의 조건식을 다음과 같이 해석합니다. AND 연산 부분이 먼저 처리되는 것입니다.(TRUE OR (TRUE AND FALSE))단계별 평가 과정먼저 괄호 안의 (TRUE AND FALSE) 부분이 평가됩니다. 이 식의 결과는 거짓(FALSE)입니
MySQL에서 하나의 열(컬럼)에 같은 값이 몇 번 반복되어 저장되어 있는지 확인하고 싶을 때가 있습니다. 이럴 때는 GROUP BY 절과 COUNT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다. 1. 테이블 생성하기 먼저 예제에 사용할 테이블을 생성합니다. mysql> create table DemoTable -> ( -> Number int -> ); Query OK, 0 rows affected (0.83 sec) 2. 데이터 삽입하기
MySQL에서 하나의 필드에 저장된 쉼표(또는 다른 구분자)로 구분된 여러 값을 검색하려면 IN() 연산자 대신 FIND_IN_SET() 함수를 사용해야 합니다. IN()은 컬럼 값 자체가 목록의 항목과 정확히 일치하는지 비교할 뿐, 하나의 문자열 필드 내부에 포함된 개별 값을 찾지 못하기 때문입니다.1. 테이블 생성먼저 예제에 사용할 테이블을 생성합니다.mysql> create table DemoTable -> ( -> ListOfValues text -> ); Query OK, 0 rows
네, 가능합니다. MySQL에서는 ORDER BY FIELD() 함수를 사용하면 쿼리 결과를 지정한 값 목록의 순서 그대로 반환할 수 있습니다.일반적으로 IN(30, 19, 34, ...) 조건으로 조회하면 결과는 테이블에 저장된 순서대로 나오기 때문에, 원하는 순서대로 정렬하려면 별도의 처리가 필요합니다. 이때 FIELD()函数가 유용하게 사용됩니다.예제 테이블 생성하기먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable -> ( -> Number int
MySQL 사용자 권한 조회하기: SHOW GRANTS 명령어MySQL에서 특정 사용자에게 부여된 권한을 확인하려면 SHOW GRANTS 문을 사용하면 됩니다. 기본 문법은 다음과 같습니다.SHOW GRANTS FOR 사용자이름@호스트이름;1단계: MySQL.user 테이블에서 사용자 목록 확인먼저 MySQL.user 테이블을 조회하여 등록된 사용자 이름과 호스트 이름을 확인해 보겠습니다.mysql> select user,host from MySQL.user;위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.+---------
MySQL에서 특정 문자(예: 하이픈 -), 이후의 값을 분리하여 추출하려면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 지정한 구분자를 기준으로 문자열을 나누고, 원하는 방향(앞에서부터 또는 뒤에서부터)의 값을 반환합니다.SUBSTRING_INDEX() 기본 문법SELECT SUBSTRING_INDEX(yourColumnName, -, -1) AS anyAliasName FROM yourTableName;여기서 세 번째 인자가 -1이면 구분자를 기준으로 뒤에서부터 첫 번째, 즉 마지막 구분자 오른쪽에 있는
MySQL에서 문자열의 특정 부분을 잘라내고 싶다면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 구분자를 기준으로 문자열을 나누어 원하는 부분만 손쉽게 추출할 수 있게 해줍니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성해 보겠습니다.mysql> create table DemoTable-> (-> StudentId varchar(100)-> );Query OK, 0 rows affected (0.60 sec)2. 샘플 데이터 삽입하기INSERT 명령을 사용해 테이블에 레코드를 추