SQL 11

SQL (11) - 정규화

이번 포스트에서는 정규화가 무엇인지 알아보겠습니다. 1) 정규화란?정규화는 데이터 테이블을 올바르게 변경하고 분할하는 것을 의미합니다.조금 더 자세히 얘기하자면, 데이터베이스 테이블을 여러 테이블로 나누어 분할하고나눠진 테이블 간의 상관관계를 정의하여 데이터를 더 효율적으로 저장하고 관리하는 방법입니다. 2) 정규화의 처리과정정규화는 크게 다음의 과정을 거쳐 처리됩니다.1NF(제 1 정규화)2NF(제 2 정규화)3NF(제 3 정규화)BCNF(BCNF 정규화)4NF(제 4 정규화)5NF(제 5 정규화)하지만 일반적으로 제 3정규화까지만 수행하는 것이 보통의 수순입니다.이제 각각의 정규화가 어떻게 처리되는지 예시를 통해 알아보겠습니다.처리하고자 하는 예시의 데이터 테이블은 다음과 같습니다. 3) 제 1 정규..

데이터베이스 2025.02.12

SQL (10) - DDL

이번 포스트에서는 데이터베이스를 정의하는데 필요한 데이터 정의어(DDL)에 대해 알아보겠습니다.데이터 정의어 DDL에는 CREATE / ALTER / DROP의 3가지 함수가 있는데,각각 데이터 테이블을 생성 / 수정 / 삭제의 용도로 사용합니다. 1) 데이터 베이스 생성우선, 실습에 사용할 데이터 베이스를 만드는 것으로 시작하겠습니다.-- 데이터 베이스(=스키마) 생성CREATE DATABASE GameDB;-- 생성한 데이터 베이스에 대한 작업 수행을 명시USE GameDB; 위 쿼리의 실행 결과는 다음과 같습니다. 위와 같이 GameDB라는 이름의 데이터 베이스가 생성되었습니다. 2) CREATE : 데이터 테이블 생성데이터 테이블을 생성하는 CREATE의 경우, 다음의 형식으로 사용합니다. CRE..

데이터베이스 2025.02.12

SQL (9) - SUBQUERY

이번 포스트에서는 쿼리문에 사용가능한 SUBQUERY 또는 하위 쿼리에 대해 알아보겠습니다.하위 쿼리를 사용하게 되면 쿼리문의 로직을 유연하게 만들 수 있는 장점이 있습니다. 1) 일반 쿼리 VS 하위 쿼리-- 연봉이 높은 선수의 정보를 가져오고,SELECT TOP 1 *FROM salariesORDER BY salary DESC;-- 출력된 정보에서 선수 ID를 통해 데이터를 골라옴SELECT *FROM playersWHERE playerID = 'rodrial01' 위의 쿼리문은 두 개의 단계를 거쳐 진행됩니다.우선, 연봉이 제일 높은 선수의 정보를 가져오고 가져온 선수의 ID를 통해 데이터를 가져옵니다.실행 결과는 다음과 같습니다. 이때, 하위 쿼리를 사용하게 되면 위의 2가지 절차를 하나의 절차로..

데이터베이스 2025.02.12

SQL (8) - 데이터 조작어(DML)

이번 포스트에서는 SQL에서 데이터 조작어에 해당하는 SELECT 외에도INSERT / DELETE / UPDATE에 대해 알아보겠습니다. 1) 데이터 테이블에 데이터를 추가 : INSERT데이터 테이블에 새로운 데이터를 추가하는 INSERT입니다.사용방법은 다음과 같습니다. INSERT INTO 테이블명 VALUES (값, ...) 위의 사용방법을 토대로 쿼리문을 하나 만들어보았습니다.salaries 테이블에 새로운 데이터를 추가합니다.INSERT INTO salariesVALUES (2024, 'KOR', 'NL', 'Park', 9000000); 쿼리 실행결과는 다음과 같습니다. 데이터를 추가하는 경우, 데이터가 비어있는 경우 에러를 발생시킵니다.playerID를 설정하지 않은 쿼리문입니다.-- 데..

데이터베이스 2025.02.11

SQL (7) - GROUP BY

이번에는 데이터를 하나의 특정한 그룹으로 묶어주는 SQL의 GROUP BY 연산자를 알아보겠습니다.GROUP BY를 사용하는 경우 조심해야 하는 것은SELECT 문에 반드시 GROUP BY의 인자로 넣어준 속성을 사용해야 하는 것입니다.GROUP BY는 인자로 넣어준 속성에 해당하는 데이터를 동일한 하나의 그룹으로 묶어주는 연산자이므로SELECT 연산자와 GROUP BY 연산자는 동일한 인자를 가져야 합니다. 1) 일반적인 GROUP BY 사용-- 2004년도의 타율 데이터에서 teamID 별로 그룹을 만들어 teamID를 가져옴-- 데이터를 특정한 그룹으로 묶어서 분석하기 위해 사용하는 GROUP BY 함수SELECT teamIDFROM battingWHERE yearID = 2004GROUP BY t..

