반응형

인프런 220

Part 5-3-2. SQL 튜닝 : 복합 인덱스, 조회/SPLIT/가공 테스트

🌞 SQL 튜닝  지난 시간에는 인덱스 분석을 통해 인덱스를 생성하고, 생성한 인덱스의 값과 인덱스 내부에 테이블 값에 대해서 알아보았다. 이번 시간에는 복합 인덱스를 통해 여러 칼럼을 동시에 인덱스를 걸어서 조회해보고, 여러 칼럼을 동시에 조회했을 때 특정 칼럼만 조회할 경우 어떤일이 발생하는지 등에 대해 알아보는 시간을 가져보도록 하자. 😋  단, 이번 시간에서도 저번 시간과 마찬가지로 BaseballData 데이터베이스를 사용하는 것이 아닌, Northwind 데이터베이스를 사용할 것이다. 😎    🔶 복합 인덱스  복합 인덱스라고 하니 조금 어려워보이지만 사실 복합 인덱스는 인덱스를 걸 때 여러 컬럼을 동시에 인덱스를 걸어버리는 것이 복합 인덱스이다. 늘 그렇듯이 말로 설명하면 어려우니 예..

Part 5-3-1. SQL 튜닝 : 인덱스 분석, RID

🌞 SQL 튜닝  지난 시간에는 윈도우 함수를 통해 순위를 매기는 방법, 첫 값과 마지막 값, 이전 값과 다음 값등 다양한 윈도우 함수에 대해서 알아보았다. 이번 시간에는 인덱스 분석을 통해 인덱스를 생성하고 생성한 인덱스의 값에 대해서 알아보는 시간을 가져보도록 하자. 🧐  🍄 Northwind Database  이번 시간부터는 기존부터 사용하던 BaseballData 데이터베이스를 사용하는 것이 아닌, Northwind 데이터베이스를 사용할 것이다. 해당 데이터베이스는 설정과 관련된 정보는 아래 링크를 참조한다. https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/northwind-pubs sql-server..

Part 5-2-19. SQL 입문 : 윈도우 함수, OVER/ROW_NUMBER/RANK/DENSE_RANK

💅 SQL 입문  지난 시간에는 변수와 흐름제어를 통해 SQL에서 변수 선언 및 배치, 흐름 제어를 하는 방법에 대해서 알아보았다. 이번 시간에서는 윈도우 함수를 통해 보다 다른 방식의 GROUPING을 이용하는 방법에 대해서 알아보는 시간을 가지자. 😊  🚲 윈도우 함수  윈도우 함수란 무엇일까? 이름이 윈도우 함수라서 윈도우 운영체제에서만 돌아간다고 착각할 수 있지만, 그런 것은 아니다. 한 줄로 요약하자면 행들의 서브 집합을 대상으로, 각 행별로 계산을 해서 스칼라(단일 고정) 값을 출력하는 함수이다. 설명이 조금 어렵지만, 느낌상 그룹핑과 유사하다는 것을 느낄 수 있다.   그룹핑은 어떤 집합은 아니지만, 여러 기준을 대상으로 데이터를 보기 좋게 확인한 다음 단일 고정값을 추출했다. SUM,..

Part 5-2-18. SQL 입문 : 변수와 흐름 제어, 배치/테이블 변수

💅 SQL 입문  지난 시간에는 TRANSACTION과 COMMIT, ROLLBACK을 통해 TRANSACTION의 개념과 COMMIT, ROLLBACK의 개념에 대해서 알아보았다. 이번 시간에서는 SQL에서의 변수의 선언부터 시작해서, 배치(batch), 흐름 제어(if~else)를 통한 흐름 제어를 통해 상황에 따라 유동적으로 코드를 처리하는 방법에 대해서 알아보는 시간을 가지자. 😎  🍩 변수 선언 C#, C++에서 변수 선언은 어떻게 할까? 아주 간단하다. int x;와 같이 선언하여 사용할 수 있다. SQL에서도 이와 마찬가지로 선언할 수 있다. 다만 SQL에서는 DECLARE*라는 키워드를 사용하여 변수를 선언한다. 변수의 선언 방법은 아래 예제를 참고한다.* DECLARE의 뜻은 '선언..

