코딩 이야기

mysql 공부정리(3) 본문

DB

mysql 공부정리(3)

별메아리 2023. 3. 15. 10:18
728x90
use sample;
select * from sample71_a;
select * from sample71_b;

select * from sample71_a
union
select * from sample71_b;  -- 두 개의 명령을 하나의 명령으로 합친다.
-- union으로 두 개의 select 명령을 하나로 연계해 질의 결과를 얻을 수 있다.

select a from sample71_a
union
select b from sample71_b
union
select age from sample31;
-- 열 개수와 자료형이 일치해야 한다.

-- union을 사용할 때의 order by (order by를 지정할 때는 마지막 select 명령에만 지정하도록 합시다.)
-- 합집합의 결과를 정렬해야 되므로 가장 마지막에 select 명령에 order by를 쓴다.
select a as c from sample71_a
union
select b as c from sample71_b order by c;
-- union으로 select 명령을 연결하는 경우, 가장 마지막 select 명령에 대해서만 order by 구를 지정할 수 있다. order by 구에 지정하는 열은 별명을 붙여 이름을 일치시킨다.

-- union all
-- 두 개의 select 명령에 union all을 적용햐 합집합 구하기
select * from sample71_a
union all
select * from sample71_b;
-- 교집합과 차집합 mysql에서는 지원되지 않지만 sql을 사용해 구할 수 있다. intersect(교집합),except(차집합)을 사용한다.

-- 테이블 결합
-- 곱집합과 교차 결합
/* 곱집합 두 개의 집합을 곱하는 연산 방법
예) 드라마 시즌1,2,4 6부작
시즌 : {1,2,3}
화 : {1,2,3,4,5,6}
시즌 1 : 1-1, 1-2, 1-3, 1-4, 1-5, 1-6
시즌 2 : 2-1, 2-2, 2-3, 2-4, 2-5, 2-6
시즌 3 : 3-1, 3-2, 3-3, 3-4, 3-5, 3-6
*/
/* 교차 결합
select * from 테이블명1, 테이블명2 
*/
-- sample72_x와 sample72_y
select * from sample72_x;
select * from sample72_y;
select * from sample72_x, sample72_y;
-- from 구에 복수의 테이블을 지정하면 교차 결합을 한다.

-- union 연결과 결합 연결의 차이
-- union은 세로방향 from구로 결합하면 가로방향

-- 내부결합
-- 많은 테이블을 결합할때는 교차결합보다 내부결합이 자주 사용된다.

-- 상품테이블
select * from 상품;
-- 재고수 테이블
select * from 재고수;
-- 다른 테이블의 데이터를 참조해야 하는 경우, 참조할 테이블의 기본키와 동일한 이름과 자료형으로 열을 만들어서 행을 연결해야하는 경우가 많다.
-- 상품 테이블과 재고수 테이블을 교차 결합하기
select * from 상품,재고수;
-- 상품코드가 같은 행을 검색하기
select * from 상품,재고수
where 상품.상품코드=재고수.상품코드;
-- 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것을 '내부결합'이라고 한다.
-- 검색할 행과 반환할 열 제한하기
select 상품.상품명, 재고수.재고수 from 상품, 재고수
 where 상품.상품코드=재고수.상품코드
  and 상품.상품분류 = '식료품';

-- inner join으로 내부 결합하기
/* from 구에 테이블을 복수 지정해 가로 방향으로 테이블을 결합할 수 있다.
   교차결합을 하면 곱집합으로 계산된다.
   where 조건을 지정해 곱집합에서 필요한 조합만 검색할 수 있다.
inner join 키워드를 활용해 위에 조건들을 해결해보자
*/
select 상품.상품명, 재고수.재고수
 from 상품 inner join 재고수
  on 상품.상품코드=재고수.상품코드
 where 상품.상품분류 = '식료품';
/* 내부결합
select * from 테이블명1 inner join 테이블명2 on 결합조건
*/
-- inner join으로 두 개 테이블을 가로로 결합할 수 있다.

-- 내부결합을 활용한 데이터 관리
-- 메이커 테이블 작성하기
select * from 메이커;
-- 상품 테이블과 메이커 테이블을 내부 결합하기
select 상품명, m.메이커명
 from 상품2 s inner join 메이커 m
  on s.메이커코드 = m.메이커코드;
-- 자기 결합 : 테이블에 별명을 붙일 수 있는 기능을 이용해 같은 테이블 끼리 결합하는 것
-- 상품 테이블을 자기결합하기
select s1.상품명, s2.상품명
 from 상품 s1 inner join 상품 s2
  on s1.상품코드 = s2.상품코드;

-- 외부결합 : '어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지'를 변경하는 결합 방법
-- 내부결합에서는 상품 코드가 0009인 상품이 제외된다.
select 상품3.상품명, 재고수.재고수
 from 상품3 inner join 재고수
 on 상품3.상품코드 = 재고수.상품코드
 where 상품3.상품분류 = '식료품';

-- 외부결합으로 상품코드 0009인 상품도 결과에 포함하기
select 상품3.상품명, 재고수.재고수
 from 상품3 left join 재고수
 on 상품3.상품코드 = 재고수.상품코드
 where 상품3.상품분류 = '식료품';
 -- left join,gight join으로 외부결합을 할 수 있다.
728x90

'DB' 카테고리의 다른 글

mysql 공부정리(4)  (0) 2023.03.16
논리삭제  (0) 2023.03.15
문제풀이2번째  (0) 2023.03.14
mysql 공부정리 (2)  (0) 2023.03.14
mysql 문제풀이  (0) 2023.03.13
Comments