본문 바로가기

MySQL/MySQL 활용

(11)
UNION 연산자 - 13 💡 학습 목표UNION 연산자에 대한 개념을 이해하자.UNION 연산자와 JOIN에 차이점을 이해하자.   UNION 연산자는 SQL에서 여러 SELECT 문의 결과를 하나의 결과 집합으로 결합할 때 사용됩니다. 즉, 서로 다른 테이블이나 같은 테이블의 다른 조건에서 검색된 데이터를 하나의 결과로 볼 수 있도록 하기 위해 사용한다.기능: UNION은 두 개 이상의 SELECT 결과를 결합합니다.조건: 모든 SELECT 문은 동일한 수의 열을 가져야 하며, 열의 데이터 타입이 호환 가능해야 합니다.중복 제거: 기본적으로 UNION은 중복된 행을 제거합니다.중복 포함: 중복된 행을 포함하려면 UNION ALL을 사용합니다.  사용 예시 SELECT name, email FROM customersUNIONS..
제 3정규형(Third Normal Form, 3NF) - 12 💡 제 3정규형(Third Normal Form, 3NF)은 데이터베이스 테이블이 제 2정규형(2NF)을 만족하며, 추가적으로 모든 비기본 키 속성이 기본 키에만 종속되고 기본 키가 아닌 다른 속성에는 종속적이지 않아야 합니다. 이를 '이행적 종속성이 없어야 한다'고 합니다. 이행적 종속이란 A -> B, B -> C의 종속 관계에서 A가 B에 종속되고, B가 C에 종속될 때, 간접적으로 A가 C에 종속되는 관계를 말합니다.   제 3정규형을 만족하지 못하는 예제  학생 성적 테이블 학생 성적 테이블이 제 3정규형(3NF)을 만족하도록 설계하기 위해 이행적 종속성을 제거해야 합니다. 현재 테이블에서 교수 이름은 교수ID에 의존적이며, 이는 과목코드에도 간접적으로 의존적인 관계입니다. 따라서 이러한 ..
제 2정규화(Second Normal Form, 2NF) - 9 🔔 제2정규형 (2NF) : 1NF를 만족하며, 모든 비기본 키 속성이 전체 기본 키에 대해 완전 함수적 종속을 가져야 합니다. 즉, 기본 키의 일부에만 종속된 속성이 없어야 합니다.  2NF를 만족하지 못하는 데이터 예제학생들이 수강하는 과목과 그 과목의 담당 교수에 대한 정보를 포함하는 테이블을 설계.여기서 pk는 {학생ID, 과목코드}의 복합 키입니다.수강 정보 테이블 위 테이블에서 '과목명'과 '담당 교수'는 과목코드에 부분적으로 종속되어 있습니다. 즉, 학생ID와는 직접 적인 관련이 없습니다.  2NF 문제 해결2NF를 만족시키기 위해 부분 종속성을 제거해야 합니다. 이를 위해 위 테이블을 분해하여 부분적 종속성을 제거할 수 있습니다.수강 정보 테이블: 학생ID, 과목코드과목 정보 테이블: 과..
제 1정규화(First Normal Form, 1NF) - 8 테이블(Relation)이 제 1정규형을 만족했다는 것은 아래 세 가지 조건를 만족했다는 것을 의미합니다.어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다. 1. 원자값이 아닌 데이터제 1정규형의 첫 번째 조건은 모든 도메인이 원자값으로 구성되어야 한다는 것원자값이 아닌 예 (수강 과목) 위 표에서 '수강 과목' 필드에 여러 과목이 쉼표로 구분되어 들어가 있어, 이 필드가 원자값이 아님.  2. 반복 그룹이 있는 데이터제 1정규형의 두 번째 조건은 속성에 반복되는 그룹이 나타나지 않아야 한다는 것..
서브 쿼리란 - 7 subquery란?서브쿼리(subquery)는 SQL 문장 내에서 다른 SQL 쿼리를 내포하는 구문입니다.서브쿼리의 개념서브쿼리는 보통 소괄호 () 안에 작성되며, 메인 쿼리(main query) 또는 외부 쿼리(outer query)라고 하는 더 큰 SQL 쿼리의 일부로 존재합니다. 서브쿼리는 메인 쿼리에 의해 반환된 데이터를 기반으로 추가적인 조건을 적용하거나, 메인 쿼리의 조건을 정의하는 데 사용됩니다.문법에 형태 살펴 보기select * from reservationwhere name in( select name from customer where address ='서울' ); 서브쿼리를 사용하는 이유복잡성 감소: 복잡한 쿼리를 더 작고 관리하기 쉬운 부분으로 나누어 처리할 수 있습니다.재사용성:..
쇼핑몰과 카테고리 2단계 - 6 tb_categories 테이블 create database demo3;use demo3;-- 카테고리 테이블 (상위, 하위 개념 추가) create table tb_categories( category_id int auto_increment primary key, parent_id int null, category_name varchar(100), foreign key(parent_id) references tb_categories(category_id));insert into tb_categories(category_name) values('남성복');insert into tb_categories(category_name) values('여성복');-- 남성복에 하위 카테고리 insert..
쇼핑몰과 카테고리 1단계 - 5 tb_categoriescreate table tb_categories( category_id int auto_increment primary key, category_name varchar(100) not null);insert into tb_categories(category_name) values('상의');insert into tb_categories(category_name) values('하의');insert into tb_categories(category_name) values('외투');create table tb_products( product_id int auto_increment primary key, product_name varchar(255), category_id i..
블로그 서비스의 DB 구축 - 4 User 테이블 명세서 Board 테이블 명세서 Reply 테이블 명세서 create database m_board;use m_board;create table user( id int primary key auto_increment, username varchar(100) not null unique, password varchar(255) not null, email varchar(100) not null, userRole varchar(20), createDate timestamp);-- board table, reply table create table board( id int primary key auto_increment, userId int, title varchar(100)..