UNION은 SELECT 문으로 조회한 결과를 결합할 때 사용합니다. A 테이블에서 조회한 컬럼과 B 테이블에서 조회한 컬럼의 결과를 하나의 테이블에 보여주는 식입니다. 다만 UNION은 아래의 조건을 만족시켜야 정상 작동합니다. 동일한 수의 열을 조회해야 합니다. 양쪽 열의 데이터 타입이 비슷해야 합니다. 열을 나열하는 순서가 동일해야 합니다. UNION UNION 구문 SELECT 컬럼명 FROM 테이블1 UNION SELECT 컬럼명 FROM 테이블2; UNION ALL 구문 UNION은 조회되는 결과의 중복을 제거합니다. 중복을 제거하지 않고 조회를 원하면 UNION ALL을 사용하면 됩니다. SELECT 컬럼명 FROM 테이블1 UNION ALL SELECT 컬럼명 FROM 테이블2; 1. UN..
테이블이 서로 다른 데이터베이스에 있더라도 동일한 컬럼을 기준으로 테이블을 조인해서 조회할 수 있습니다. JOIN SQL 서버에서 서로 다른 두 데이터베이스의 테이블을 조인할 때 아래의 구문을 주로 사용합니다. SELECT tb_1.*, tb_2.* FROM [database_1].[table_schema].[table_name_1] tb_1 JOIN [database_2].[table_schema].[table_name_2] tb_2 ON tb_1.id = tb_2.id tb_1과 tb_2는 별칭입니다. 보기 편하게 줄이기 위해 사용하는 겁니다. 테이블 안에서도 특정 컬럼을 지칭할 때 테이블명.컬럼명처럼 사용하듯이 테이블의 상위 개념인 데이터베이스 역시 동일하게 .을 사용합니다. 데이터베이스명.테이블명..
RDBMS와 NoSQL의 가장 큰 차이는 데이터베이스의 관계성입니다. RDBMS는 엄격한 규칙에 의해 운영되는 반면 NoSQL은 좀 더 유연합니다. 두 DB의 특징이 다른 만큼 활용처에도 차이가 있습니다. RDBMS 가장 널리 사용되고 있는 RDBMS(Relational DataBase Management System)부터 살펴보겠습니다. RDBMS는 관계형 데이터베이스 관리 시스템으로 이해할 수 있고, 줄여서 RDB라고 부릅니다. RDB는 열과 행으로 이루어진 테이블 구조가 특징입니다. 엑셀에서 표를 만들어 데이터를 편집하는 것과 유사합니다. RDB에서는 SQL이라는 질의 언어를 사용해서 데이터를 생성, 조회, 수정, 삭제합니다. 오라클, MSSQL, MYSQL, PostgreSQL 등이 RDBMS에 ..
오라클, MSSQL, MYSQL, PostgreSQL 등의 RDBMS를 사용하다 보면 스키마(schemas)라는 용어를 많이 접하게 됩니다. 그러나 스키마는 실제 SQL문을 활용하는 과정에서 딱히 사용되지도 않아 추상적인 개념으로 인식되곤 합니다. 스키마가 무엇인지 이해가 쉽게 정리해보겠습니다. 스키마 데이터베이스 스키마는 데이터의 구조를 의미합니다. 쉽게 말해, RDB(관계형 데이터베이스)에서 사용 목적에 맞게 테이터를 저장하기 위해 테이블 구조를 짜고, 컬럼에 기본키, 외래키를 지정하고, 이를 통해 테이블 간 관계 및 제약사항을 만드는 것을 스키마라고 할 수 있습니다. schemas의 일반적 의미인 개요, 윤곽으로 이해하시면 됩니다. 스키마는 데이터베이스 구조의 청사진입니다. 프로젝트 초기엔 보통 시..
데이터베이스는 문자열 데이터를 저장할 때 캐릭터셋(character set)을 이용합니다. 어떤 캐릭터셋으로 인코딩 된 것인지에 따라 글자가 정상적으로 보이거나 깨져서 보이기도 합니다. character set 컴퓨터는 알파벳이나 한글 같은 '문자'를 이해할 수 없기 때문에 character encoding 작업이 이루어집니다. 예를 들어, a는 1로, b는 2로 표현하기로 약속하는 식입니다. 즉 캐릭터셋은 문자에 대한 인코딩 집합을 의미합니다. 때문에 한글이 인코딩 되지 않은 캐릭터셋에 한글을 저장하면 컴퓨터가 이를 표현하지 못하고 글자가 깨져서 보이는 겁니다. 이런 이유로 한글을 포함한 다양한 언어를 문제없이 표현하는 utf8이 널리 사용되고 있습니다. 그래서 dbms를 설치하면 가장 먼저 하는 일이..
MYSQL 이용 시 테이블을 수정하거나 삭제해야 하는데, 외래 키 제약(foreign key constraint) 때문에 번거롭게 부모-자식 테이블 관계를 확인해가며 쿼리문을 수행한 적이 있으신가요? 이럴 때 유용하게 사용할 수 있는 게 FOREIGN_KEY_CHECKS입니다. [외래키 제약 위반 시 오류 발생] ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails FOREIGN_KEY_CHECKS FOREIGN_KEY_CHECKS는 외래 키를 참조하는 테이블에서 UPDATE, DELETE 등 쿼리문을 수행할 때 외래 키 제약 조건을 확인할지 여부를 결정하는 옵션입니다. 기본 값은 1로 제약조건을 확..
DB에서 데이터의 고유한 식별을 위해 시퀀스(sequence)를 사용합니다. Number 컬럼을 만들고 기본키(Primary Key)로 지정해서 1, 2, 3, 4 … 식으로 번호를 붙여서 저장하는 것입니다. 이때 각 숫자는 행에 기록된 데이터를 식별하는 고유한 값이 됩니다. MYSQL rownum 사용 방법 오라클에서는 rownum이라는 쿼리를 이용해서 시퀀스를 사용할 수 있지만, mysql에는 그런 쿼리가 없어 사용자 정의 변수(@)를 이용해서 처리할 수 있습니다. 사용자 정의 변수는 직접 값을 설정하는 변수를 말하며 = 또는 := 부호로 정의해 사용합니다. 마리아DB도 mysql과 같은 기반이기 때문에 동일하게 적용됩니다. [MYSQL 행번호 부여 예시] SELECT (@rownum := @rown..
distinct는 컬럼의 중복을 제거하는 SQL문입니다. 하나의 컬럼에 distinct를 사용할 때는 해당 컬럼의 중복을 제거합니다. 그런데 아래 예시처럼 여러 개의 컬럼에 distnct를 적용하면 어떻게 조회할까요? select distinct colum1, colum2, colum3 ... from orders 혹시 colum1의 중복을 제거하기 위해 colum2의 조회되어야 할 데이터가 제거되는 건 아닐까요? 아닙니다. 모든 컬럼을 고려해서 조회하기 때문에 그런 일은 일어나지 않으며, 튜플 전체 값이 동일한 경우에 한해서 중복을 제거합니다. 예제는 w3리소스를 참고했습니다. Ex) 테이블 : orders ORD_NUM ORD_AMOUNT ADVANCE_AMOUNT ORD_DATE CUST_CODE ..
grant all privileges 명령어는 유저가 데이터베이스에 접근할 수 있도록 권한을 부여할 때 사용합니다. grant all privileges on [데이터베이스명.테이블명] to [사용자@호스트] identified by '비밀번호' [with grant option]; Ex) grant all privileges on TEST.* to 'testuser'@'localhost' identified by '비밀번호'; TEST라는 데이터베이스의 모든 테이블에 testuser라는 유저가 로컬에서 접근 가능하게 합니다. *는 전체를 의미합니다. grant all privileges on TEST.* to 'testuser'@'127.0.0.1' identified by '비밀번호' with gra..
CASE문은 컬럼값이 특정한 조건을 만족할 때 그 값을 바꿔서 출력할 수 있는 SQL문입니다. 원하는 컬럼명으로 별칭을 붙여 출력하는 AS와 비슷하다고도 할 수 있습니다. Ex) 테이블명 : 국영수 과목 점수 국어 100 영어 100 수학 50 SELECT 과목 AS subject, 점수 AS score FROM 국영수; 이렇게 조회하면 결과는 아래와 같습니다. subject score 국어 100 영어 100 수학 50 이번엔 CASE문을 사용해서 점수가 100이면 값을 perfect으로 바꿔서 출력해보겠습니다. SELECT 과목 AS subject, CASE WHEN 점수='100' THEN 'perfect' ELSE 점수 END AS score FROM 국영수; subject score 국어 per..