CS 116

[혼공SQL] 혼공단 11기 - 6주차 미션 인증

우와.. 진짜 마지막 주차를 진행하게 되었네요... 뭔가 처음에는 엄청 열심히 막 화요일에 끝내버리고 이런 느낌이었는데 시간이 갈수록 마감기한에 촉박하게 제출했던 기억이 남습니다... 이번주에는 정보처리기사 필기도 응시해서 당.당.히 합격했습니다!!(정처기가 당일처리기사라고 불릴만큼 쉽다지만요...하핫) 무튼 그렇게 이런저런 연휴도 보내면서 하다보니, 뭔가 많은 양은 아니었는데, 오랫동안 미뤄뒀었네요... 파이썬과 연결하여 진행하는 실습은 개념 부분이 아니라 따로 정리하지 않았고, 그 외의 7단원은 정리한 글 공유합니다! 2024.02.05 - [CS/DB] - [혼공SQL] 스토어드 프로시저 2024.02.07 - [CS/DB] - [혼공SQL] 스토어드 함수 2024.02.07 - [CS/DB] - ..

CS/DB 2024.02.17

[혼공SQL] 트리거

트리거 트리거는 테이블에서 DML문(INSERT, UPDATE, DELETE 등)의 이벤트가 발생할 때 자동으로 작동하는 기능을 말한다. 이는 테이블에 미리 부착되어 있다. 트리거는 어떤 DB에서 데이터를 삭제할 때, 해당 데이터를 완전히 삭제하는 것이 아닌, 과거 내역을 저장하는 histroy_DB에 저장하는 등의 행동을 할 때, 사람이 직접 하게 되면 이를 놓치거나 잘못 입력하여 다르게 작동시킬 수 있다. 트리거는 한번 선언하여 테이블에 붙여둠으로써 이를 해결하고 자동화하여 편리함을 제공한다. 트리거의 사용 트리거는 아래의 SQL문과 같이 사용이 가능하다. 스토어드 프로시저와 비슷하지만 조금 다른 부분이 존재하며, 아래와 같은 형식이 쓰이니 익혀두는 것을 추천한다. DELIMITER $$ CREATE..

CS/DB 2024.02.09

[혼공SQL] 커서

커서(Cursor)란? 커서는 MySQL에서 테이블의 행을 순차적으로 접근하면서 처리하는 기능을 제공하는 것을 말한다. 마치 Java에서의 .forEach()와 같다고 보면 된다. 사실 where문으로 원하는 데이터를 조회해서 처리하는 방식으로도 대체 가능하지만, 커서의 초점은 모든 행을 돌면서 처리하는 부분에서 쓰이는 것이다. 커서의 개념 커서는 다른 SQL의 개념들과 달리 조금 복잡한 과정을 가지고 있다. 아래의 그림을 통해서 커서의 처리 과정을 도식화할 수 있을 것 같다. 커서의 사용 앞서 말했듯이 커서는 다소 복잡한 사용 방법을 가지고 있으므로 실제 커서를 사용하는 방식을 예로 들며 설명한다. member 테이블에서 mem_number열의 평균값을 구하고자 한다. 사실 이 예제는 AVG함수를 이용..

CS/DB 2024.02.07

[혼공SQL] 스토어드 함수

스토어드 함수는 MySQL에서 제공하는 내장 함수를 제외한 나만의 함수를 만들 때 사용하는 기능이다. 스토어드 함수의 선언 스토어드 함수는 다음과 같이 선언하여 사용할 수 있다. -- 스토어드 함수 선언 DELIMITER $$ CREATE FUNTION 스토어드_함수_이름(매개변수) RETURNS 반환형식 BEGIN -- 내장 함수 내용 작성 RETURN 반환값 END $$ DELIMITER ; -- 스토어드 함수 호출 SELECT 스토어드_함수_이름(); 앞서 다룬 스토어드 프로시저와 다른 점은 RETURNS를 이용해서 반환값을 설정할 수 있다는 것이다. 또한 매개변수가 들어갈 자리에는 무조건 IN 매개변수만 입력되며 IN을 작성하지 않는다. 또한 CALL로 호출하지 않고 SELECT로 호출한다. 아래..

CS/DB 2024.02.07

[혼공SQL] 스토어드 프로시저

프로시저의 생성 스토어드 프로시저는 데이터베이스의 개체 중 하나로써 SQL로 프로그래밍 기능(반복문, 조건문 등)을 제공해준다. 사용되는 완전한 형식은 복잡하므로, 자주 쓰이는 형태를 다뤄본다. DELIMITER $$ CREATE PROCEDURE 스토어드_프로시저_이름(IN 또는 OUT 매개변수) BEGIN -- SQL 프로그래밍 코드 작성 END $$ DELIMITER ; 여기서 눈여겨 보아야할 것은 DELIMTER이다. SQL의 구분자를 변경하는 키워드인데, 이를 사용하는 이유는 다음과 같다. 우리가 프로시저 생성에서 SQL 프로그래밍 코드를 작성할 때 사용하는 구분자인 세미콜론(;)은 내부 SQL 구문일 뿐이지, 실제 문장의 끝(프로시저의 끝)을 의미하지 않는다. 문장의 끝은 END 키워드와 구분..

CS/DB 2024.02.05

[혼공SQL] 혼공단 11기 - 5주차 미션 인증

