MySQL 43

[MySQL] 재귀 쿼리 (RECURSIVE CTE)

재귀 쿼리는 자기 자신을 참조하여 쿼리를 실행하는 것이다.영어로 Recursive CTE이다. CTE란?Common Table Expression의 약자WITH 문을 사용하여 만든 임시 테이블하나의 쿼리문 범위 내에서만 존재하며, 여러번 참조될 수 있는 일회성 테이블재사용이 필요한 서브 쿼리를 간결하게 표현할 때 유용 [CTE 기본 구조]WITH CTE_이름 AS ( -- CTE 내부의 쿼리 정의 SELECT ...)SELECT * FROM CTE_이름   재귀적(Recursive) CTERecursive CTE(재귀 공통 테이블 표현식)는 재귀적으로 데이터를 처리할 수 있는 CTE의 확장 버전주로 계층적 데이터(예: 조직 구조, 트리 구조)를 탐색하거나, 반복적인 계산이 필요한 경우에 사용 ..

DB 2024.12.17

[MySQL] 프로시저, 이벤트 스케줄러 만들기

프로시저란?어떠한 동작을 일괄 처리하기 위한 쿼리문의 집합으로, MySQL에서의 메서드라고 보면 된다. 함수처럼 매개변수를 받고 그에 따라 결과를 나타내는 것이 가능하다.SQL 명령의 묶음으로, 프로시저로 묶인 SQL 문 질의들은 처리될 때 하나의 쿼리로 해석된다.  프로시저 사용법DELIMITER //CREATE PROCEDURE 프로시저명(매개변수)BEGIN SQL 문1; SQL 문2;END//DELIMITER ; "DELIMITER //" 을 선언해서 기존 구분 문자인 ";" 에서 "//"로 바꿔준다.CREATE PROCEDURE로 프로시저를 등록한다.프로시저 등록을 마친 후 "DELIMITER ;"을 통해 다시 구분 문자를 ";"으로 바꿔준다. call 프로시..

DB 2024.06.01

[MySQL] CMD이용해 CRUD 하기

-MySQL 셸에 액세스 mysql -u root -p 명령어 입력 후 MySQL 루트 사용자 암호를 입력한다. -데이터베이스 생성 CREATE DATABASE [데이터베이스 이름] -데이터베이스 삭제 DROP DATABASE [데이터베이스 이름] -모든 데이터베이스 보기 SHOW DATABASES; -데이터베이스 선택 USE [데이터베이스 이름] -테이블 생성 CREATE TABLE [테이블 이름]( 컬럼명 데이터타입 조건, 컬럼명 데이터타입 조건, ... ); 테이블 구조 확인 DESC [테이블 명] create -데이터 삽입 INSERT INTO [테이블 명] ([칼럼1], [칼럼2], [칼럼3]) VALUES ([값1], [값2], [값3]....) read -테이블 전체 데이터 확인 SELECT..

DB 2023.05.04

[MySQL] 문자열 관련 함수

MySQL 문자열 관련 함수를 정리해보았다. 찾으면 찾을 수록 정말 다양한 함수들을 제공해주는것 같다. LENGTH(str) 문자열의 길이 찾기 SELECT LENGTH('HELLO') -- 5 CONCAT(str, str) 여러 문자열 합치기 SELECT CONCAT('안녕','하','세요'); --'안녕하세요' INSTR(str, substr) 문자열에서 찾는 문자열이 몇번째 위치에 있는지 알아내기 찾는 문자열이 없을 경우 0 리턴, 1개 이상 있는 경우 첫번째 문자열의 시작 자리수 리턴 SELECT INSTR('ABCDE', 'BC') -- 2 REPLACE(str, from_str, to_str) 문자열에서 특정 문자열을 찾아 원하는 문자열로 모두 치환한다. SELECT REPLACE('www.n..

DB 2023.03.04

[MySQL] 자주 나오는 문법 정리

프로그래머스 고득점 KIT 문제를 풀어보면서, 자주 나오는 MySQL 문법들을 정리해보았다. LIMIIT 결과 개수 제한 ORDER BY ID LIMIT 1 # 가장 상위 1개만을 조회한다. * LIMIT 0, 3: 상위 0번째부터 3번째까지의 정보 조회 정렬 우선순위 별 다중 정렬 ORDER BY NAME, ID DESC 이름 오름차순 정렬, 이름이 같으면 ID 내림차순 정렬 LIKE 부분 일치 WHERE NAME LIKE 'A%' # A로 시작하는 NAME WHERE NAME LIKE '%A' # A로 끝나는 NAME WHERE NAME LIKE '%A%' # A가 포함된 NAME DATE_FORMAT 날짜 형식 지정 SELECT DATE_FORMAT(DATE_TIME, '%Y-%m-%d') 날짜를 ..

DB 2023.02.25

[MySQL] 프로그래머스 - 상품을 구매한 회원 비율 구하기(JOIN, DISTINCT)

https://school.programmers.co.kr/learn/courses/30/lessons/131534 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT YEAR(SALES_DATE) YEAR, MONTH(SALES_DATE) MONTH, COUNT(DISTINCT O.USER_ID) PUCHASED_USERS, ROUND(COUNT(DISTINCT O.USER_ID) / ( #2021에 가입한 전체 회원수 SELECT COUNT(USER_ID) FROM USER_INFO WHERE YEAR(JOINED) = 2021 ), 1) AS..

DB 2023.02.23

[MySQL] 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr -- 코드를 입력하세요 SELECT YEAR(SALES_DATE) YEAR, MONTH(SALES_DATE) MONTH, GENDER, COUNT(DISTINCT U.USER_ID) AS USERS FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GEND..

DB 2023.02.23

[MySQL] 프로그래머스 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/157339 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT CAR.CAR_ID, CAR.CAR_TYPE, ROUND(CAR.DAILY_FEE * (1- 0.01 * DISCOUNT_RATE) * 30) AS FEE FROM CAR_RENTAL_COMPANY_CAR CAR JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN PLAN ON CAR.CAR_TYPE = PLAN.CAR_TYPE WHERE CAR.CAR_ID NOT ..

DB 2023.02.22

[MySQL] 프로그래머스 - 오프라인/온라인 판매 데이터 통합하기(UNION ALL)

https://school.programmers.co.kr/learn/courses/30/lessons/131537# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM( SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE UNION ALL SELECT SALES_DATE, PRODUCT_ID, NULL AS USER..

DB 2023.02.21