Part 5-2-17. SQL 입문 : TRANSACTION, COMMIT/ROLLBACK

💅 SQL 입문  지난 시간에는 JOIN을 통해 복수의 테이블에서 공통 열을 통해 테이블 정보를 살펴보는 내용에 대해서 알아보았다. 이번 시간에서는 TRANSACTION과 COMMIT, ROLLBACK 등 개념을 통해 테이터 처리 및 취소 여부에 대해 알아보는 시간을 가지자.   📨 TRANSACTION 트랜잭션이란 무엇일까? 검색해보니 '더 이상 쪼갤 수 없는 업무 처리의 최소 단위이다.'라고 나와 있다. 개념적으로 학습하기에는 쉽게 이해가 되지 않으므로 예시를 통해 알아보자.  예를 들어, A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다. 그러나 A는 돈을 지불했으나 B는 돈을 받지 못했다면 ..

Part 5-2-16. SQL 입문 : JOIN, CROSS/INNER/LEFT/RIGHT JOIN

💅 SQL 입문  지난 시간에는 UNION을 통해 복수의 테이블을 다루는 내용에 대해서 알아보았다. 이번 시간에서는 INDEX와 같이 정말 너무나도 중요한 JOIN에 대해서 알아보는 시간을 가진다.  ❌ JOIN 우리가 배우고 있는 RDBMS에서는 1~6 정규화를 통해 테이블을 적절히 나누어서 관리한다. 따라서 나누어서 관리하는 이러한 테이블들을 합치기 위해서는 JOIN 연산을 통해 이를 처리한다. JOIN 연산에는 크게 다음과 같은 종류가 있다. CROSS JOININNER JOINOUTER JOIN (LEFT/RIGHT)  ❌ CROSS JOIN CROSS JOIN이라고 명칭하는 걸 보니 무엇인가를 '교차' 시키는 느낌을 받을 수 있다. 저번에 생성했던 GameDB를 이용하여 다음과 같은 테이블과 ..

Part 5-2-15. SQL 입문 : UNION, INTERSECT, EXCEPT

💅 SQL 입문 지난 시간에는 정말 너무나도 중요하고 중요한 INDEX의 개념과 INDEX의 종류 등에 대해서 알아보았다. 이번 시간에는 UNION, INTERSECT, EXCEPT 개념을 통해 복수의 테이블을 다루는 개념에 대해서 알아보는 시간을 가진다. ➕ UNION 커리어 평균 연봉이 3백만달러 이상인 선수들의 ID와 평균을 출력해보자. 각 선수들의 평균 연봉이어야 하므로, AVG, Group By와 Having 등을 이용하여 출력할 수 있다. SELECT playerID, AVG(salary) FROM salaries Group BY playerID HAVING AVG(salary) >= 3000000; 이번엔 간단하게 12월에 태어난 선수들의 ID를 출력해보자. SELECT playerID, b..

Part 5-2-14. SQL 입문 : INDEX

💅 SQL 입문 지난 시간에는 정규화를 통해 데이터베이스 내 중복된 데이터를 분리하여 관리하는 방법에 대해서 알아보았다. 이번 시간에는 INDEX(=색인) 이라는 개념을 통해 데이터베이스 내 엄청나게 많은 데이터속에서 보다 빠르게 조회하는 방법과 인덱스의 종류인 클러스터, 논 클러스터형에 대해서 알아보는 시간을 가진다. 📖 INDEX 인덱스는 중요도를 평가할 수 없을 정도로 데이터베이스에서 매우 중요한 개념이다. 애시당초 인덱스를 이해 못한다고 하면 데이터베이스 자체를 사용하는게 큰 의미가 없을 정도로 인덱스는 굉장히 중요하다. 이러한 중요성 덕분에 데이터베이스 관련 면접을 본다고하면 0번째 질문이 인덱스에 관한 내용일 정도로 인덱스는 매우 중요하다. 위키백과에 따르면 인덱스(영어: index)는 데이터..