벌써 5주차를 마치게 되네요... 이제 6주차를 마지막으로 혼공 11기도 마지막이라니... 뭔가 6주가 엄청 빨리 간 것 같으면서도 혼자 속으로 왜 6주동안 이정도밖에 못했지... 라는 생각을 하게되는 한 주였던 것 같습니다... 아! 저 SQLD 3월 9일에 신청했습니다! 시험이 어려운 시험은 아니라지만서도 뭔가.. 그냥 시험이라니까 걱정되는...?? 잘 해보도록 하겠습니다!! 원래는 매주 늦지 않고 글을 올렸는데, 점점 가면 갈수록 미션부터 후다닥 하고 글을 올리는 느낌이랄까요...하핫 이번 주 정리한 글 공유합니다. 아쉽게 6-3장에서 정리하고 싶은 내용이 더 많았는데, 어떻게 다뤄야할지 모르겠더라구요... (인덱스 실습 부분이요 ㅠㅠ) 그래서 이 부분은 모를 때 제 블로그가 아닌 다른 곳을 참고해..

CS/DB 2024.02.04

[혼공SQL] 인덱스 사용 SQL

인덱스를 생성하고 삭제하는 과정에서 사용하는 SQL과 인덱스를 활용한 여러가지를 알아보자. 인덱스 생성 문법 인덱스를 생성하기 위해 사용하는 주 문법은 아래와 같다. 공식 문서의 문법은 아니지만 아래와 같은 형태를 주로 사용하니 참고하자. CREATE [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름 (열_이름) [ASC | DESC]; UNIQUE는 아래의 두 가지 상황을 충족할 때 사용할 것을 권장한다. 현재 해당 열에 있는 데이터가 중복되지 않았을 때 추후 입력되는 데이터에서 해당 열의 중복 가능성이 없을 때 ASC, DESC는 인덱스를 오름차순으로 만들 것인지 내림 차순으로 만들 것인지를 결정하는 것인데 기본값이 ASC이며 DESC는 자주 사용하지 않는다. 또한 인덱스는 이름 앞에 idx_..

CS/DB 2024.02.01

[혼공SQL] 인덱스 내부 작동

인덱스는 내부적으로 균형 트리 형태로 만들어집니다. 균형트리는 자료구조 중 하나로써 범용적으로 많이 쓰이는 구조이니 알아두시면 좋습니다. 균형 트리의 개념 인덱스를 구현하는 데 사용되는 자료구조는 균형 트리입니다. 인덱스로써 쓰이는 균형 트리에 대해 조금 더 자세히 알아봅시다. 균형 트리 구조에서 데이터가 저장되는 공간을 노드라고 합니다. 아래의 그림은 노드 4개가 연결된 상태를 보여줍니다. 이러한 노드라는 용어를 MySQL에서는 페이지라고 부릅니다. 보통 페이지는 가장 작은 저장단위로도 쓰이는데 16Kbyte 정도의 크기를 갖습니다. 전체 테이블 검색 만약 균형 트리 구조를 사용하지 않는다면, 데이터를 검색하는데 어떠한 방식을 사용할까요? 아마도 전체 데이터를 검색하는 방식을 이용할 것 같습니다. 만약..

CS/DB 2024.02.01

[혼공SQL] 인덱스의 개념

인덱스의 개념 인덱스는 마치 우리가 책 뒷 부분에서 볼 수 있는 찾아보기와 같다. 개인 프로젝트와 같이 데이터의 양이 적은 상황에서는 인덱스의 효과를 체감할 수 없지만, 대량의 데이터를 다루는 곳에서는 인덱스가 필수적이다. 인덱스에는 클러스터형 인덱스와 보조 인덱스가 있다. 클러스터형 인덱스는 기본키로 지정하면 자동 생성되며 테이블에 1개만 만들 수 있다. 기본키로 지정한 열을 기준으로 자동으로 정렬되기 때문에, 효과적으로 데이터를 찾을 수 있는 것이다. 보조 인덱스는 고유 키로 지정하면 자동 생성되며 여러 개를 만들 수도 있지만 자동 정렬되지는 않는다. 인덱스의 단점 인덱스를 무작정 남용한다고 해서 좋지만은 않다. 예를 들면 SQL문으로 쓰여진 책이 있는데, 해당 책에서 SELECT문을 '찾아보기'를 ..

CS/DB 2024.01.30

[혼공SQL] 뷰

뷰 뷰란 테이블은 아니지만, 사용자가 테이블처럼 사용하는 데이터베이스의 개체 중 하나이다. 놀랍게도, 뷰의 실체는 SELECT 문이며, 뷰를 호출하는 순간 뷰에 있던 SELECT문이 호출되는 형태로 진행된다. 자세한 과정은 조금 뒤에서 다룬다. 뷰는 하나의 테이블과 연관되어 있을 때, 그러니까 JOIN을 사용하지 않았을 때 단순 뷰라고 부르며, JOIN을 사용하여 여러 테이블과 연관되어 있을 때는 복합 뷰라고 부른다. 뷰의 생성 뷰는 아래의 SQL문 형식으로 생성할 수 있다. CREATE VIEW 뷰_이름 AS SELECT 문; 실제 예시를 확인해보자. member 테이블이 존재하는데, 그 중에서 원하는 column만 뽑아와서 뷰를 만든 것이다. CREATE VIEW v_member AS SELECT m..

CS/DB 2024.01.29