데이터베이스 2025.02.11

SQL (6) - 집계 함수

이번 포스트에서는 SQL에서 속성의 데이터들을 집계하는 집계 함수들에 대해 알아보겠습니다. 1) COUNT 연산자COUNT 연산자는 데이터의 개수를 집계하는 함수입니다.다음과 같이 사용할 수 있습니다. -- COUNT 연산자는 * 를 사용할 수 있는 유일한 연산자SELECT COUNT(*)FROM players;-- 특정 속성을 대상으로 집계를 수행함, 이때 null은 자동으로 무시됨SELECT COUNT(birthYear)FROM players; 첫 번째 쿼리의 실행 결과는 다음과 같습니다. 두 번째 쿼리의 실행 결과는 다음과 같습니다. 위의 2가지 방법 말고도 중복을 배제하여 집계하는 방식도 있습니다. 1 - 1) DISTINCT : 중복을 배제DISTINCT는 SELECT 연산자와 같이 사용되어 중..

데이터베이스 2025.02.10

SQL (5) - CASE

이번 포스트에서는 다른 언어의 Switch - Case와 비슷한 SQL의 CASE 함수에 대해 알아보겠습니다. 1) 사용법일반적인 Switch - Case의 문법은 다음과 같이 작성합니다.swtich(대상) case 조건1: 로직 break; case 조건2: 로직 break; default: 로직 break; 기본적인 로직은 대상에 한해서 case의 조건에 맞다면 해당하는 case의 로직을 수행하고모든 case의 조건에 맞지 않는 대상은 default의 로직을 수행하게 되어 있습니다. 이제 SQL에서의 CASE 함수의 문법을 살펴보겠습니다.SELECT *, CASE 대상 WHEN 조건 THEN 로직 ELSE 로직 END AS 속성이름FROM..

데이터베이스 2025.02.05

SQL (4) - DATETIME

이번 포스트에서는 SQL에서 시간을 나타내는 자료형인 DATETIME에 대해 알아보겠습니다. 1) 시간 자료형에 대해 간단하게 알아보기시간의 경우 매우 정밀하게 동작해야 하므로 기존의 자료형을 사용하기보다는새로운 자료형을 만들어 사용하는 것이 훨씬 더 효율적입니다.SQL에서 사용가능한 시간자료형을 간단하게 알아보면 다음과 같습니다.DATE : 연/월/일TIME : 시/분/초DATETIME : 연/월/일/시/분/초또한 시간 자료형을 사용하는 경우,일정한 형식을 통해 시간의 변환이 이뤄지기 때문에 일정한 형식을 만들어 사용해야 합니다.사용가능한 형식은 다음과 같습니다.YYYY/MM/DDYYYYMMDD hh:mm:ss.nnn 2) 문자열 자료형을 시간 자료형으로 변환하기-- 문자열 자료형을 시간 자료형으로 변..

데이터베이스 2025.02.05

SQL (3) - 산술연산과 문자열

이번 포스트에서는 SQL에서 산술 연산을 어떻게 수행하고 또 문자열은 어떻게 다루는지 알아보겠습니다. 1) 산술연산-- SQL에서의 산술 연산, 산술 연산간 우선순위는 기존의 연산자와 같다-- + - * /(몫) %(나머지) -- 한국 나이를 가져오고 해당 한국 나이가 80 이하인 경우만 오름차순 정렬SELECT 2025 - birthYear AS KoreanAgeFROM playersWHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2025 - birthYear)  SQL에서도 마찬가지로 사칙연산을 수행하는 연산자들간의 우선순위가 존재합니다.이런 우선순위를 주의하며 사용할 필요가 있습니다. 첫 번째 쿼리의 경우 이전에 사용하던 데이터 테이블에서산술 연산을..

데이터베이스 2025.02.04

SQL (2) - ORDER BY문

이번 포스트에서는 정렬을 수행하는 ORDER BY 구문에 대해 알아보겠습니다. 1) 기본적인 ORDER BY-- NULL을 생략하지 않는 ORDER BYSELECT *FROM playersORDER BY birthYear;-- 기본적으로 오름차순으로 정렬함SELECT *FROM players WHERE birthYear IS NOT NULLORDER BY birthYear;-- 내림차순으로 정렬SELECT *FROM players WHERE birthYear IS NOT NULLORDER BY birthYear DESC; ORDER BY 구문은 위와 같이 사용할 수 있습니다.기본적으로 오름차순으로 동작하면서 이를 명시하고 싶다면 ASC를 작성해주고,내림차순으로 동작하고 싶다면 DESC를 작성해주면 됩니다..

데이터베이스 2025.02.04