영리의 테크블로그

05 distinct,limit, join 본문

dev/SQL

05 distinct,limit, join

영리0 2024. 2. 29. 18:46
-- distinct
-- distinct 는 중복된 값을 제거하는데 사용된다.
-- 컬럼에 있는 컬럼값들의 종류를 쉽게 파악할 수 있다.

select
	*
from
	tbl_menu
order by category_code;

-- 단일 열(컬럼) 중복 제거
select
	distinct category_code
from
	tbl_menu
order by category_code;

-- null 값을 포함한 열의 distinct 사용
select
	*
from
	tbl_category;
    
select
	distinct ref_category_code
from
	tbl_category;
    
-- 다중 열(컬럼) distinct 사용
-- 다중열의 값들이 모두 동일하면 중복된 것으로 판별한다.
select
	category_code,
    orderable_status
from
	tbl_menu;
    
select distinct
	category_code,
    orderable_status
from
	tbl_menu;
    
    
    
    
-- limit
-- limit elect 문의 경로가 집합에서 반환할 행의 수를 제한하는데 사용된다.

select
	*
from
	tbl_menu
order by
	menu_price desc;
    
select
	*
from tbl_menu
order by
	menu_price desc
limit 5;

-- limit [offset, ] row)_count
-- offset : 시작할 행의 번호(인덱스 체계)
-- row_count : 이후 행 부터 빈환 받을 행의 갯수

select
	menu_code,
    menu_name,
    menu_price
from
	tbl_menu
order by
	menu_price desc
limit 0,4; -- 인덱스 체계  인덱스 부터, 몇개 까지



-- join
-- 두 개 이상의 테이블을 관련 있는 컬럼을 통해 결합하는데 사용된다.
-- 두 개 이상의 테이블은 반드시 연관있는 컬럼이 존재해야 하며,
-- 이를 통해 join 된 테이블들의 컬럼을 모두 사용할 수 있다.

-- alias (as)
-- sql 문의 컬럼 또는 테이블에 별칭을 달아줄 수 있다.
-- 이러한 별칭을 alias 라고 한다.

-- 별칭에 띄어쓰기나 특수기호가 없다면 홀따옴표(') 와 as 는 생략 가능하다.
select
	menu_code as 'code',
    menu_name as name,
    menu_price price
from
	tbl_menu
order by
	price;
    
-- 테이블 별칭
-- 테이블에 별칭을 작성할 수 있으며 어떤 테이블 소속인지를 쉽게 알 수 있게 한다.
select
	a.category_code,
    a.menu_name
from
	tbl_menu a;
	
-- join 의 종류
-- inner join
-- 두 테이블의 교집합을 반환하는 join 유형
-- inner join 에서 inner 키워드는 생략이 가능하다.

-- select
-- 	menu_name,
--     category_name
-- from
-- 	tbl_menu;

-- on 키워드를 횔용한 join
-- 컬럼명이 같거나 다를 경우 on 으로 서로 연관있는 컬럼에 대한 조건을 작성하여
-- join

select
	a.menu_name,
    b.category_name
from
	tbl_menu a
join tbl_category b on a.category_code = b.category_code;

-- using 을 활용한 join
-- 컬럼명이 같을 경우 using 으로 서로 연관있는 컬럼에 대한 조건을 작성하여
-- join 하는 경우

select
	a.menu_name,
    b.category_name
from
	tbl_menu a
join tbl_category b using(category_code);
    
-- left join
-- 첫 번째(왼쪽) 테이블의 모든 레코드와 두 번째(오른쪽) 테이블에서 일치하는 레코드를
-- 반환하는 sql join 유형

select
	a.category_name,
    b.menu_name
from
	tbl_category a
left join tbl_menu b on a.category_code = b.category_code;

-- right join
-- 두 번째(오른쪽) 테이블의 모든 레코드와 첫 번쨰(왼쪽) 테이블에서 일치하는 레코드를 반환하는
-- sql join 유형

select
	a.menu_name,
	b.category_name
from
	tbl_menu a
right join tbl_category b on a.category_code = b.category_code;

-- cross join
-- 두 테이블의 모든 가능한 조합을 반환하는 sql join 유형

select
	a.menu_name,
    b.category_name
from
	tbl_menu a
cross join tbl_category b; 

-- self join
-- 같은 테이블 내에서 행과 행 사이의 관계를 찾기 위해 사용되는 sql join 유형

select
	*
from
	tbl_category;

select
	a.category_name,
    b.category_name
from
	tbl_category a
join tbl_category b on a.ref_category_code = b.category_code;

select
	a.menu_name,
    b.menu_name
from
	tbl_menu a
join tbl_menu b on a.menu_code = b.menu_code;

select
	menu_code,
    menu_price
from
	tbl_menu;