DB 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

[DB] 프로시저, 트리거, 사용자 정의 함수

프로시저 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 특정 기능을 수행하는 일종의 트랜젝션 언어로, 호출을 통해 실행되어 미리 저장해 놓은 SQL작업을 수행한다. 프로시저 구성 DECLARE : 프로시저의 명칭, 변수, 인수, 데이터 타입을 정 의하는 선언부 (필수) BEGIN / END : 프로시저의 시작과 종료를 의미 (필수) CONTROL : 조건문 또는 반복문이 삽입, 순차적 처리 SQL : DML, DCL이 삽입돼, 조회, 추가, 수정, 삭제 작업을 수행 EXCEPTION : 구문 실행 중 예외 발생 시 처리 방법 정의 TRANSACTION : 작업들을 DB에 적용할지 취소할지 결정 하는 처리부 프로시저 생성 CREATE PROCEDURE 프로시저명(파라미터) BEGIN ..

DB 2024.01.31

[DB] 데이터베이스 키(Key)의 개념 / 종류

관계형 데이터베이스에서 키(key)는 데이터베이스 테이블에서 각 행을 유일하게 식별하는 데 사용되는 필드나 필드의 조합을 말한다. 기본키(Primary key) 유일성과 최소성을 만족하는 키이다. 중복된 값을 가질 수 없다. Null 값을 가질 수 없다. 유일성: 하나의 키 값으로 하나의 튜플만을 유일하게 식별 최소성: 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성으로만 구성 ex) 사용자 테이블에서의 사용자 ID 후보키(Candidate key) 기본키가 될 수 있는 후보들이며 유일성과 최소성을 모두 만족해야 한다. 후보키의 조합 중에 기본키를 선택한다. ex) 사용자 테이블의 이메일 주소, 전화번호 대체키(Alternate key) 후보키가 둘 이상일 때 기본키로 선택되지 않고 남은 키이다. e..

DB 2024.01.31

[DB] 데이터베이스 용어 정리

데이터베이스 : 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음 DBMS(DataBase Management System) : 데이터베이스를 제어, 관리하는 통합 시스템 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 query를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다. 또한 데이터베이스는 실시간 접근과 동시 공유가 가능하다. DataBase 용어 Entity : 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사 : 현실 세계에서 구별할 수 있는 실제 객체나 사물을 나타내는 개념 일반적으로 엔티티는 데이터베이스의 테이블에 대응되며, 테이블에 저장된 각각의 레코드는 엔티티의 하나의 인스턴스에 해당한다. Relation : 데이터베이스에서 정보를 구..

DB 2024.01.31

[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