본문 바로가기

데이터베이스/MySQL

JOIN 실습

  데이터 조작 언어 DML

1. 회원의 레벨의 이름이 관리자인 회원의 정보(이름, 레벨이름,이메일)를 조회하시오.

SELECT
	m.m_name AS '이름',
    	l.level_name AS '등급',
    	m.m_email AS '이메일'
FROM
	tb_member_level AS l
    INNER JOIN
    tb_member AS m
    on
    l.level_num	 = m.m_level
WHERE
	l.level_name LIKE '%관리자%';

 

2. 회원들 중에 2월에 로그인한 회원의 정보(아이디와 이메일)를 조회하시오.

SELECT
	m.m_id AS 아이디,
   	m.m_email AS 이메일
FROM
	tb_member AS m
INNER JOIN
	tb_login AS l
ON
	m.m_id = l.login_id
WHERE
	MONTH(l.login_date) = 2;
--	YEAR(l.login_date) = 2020;
--	l.login_date BETWEEN '2020-02-01' AND LAST_DAY('2020-02-01');

 

3. 회원들 중에 로그인하지 않은 회원의 정보(아이디와 이메일)를 조회하시오.

SELECT
	m.m_id AS '아이디',
    	m.m_email AS '이메일'
FROM
	tb_member AS m
LEFT JOIN
	tb_login AS l
ON
	m.m_id = l.login_id
WHERE
	l.login_date IS NULL

 

4. 판매자별상품명 목록을 조회하시오.

SELECT
	g.g_seller_id AS '아이디',
    GROUP_CONCAT(DISTINCT g.g_name) AS '상품명 목록'
FROM
	tb_goods AS g
GROUP BY g.g_seller_id;

 

5.회원들 중에 로그인하지 않은 회원의 정보(아이디와 이메일)를 다음과 같이 조회 하시오.

SELECT
	GROUP_CONCAT(if(m.m_id='id010', m.m_email, null) AS 'id010'),
    GROUP_CONCAT(if(m.m_id='id011', m.m_email, null) AS 'id011'),
    GROUP_CONCAT(if(m.m_id='id012', m.m_email, null) AS 'id012'),
FROM
	tb_member AS m
LEFT JOIN
	tb_login AS l
ON
	m.m_id = l.login_id
WHERE
	l.login_date IS NULL;

 

6. 회원들 중에 2020-03-01 이후부터 로그인하지 않은 회원의 정보(아이디와 이메일)를 다음과 같이 조회 하시오.

SELECT
	m.m_id AS '아이디',
    m.m_email AS '이메일
FROM
	tb_member AS m
LEFT JOIN
	tb_login AS l
ON
	m.m_id = l.login_id
AND
	l.login_date>'2020-03-01'
WHERE
	l.login_id IS NULL;

 

7. 회원들의 이메일를활용하여 회원 이름을 추출하고 회원아이디와 회원이름을 조회하시오.

SELECT
	m.m_id AS '아이디'
    substring(m.m_email,1,3) AS '회원이름'
--	SUBSTRING_INDEX(m.m_email,'@',1) AS '회원이름'
FROM
	tb_member AS m;

 

8. 판매자 별 총 판매액을 조회하시오.

SELECT
	g.g_seller_id AS '아이디',
    sum(g.g_price*o.o_amount) AS '총판매액'
FROM
	tb_goods AS g
INNER JOIN
	tb_order AS o
ON
	g.g_code = o.o_g_code
GROUP BY g.g_seller_id;

 

9. 회원의 레벨 별 인원을 조회하시오.

SELECT
	l.level_name AS '회원레벨',
    count(m.m_id) AS '인원수'
FROM
	tb_member_level AS l
INNER JOIN
	tb_member AS m
ON
	l.level_num = m.m_level
GROUP BY l.level_name;

 

10. 회원 별 구매이력 중 구매금액이 가장 높은 금액의 상품명을 추출하여 회원아이디와이메일과 함께 조회 하시오.

SELECT
	m.m_id AS '회원아이디',
	m.m_email AS '이메일',
	g.g_name AS '상품명',
	max(g.g_price * o.o_amount) AS '구매금액'	
FROM
	tb_member AS m
	INNER JOIN 
	tb_order AS o
	ON 
	m.m_id = o.o_id
	INNER JOIN 
	tb_goods AS g
	ON
	o.o_g_code = g.g_code
GROUP BY m.m_id;

 

 

11. 구매자별 구매이력 중 상품별로 구매수량이 20개 이상인 상품의 목록을 추출하여 다음과 같이 조회하시오.

SELECT
m.m_name AS '구매자',
GROUP_CONCAT(distinct g.g_name) AS '상품목록'
FROM
tb_member AS m
INNER join
tb_order AS o
on
m.m_id = o.o_id
AND
o.o_amount >=20
INNER JOIN
tb_goods AS g
on
o.o_g_code = g.g_code
GROUP BY o.o_id;

'데이터베이스 > MySQL' 카테고리의 다른 글

다중 테이블 연산 - UNION  (0) 2020.04.01
서브쿼리(Sub Query)  (0) 2020.04.01
SQL의 SELECT 키워드  (0) 2020.03.31
SQL 연산자  (0) 2020.03.31
SQL 내장함수  (0) 2020.03.31