SQL(MySQL) 16

프로그래머스 없어진 기록 찾기

참고: https://programmers.co.kr/learn/courses/30/lessons/59042 코딩테스트 연습 - 없어진 기록 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr ANIMAL_OUTS를 A로 잡고 ANIMAL_OUTS에는 ID가 있지만 ANIMAL_INS에는 없는 걸 찾으면 된다. SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B O..

SQL(MySQL) 2022.05.08

스토어드 함수와 커서의 개념, 커서(cursor)의 단계별 실습 방법

내가 필요한 함수를 만드는 것이 스토어드 함수이다. 다른점은 CREATE FUNCTION이라는 문구가 있다. 아래 세팅을 한번 해주자. SET GLOBAL log_bin_trust_function_creators = 1; 스토어드 함수를 만들고 USE market_db; DROP FUNCTION IF EXISTS sumFunc; DELIMITER $$ CREATE FUNCTION sumFunc(number1 INT, number2 INT) RETURNS INT BEGIN RETURN number1 + number2; END $$ DELIMITER ; 100과 200이 num1과 num2로 넘어간다. SELECT sumFunc(100, 200) AS '합계'; 아래코드는 실행하는 연도에 따라서 값이 달라질..

SQL(MySQL) 2022.04.19

스토어드 프로시저(stored procedure)의 개념과 사용 방법

스토어드 프로시저는 SQL문과 프로그래밍 기능이 합쳐진 것이 스토어드 프로시저이다. 스토어드 프로시저의 형식은 아래와 같다.($$ 또는 ##을 많이 쓴다.) 커피에 비유를 해보면 스토어드 프로시저 생성은 커피 자판기를 만드는 것이고 스토어드 프로시저 호출은 커피를 뽑는 것이다. 아래 CALL과정이 커피를 뽑는 작업이라 보면된다. 프로시저를 생성해주고 DROP PROCEDURE IF EXISTS user_proc; DELIMITER $$ CREATE PROCEDURE user_proc() BEGIN SELECT * FROM member; -- 스토어드 프로시저 내용 END $$ DELIMITER ; 실행을 시킨다. 여러 번 실행시킬 수가 있다. CALL user_proc(); 프로시저를 삭제를 해보자. D..

SQL(MySQL) 2022.04.19

인덱스의 생성과 제거 문법

인덱스 생성의 간단한 형태만 보면 CREATE [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름 (열_이름) [ASC| DESC] 인덱스 제거 문법은 DROP INDEX 인덱스_이름 ON 테이블_이름 SHOW INDEX FROM member; Data_length가 16364가 나오는데 전체의 데이터가 저장되는데 16kb가 나오게 되는것(한 페이지 짜리 책이라고 보면 된다.) SHOW TABLE STATUS LIKE 'member'; 보조인덱스를 추가해보자. Non_unique가 1이면 중복을 허용 CREATE INDEX idx_member_addr ON member (addr); SHOW INDEX FROM member; 상세하게 데이터를 확인해보면 SHOW TABLE STATUS LIKE 'm..

SQL(MySQL) 2022.04.12

인덱스의 내부 작동 원리와 구조 & 데이터 검색하기

노드 하나에 데이터가 4개 들어가는 것으로 표현을 했다. 밑에 그림은 루트 페이지 없이 리프 페이지만을 나타내었다.(인덱스가 없는 상태) FULL TABLE SCAN 굉장히 좋지않다. 데이터 한개를 찾기위해서 3페이지를 다 찾았다. 100만 페이지 짜리면? 100만페이지를 다 찾아야 한다. (느리게 찾느냐) 페이지를 하나씩 찾으면서 데이터를 찾는데, 두페이지만 읽어서 찾게 된다.(빨리 찾느냐) 인덱스를 구성하면 SELECT는 빨라지나 INSERT UPDATE DELETE시 성능이 나빠질 수 있다. 아래를 보면 II를 넣기 위해서 JJJ를 아래로 한 칸 이동 했다. 이번에는 GGG를 넣어주는 작업을 하는데 III JJJ가 있는 페이지를 따로 생성을 해서 페이지가 하나 늘어나게 된다. 즉 느려지게 된다. 이..

SQL(MySQL) 2022.04.12

인덱스 개념과 장단점, 클러스터형 인덱스와 보조 인덱스

인덱스는 색인 말 그대로 원하는 내용을 찾는 것을 뜻한다.(책 뒤에 찾아보기 페이지가 필요하다.) 데이터가 많은 곳에서 SELECT문을 날리기 위해서는 INDEX가 필요함. 장점으로는 SELECT 문으로 검색하는 속도가 빨라짐 컴퓨터의 부담이 줄어들고 전체 시스템의 성능이 향상됨 단점은 인덱스도 공간을 차지하므로 DB 안에 추가적인 공간이 필요 인덱스를 만드는 데 시간이 오래 걸림 SELECT가 아닌 데이터의 변경 작업 INSERT UPDATE, DELETE가 자주 일어나면 성능이 나빠질 수도 있음 인덱스의 종류에는 크게 두가지 클러스터형 인덱스 보조 인덱스 CREATE TABLE을 할 때 mem_id에 PRIMARY KEY를 지정해주는 순간 영어사전 처럼 순차적으로 진행된다. (아이디 순으로 정렬이 ..

SQL(MySQL) 2022.04.12

가상 테이블 : 뷰(CREATE, UPDATE, DELETE)

VIEW를 만드는 형식은 CREATE VIEW 뷰_이름 이다. CREATE VIEW 뷰_이름 AS SELECT 문; 접근은? SELECT 열_이름 FROM 뷰_이름 [WHERE 조건]; 뷰의 작동 뷰를 쓰면 보안에 도움이 됨 사용자 아이디 이름 주소만 넣고 중요한 개인정보는 넣지 않을 수 있다. USE market_db; CREATE VIEW v_member AS SELECT mem_id, mem_name, addr FROM member; SELECT * FROM v_member; -- 뷰에 WHERE문 넣어서 접근 USE market_db; CREATE VIEW v_member AS SELECT mem_id, mem_name, addr FROM member; SELECT * FROM v_member; ..

SQL(MySQL) 2022.04.12

테이블 제약조건(기본키, 외래키, 고유키)

기본 키로 지정한 것은 클러스터형 인덱스가 자동으로 생성된다를 기억하고 PRIMARY KEY 지정방법 -- 1 USE naver_db; DROP TABLE IF EXISTS buy, member; CREATE TABLE member ( mem_id CHAR(8) NOT NULL PRIMARY KEY, mem_name VARCHAR(10) NOT NULL, height TINYINT UNSIGNED NULL ); DESCRIBE member; -- 2 DROP TABLE IF EXISTS member; CREATE TABLE member ( mem_id CHAR(8) NOT NULL, mem_name VARCHAR(10) NOT NULL, height TINYINT UNSIGNED NULL, PRIMARY..

SQL(MySQL) 2022.04.11