Part 5-2-13. SQL 입문 : 정규화

💅 SQL 입문 지난 시간에는 새로운 데이터베이스를 직접 만들어보고, 열도 생성하며 데이터를 삽입하고, 수정하고, 삭제하는 것과 제약(CONSTRAINT)에 대해서 알아보았다. 이번 시간에는 정규화라는 개념을 통해 데이터베이스 내 중복된 데이터를 분리하며 설계하는 방법에 대해서 알아보는 시간을 가진다. ➗ 정규화 정규화는 테이블을 올바르게 올바르게 변경하고 분할하기 위해서 존재한 개념이다. 사실 SQL 챕터는 정보처리기사 자격증을 준비하면서 학습했던 내용이라 강의를 듣는데 큰 어려움이 없다. 자격증 내에서 정규화는 크게 1~6 정규화까지 존재하는데 강의에서는 모든 정규화 유형에 대해서 굳이 외울 필요는 없고, 나중에 데이터베이스 설계시 저절로 알게 된다고 말씀해주셨다. 예를 들어 임의의 데이터베이스가 위..

Part 5-2-12. SQL 입문 : 데이터베이스 작성

💅 SQL 입문 지난 시간에는 SUBQUERY를 통해 "하나의 SQL문에 또 다른 SQL문"을 작성하여 보다 편리하게 데이터를 조회하는 방법에 대해서 알아보았다. 이번 시간에는 데이터베이스를 새롭게 만들어보며 데이터를 추가, 삭제, 수정하는 등 데이터베이스를 작성하는 시간을 가져본다. 🎀 DataBase 지금까지는 기존에 존재하던 BaseBall 데이터에 쿼리를 실행하였다면, 이번에는 우리가 직접 데이터베이스를 작성하는 시간을 가져보자. 우리는 MMORPG 게임을 개발할 예정이니 게임과 관련덴 데이터베이스를 새롭게 만들어보자. 이러한 데이터베이스를 '스키마'라고 부르기도하니 참고하도록 하자. 🎀 CREATE 데이터베이스를 만드는 행위는 아주 간단하다. 다음과 같은 형식을 띈다. CREATE DATABAS..

Part 5-2-11. SQL 입문 : SUBQUERY

💅 SQL 입문 지난 시간에는 INSERT, DELETE, UPDATE를 통해 데이터를 검색뿐만 아니라, 추가, 삭제, 수정에 대해서 알아보았다. 이번 시간에는 SUBQUERY라는 개념에 대해서 학습하고 어떠한 상황에서 무슨 목적으로 사용하는지 알아보는 시간을 가져보도록 한다. ⛷️ SUBQUERY(서브쿼리, 하위쿼리) 서브쿼리를 한 줄로 요약한다면 "하나의 SQL문에 포함되어 있는 또 다른 SQL문"을 뜻한다. 정의로만 설명을 들으면 무슨 말인지 어렵기때문에 간단한 예시를 통해 서브쿼리에 대해서 알아가보도록 하자. ⛷️ WHERE 절에서의 SUBQUERY 활용 간단한 예를 들어보자. "연봉이 역대급으로 가장 높은 선수의 정보"를 출력한다고 가정하자. 지금까지 학습한 내용을 토대로 해당 선수의 정보를 출..

Part 5-2-10. SQL 입문 : INSERT, DELETE, UPDATE

