본문 바로가기

Database(DB)

(8)
SQL 쿼리 합치기: UNION과 치명적인 CROSS JOIN의 모든 것 SQL은 데이터를 저장하고 조회하는 언어이지만, 때로는 두 개 이상의 테이블이나 쿼리 결과를 합쳐서 새로운 시각으로 분석해야 합니다. 데이터를 합치는 방식은 크게 두 가지, 즉 수직으로 합치는 방식(집합 연산)과 모든 경우의 수를 조합하는 방식(무조건적 조인)으로 나뉩니다. 이 글에서는 SQL에서 가장 근본적이며, 때로는 치명적인 실수를 유발할 수 있는 다음 네 가지 결합 방식에 대해 깊이 있게 알아보겠습니다.1. 수직 결합 (Set Operations): 행을 합치는 방법 집합 연산(Set Operations)은 두 개의 독립적인 SELECT 쿼리 결과를 마치 하나의 긴 목록처럼 세로로 합치는 연산입니다.이 연산을 사용하려면 합치려는 두 쿼리의 컬럼 개수와 데이터 타입이 정확히 일치해야 합니다.1-1...
[MySQL] Error Code: 1366. Incorrect string value 문제 해결 갑자기 insert 문을 실행하는데 Error Code: 1366. Incorrect string value: 관련 에러가 발생하면서 insert가 되지 않았다. 정말 별 것 아닌 문제인데 왜 그런지 문제를 파악하는데 조금 시간을 할애하였다. 원인은 바로 인코딩 불일치 문제였다. insert문에 한글 데이터를 추가하려고 했는데 데이터베이스에서 한글을 저장할 수 없는 문자 인코딩(character set)을 사용하고 있었기 때문이다. 테이블을 생성할 때 latin1로 생성이 되었는데 이거는 스키마 기본 설정을 따라가게 마련이다. 일단 해당 테이블의 CharSet 및 Collation을 utf8mb4로 바꾸어주었다. utf8도 있고 utf8mb4도 있는데 이 둘의 차이는 utf8mb4는 이모지도 사용..
데이터베이스 정규화란? (1NF, 2NF, 3NF, BCNF 정리) 데이터베이스 정규화란 무엇이고 왜 하는 것일까? 데이터베이스를 설계하고 다루는 과정에서 정규화 과정을 제대로 거치지 않는다면 성능 문제 뿐만 아니라 데이터 불일치, 개발 및 유지보수의 어려움을 겪을 수도 있다. 정규화는 데이터 삽입, 수정, 삭제 시 발생할 수 있는 문제 예방, 불필요한 데이터 중복으로 인한 공간 방지 등 데이터를 효율적으로 저장하고 관리하기 위해서 테이블을 구조화하는 작업이라고 할 수 있다. 정규화도 여러 단계로 나누어져 있는데 1차~3차까지 또는 1차~4차(BCNF) 정도까지 많이 사용되고 5차 단계는 대규모 시스템 설계에 사용되고 일반적인 경우에는 잘 사용되지 않는다고 한다. 먼저 1차 정규화를 알아보자. 1차 정규화는 간단하다. 테이블의 모든 속성이 원자값(Atomic Value..
[ERD] 식별 관계와 비식별 관계 SQLD 시험 공부를 하거나 ERD(Entity Relationship Diagram)을 그리다 보면 식별과 비식별의 차이에 대해서 헷갈려하는 경우가 생긴다. 식별 관계는 실선, 비식별 관계는 점선으로 나타내는데 뭐가 다른지 쉽게 이해해보자. 우선 핵심만 말하자면 부모 테이블에 있는 PRIMARY KEY가 자식 테이블의 PRIMARY KEY로 포함되는지 여부로 식별과 비식별로 나뉜다. 즉, 자식 테이블이 독립적으로 유일성을 가질 수 있으면 비식별 관계이고 자식 테이블이 부모 키 없이는 유일성을 가질 수 없어서 부모 테이블에 있는 PRIMARY KEY를 자식 테이블 PRIMARY KEY에 추가해야 한다면 그것은 식별 관계이다. 이렇게 말하면 이해하기 어려울 수 있으니 직접 예시를 보자. 식별 예시 아래..
[SQL/SQLD] 그룹함수 ROLLUP (GROUP BY ROLLUP) 그룹 함수에는 그룹 별로 해당 그룹에 대해 개수, 합, 평균, 최대값, 최소값 등을 구하는 집계 함수 외에도 ROLL UP, CUBE, GROUPING SETS, GROUPING 등의 그룹함수가 있습니다(OracleSQL 기준) . 위의 ROLL UP, CUBE, GROUPING SETS, GROUPING과 같은 그룹 함수들은 SELECT ~ GROUP BY 쿼리를 이용해서 조회한 데이터에서는 각 컬럼에 있는 속성별 데이터의 합계를 구할 수 없기에 위와 같은 그룹 함수들을 사용하면 원하는 속성별 데이터 총계를 뽑아낼 수 있기에 사용하는 함수들입니다. 예를 들어서 아래와 같이 이름(NAME), 학년(GRADE), 반(CLASS)을 속성으로 가지는 Student 테이블을 만들었습니다.      여기서 각 학..
postgreSQL 설치 및 pgAdmin 설치하기(Windows) 관계형 데이터베이스 관리 시스템 중 하나인 PostgreSQL을 설치해보겠습니다. PostgreSQL은 MySQL, MSSQL Server, Oracle Database 등 많이 사용되는 DBMS 중 하나입니다. 개인적으로 설치도 쉽고 이용하기에도 편리하다고 생각합니다. 우선 PostgreSQL을 검색하면 광고를 제외하고 보이는 PostgreSQL 사이트가 있습니다. 클릭해서 접속합니다.  Download 버튼 또는 위에 탭에 있는 Download를 클릭합니다.  자신의 운영체제에 맞는 것을 클릭해서 설치해주시면 됩니다. 아래에 Linux, macOS, Windows 등 선택할 수 있는 버튼이 보입니다.  세부적인 버전을 선택할 수 있는 화면으로 넘어가는데 운영체제에 맞는 버전을 선택할 수 있습니다.  ..
Oracle sqlplus 계정 생성하기 및 권한 부여 지난 시간에 Oracle DB(Express)를 설치하였는데요, 이번에는 사용자 계정을 만들어 봅시다. 먼저 윈도우 키를 누르고 cmd(명령 프롬프트)를 실행시킨 후에 터미널 창에서 sqlplus를 입력한 후에 엔터를 눌러서 실행시켜 줍니다. 이전에 Oracle을 제대로 설치했다면 아래와 같이 Version도 잘 나오고 '사용자명 입력:' 이라는 문구가 나올 것입니다.  사용자를 생성하기 위해서는 관리자 권한으로 접속하여야 합니다. 관리자 권한으로 접속하기 위해서는 사용자명을 입력하는 곳 옆에 sys AS SYSDBA라고 입력해주시고 엔터를 치시면 됩니다. 그 다음 비밀번호를 입력하지 않고 엔터를 다시 치시면 됩니다.  위와 같이 관리자 권한으로 접속을 하였다면 새로운 계정을 만들어 보겠습니다. 사용자를..
Oracle DB(Express) 21c 설치하기 오늘은 DBMS(Database Management System) 중 하나이자 가장 인기가 많은 Oracle을 설치해보겠습니다. DBMS는 관계형(Relational), 계층형(Hierarchical), 망형(Network), 객체지향형(Object-Oriented) 등으로 분류됩니다. 가장 많이 사용되고 있는 Oracle, MySQL, Microsoft SQL Server 모두 관계지향형 DBMS입니다. 우선 Oracle에는 Express, Personal, Standard 등 다양한 Edition이 존재하는데 그 중 무료로 사용할 수 있는 Express를 설치해보겠습니다. 하지만 무료인만큼 일부 기능들이 제한될 수 있습니다. 하지만 오라클의 대부분 기능들이 있기 때문에 학습용이나 작은 규모의 비지니스..