SQL(16)
-
[MySQL] 데이터베이스 정규화(1차,2차,3차)
데이터베이스 정규화는 중복과 같은 불필요한 데이터를 제거할 수 있고 INSERT/UPDATE/DELETE 시 발생 가능한 문제점들을 방지할 수 있는 데이터베이스 설계를 재구성하는 테크닉입니다. 정규화를 하지 않을 시 발생하는 문제 INSERT: 새로운 데이터를 추가할 때 원하는 않는 정보가 함께 입력되거나 Null값이 입력됨 UPDATE: 값이 변경되었을 시 여러줄의 데이터를 갱신하지 않으면 데이터 불일치 발생 가능성 DELETE: 하나의 컬럼에 대한 값만 삭제해도 그 행 전체 값이 삭제되는 현상 발생 아직 정규화가 진행되지 않은 위에 테이블을 이용해 INSERT, UPDATE, DELETE시 각각 어떤 문제점이 발생하는지 알아보겠습니다. INSERT: 새로운 학생을 INSERT시 학생이 사용할 수 있는..
2021.03.16 -
[MySQL] Window 함수
Window 함수 Window 함수는 행과 행 사이의 관계를 쉽게 정의하기 위해 만든 함수입니다. Window 함수를 이용해서 순위, 합계, 평균 등을 구할 수 있습니다. Window 함수의 대표적인 종류는 다음과 같습니다. 순위 관련: RANK, DENSE_RANK, ROW_NUMBER 집계 관련: SUM, MAX, MIN, AVG, COUNT 이 외에도 다양한 종류가 존재하지만 아직 직접 사용해본적이 없어서 일단 정리하지 않았습니다. Window 함수 구조 SELECT WINDOW_FUNCTION(column1) OVER (PARTITION BY column2 ORDER BY WINDOWING OPTIONS) FROM TABLE; Window 함수의 기본 구조는 위와 같습니다. 위의 코드를 하나하나 ..
2021.03.16 -
[MySQL] 3개 이상 테이블 JOIN
최근 MySQL Workbench 를 이용해 ERD를 작성해보는 토이 프로젝트를 진행 중인데, 진행 과정 중 3개 이상의 테이블을 JOIN 해야 하는 상황을 맞아서 매우 당황 했었습니다. 구글링을 해서 찾아보니 생각보다 단순하게 해결이 가능 했습니다. 예제 테이블 생성 만든 ERD의 일부를 이용해서 3개의 테이블을 합치는 예시로 활용하려고 합니다. 우선 위 ERD에 있는 테이블 3개를 생성합니다. CREATE TABLE MEMBER_TB ( mem_id INT NOT NULL, password VARCHAR(45) NOT NULL, mem_name VARCHAR(10) NOT NULL, mem_phone VARCHAR(15) NOT NULL, mem_type VARCHAR NOT NULL, start_d..
2021.03.16 -
[MySQL] JOIN(INNER,LEFT,RIGHT,OUTER)
이번 포스트에서는 MySQL에서 가장 핵심적인 기능인 JOIN에 대해 설명하려고 한다. JOIN 기능 덕분에 MySQL을 관계형 데이터베이스(RDB)라고 할 수 있다고 생각한다. 예제 테이블 생성 JOIN 을 실습해보기 전에 실습에 사용할 예제 테이블들을 생성하였다. 평소에 축구를 좋아해서 축구 선수의 정보가 담긴 player_table과 축구팀의 정보가 담긴 team_table을 생성하여 실습에 사용하였다. # player_table CREATE TABLE player_table ( Name VARCHAR(50) NOT NULL, Team VARCHAR(100) NOT NULL, Appearances INT NULL, Rating INT NULL, Goals INT NULL, Assists INT NU..
2021.03.16 -
[MySQL] 서브쿼리(Subquery)
이번 포스트에서는 MySQL에서 종종 유용하게 쓰이는 서브쿼리에 대해 정리 했습니다. 서브쿼리(Subquery)란? 서브쿼리는 하나의 쿼리 안에 포함되어 있는 또 다른 쿼리를 뜻합니다. 서브쿼리에서는 메인쿼리의 컬럼을 사용 가능하지만, 메인쿼리에서는 서브쿼리의 컬럼을 사용할 수 없습니다. 쿼리를 여러번 수행해 결과를 얻어야 하는 경우 서브쿼리를 사용하면 하나의 중첩된 쿼리문으로 작성할 수 있게 됩니다. 서브쿼리의 종류 WHERE절에 사용하는 Nested Subquery FROM절에 사용하는 Inline View SELECT절에 사용하는 Scalar Subquery 서브쿼리 사용시 주의할 점 서브쿼리는 괄호()안에 작성하여야 한다. SELECT문으로만 작성할 수 있다. 괄호()가 끝난 뒤에 세미콜론(;)을..
2021.03.16 -
MySQL 기본문법 정리(2)
이전 포스트에 이어 프로그래머스 SQL 고득점 Kit문제들을 풀면서 사용한 MySQL 문법 위주로 정리 했습니다. 5. LIMIT # 출력 결과 행을 3으로 제한 SELECT col_1 FROM table_name WHERE 조건1 ORDER BY col_1 LIMIT 3; # 출력 행을 제한함과 동시에 시작점도 지정 SELECT col_1 FROM table_name WHERE 조건1 ORDER BY col_1 LIMIT 3 OFFSET 3; # 이 경우 4번째 행부터 3개의 행이 출력 LIMIT 를 이용해 출력할 행의 수를 제한할 수 있고 OFFSET N (N은 상수)을 이용하여 시작점을 N+1행으로 지정할 수 있습니다. 6. CASE SELECT col_1, CASE WHEN 조건1 THEN '반환..
2021.03.16