💅 SQL 입문 지난 시간에는 그룹화(GROUP BY)를 통해 데이터를 새롭게 검색하는 방법에 대해서 알아보았다. 또한 GROUP BY를 사용할 때에는 HAVNING 이라는 키워드까지 함께 사용하여 WHERE 절과 동일한 느낌으로 조건을 추가하는 것 까지 알 수 있었다. 이번 시간에는 SELECT가 아닌 INSERT, DELETE, UPDATE를 통해 검색뿐만 아니라, 데이터 추가, 수정, 삭제에 대해서 알아보는 시간을 가져보도록 한다. 🐲 테이블 변경 기존에 사용하던 Players 테이블이 아닌 salaries 테이블을 이용하여 실습을 진행할 것이다. salaries 테이블 정보 salaries 테이블 정보는 크게 yearID(연도), teamID(팀 ID), lgID(리그 ID), playerID(선..

Part 5-2-9. SQL 입문 : GROUP BY

💅 SQL 입문 지난 시간에는 이전까지 알아본 내용을 토대로 간단한 연습 문제를 풀어보았다. 오늘은 새로운 명령어인 GROUP BY에 대해서 알아보는 시간을 가져보도록 한다. 👻 GROUP BY GROUP BY는 컬럼을 그룹화 할 때 사용한다. 예를 들어 2004년도 보스턴 팀 소속으로 출전한 선수들의 타격 정보는 알아보고 싶다면 다음과 같이 작성하면 될 것이다. SELECT * FROM batting WHERE yearID = 2004 AND teamID = 'BOS' 그렇다면 만약 2004년도에 가장 많은 홈런을 날린 팀이 어딘지 알고 싶다면 어떻게 해야할까? 지금까지는 위와 같이 WHERE 절에 teamID등을 명시하여 작성했지만, 이젠 명시를 할 수 없으니 참 곤란하다. 어떻게 처리해야 할 지 과..

Part 5-2-8. SQL 입문 : 연습문제

💅 SQL 입문 지난 시간에는 집계 함수(COUNT, SUM, MIN, MAX 등)를 이용하여 데이터베이스에서 내가 필요한 정보만 추출하는 방법에 대해서 알아보았다. 오늘은 이전까지 알아본 내용을 토대로 간단한 연습 문제를 풀어볼 것이다. 😈 테이블 변경 이번 시간에서는 연습 문제를 풀어볼 것이지만, 기존에 사용하던 players 테이블이 아닌 batting 테이블을 이용하여 문제를 풀이할 것이다. 문제를 풀기 전, 테이블의 사전정보를 살펴보면 다음과 같다. batting 테이블 정보 playerID(플레이어id), yearID(시즌 년도), teamID(팀 명칭), G_batting(출전경기+타석) AB(타수), H(안타), R(출루), 2B(2루타), 3B(3루타), HR(홈런), BB(볼넷) 다음은..

Part 5-2-7. SQL 입문 : 집계함수 (COUNT, SUM, AVG, MAX, MIN, DISTINCT)

💅 SQL 입문 지난 시간에는 CASE를 이용하여 C#에서 사용하는 것과 같이 if-else if-else를 이용하여 처리하는 법, 비교를 이용하여 처리하는 방법 등 관련된 다양한 내용에 대해서 알아보았다. 오늘은 집계함수에 대해서 학습해 볼 것이다. 🧮 COUNT 행의 개수를 세는 집계 함수이다. SELECT COUNT(*) --모든 행의 개수 FROM Players; *은 모든 행의 개수를 뜻한다. 이렇게 *을 파라미터로 받을 수 있는 집계 함수는 COUNT가 유일하다. SELECT COUNT(birthYear) --null 은 제외하고 카운팅 FROM Players; COUNT를 비롯한 집계 함수들은 기본적으로 null 값은 제외하고 값을 카운팅 다. 즉, 위 코드는 null 값을 가진 birthY..

Part 5-2-6. SQL 입문 : CASE

💅 SQL 입문 지난 시간에는 DATETIME을 이용하여 시간, 시간 연산, 시간 범위 등 시간과 관련된 다양한 내용에 대해서 알아보았다. 오늘은 CASE문에 대해서 학습해 볼 것이다. 🧑‍⚖️ 첫 번째 방법 C#에서 사용하는 switch-case문과 같은 방법이다. SELECT birthMonth, CASE birthMonth -- 여기서부터 WHEN 1 THEN N'겨울' WHEN 2 THEN N'겨울' WHEN 3 THEN N'봄' WHEN 4 THEN N'봄' WHEN 5 THEN N'봄' WHEN 6 THEN N'여름' WHEN 7 THEN N'여름' WHEN 8 THEN N'여름' WHEN 9 THEN N'가을' WHEN 10 THEN N'가을' WHEN 11 THEN N'가을' WHEN 12..

Part 5-2-5. SQL 입문 : DATETIME

💅 SQL 입문 지난 시간에는 수치(사칙연산)와 문자열에 대해서 알아보았다. 오늘은 수치를 날짜에 대해서 학습해 볼 것이다. 현재 시간, 시간 연산, 시간 범위 등 시간과 관련된 다양한 자료를 학습하고 알아보도록 한다. 📅 날짜 데이터 타입 시간은 '2024년 02월 05일'와 같이 문자열 타입으로 데이터를 관리할 수 있지만, 문자열 타입으로 데이터를 관리한다면 시간끼리의 연산이 필요할 경우 이를 계산하기가 까다로울 것이다. 따라서 SQL에서는 날짜에 관련된 전용 데이터 타입을 지원하니 이를 사용하도록 하자. 날짜 및 시간과 관련된 데이터 타입 1️⃣ date (연/월/일) 2️⃣ time (시/분/초) 3️⃣ datetime (연/월/일/시/분/초) 📅 시간 출력 SELECT CAST('20210418..

Part 5-2-4. SQL 입문 : 수치와 문자열

💅 SQL 입문 지난 시간에는 ORDER BY와 TOP, OFFSET에 대해서 알아보았다. 오늘은 수치를 표현하는 방법과 문자열에 학습하고, 문자열 관련 함수등을 알아보도록 한다. 🛺 수치 단순 특정 열들을 가진 행을 조회하는 것이 아닌, 연산된 결과를 SELECT하면 해당 값이 ‘열 없이’ 출력할 수 있다. 대신 여기서도 AS를 사용하면 열의 이름을 붙여줄 수 있다. SELECT 2021 - birthYear + 1 AS koreanAge FROM players WHERE deathYear IS NULL AND birthYear IS NOT NULL AND koreanAge

Part 5-2-3. SQL 입문 : ORDER BY, TOP, OFFSET

💅 SQL 입문 지난 시간에는 SELECT와 FROM, WHERE에 대해서 알아보았다. 오늘은 추가적으로 오름차순, 내림차순, 상위 N개 등 다양한 정렬에 대해서 알아보도록 한다. 🤳 ORDER BY : 정렬 ✝️ ASC : 오름차순 정렬 SELECT nameFirst, birthYear FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear; SELECT nameFirst, birthYear FROM players WHERE birthYear IS NOT NULL ORDER BY birthYear ASC; ORDER BY의 순서는 WHERE 다음에 작성되며. 오름차순 ASC의 값이 디폴트 값을 가진다. 또한 생략할 경우 자동으로 오름차순 정렬로 진행된..

Part 5-2-2. SQL 입문 : SELECT FROM WHERE

💅 SQL 입문 지난 시간에는 SSMS 프로그램의 형태와 필수 명령어, 테이블 추가, 주석 등의 사용법을 간략하게 알아보았다. 오늘은 SSMS를 통해 실질적으로 데이터베이스에 질의를 남기고, 결과를 살펴보는 시간을 가져본다. 🤶 SQL 쿼리 (= SQL문) * 쿼리를 작성한 후 실행 버튼을 누르면 된다. (F5) * SQL문은 소문자로 써도 상관없다. 즉 대소문자 상관이 없다. → 그렇지만, 예약어를 대문자로 쓰고 나머지를 소문자로 쓰는게 가독성이 좋다! * SQL 문장 하나가 끝나면 세미콜론을 붙여준다. → SQL문이 한 문장 밖에 없으면 세미콜론 생략해도 됨 * 전체 쿼리문의 일부분인 특정 SQL 문을 드래그 하고 실행하면 전체 쿼리문이 아닌, 드래그한 해당 쿼리문만 실행된다! 🐑 SELECT : 조..

반응형