본문 바로가기

수업/수업정리

2024-03-14-오후:DDL실습6:JOIN, UNION, IFNULL(), IS NOT NULL

/*
1. JOIN : 2개 이상의 테이블을 묶어 하나의 결과 집합으로 생성
join을 위한 조건 : 기본키와 외래키가 연결되어있는지 확인
join의 특징 : 결과창이 2개의 테이블의 결과가 가로로 붙어서 출력

1)INNER JOIN
-가장 많이 사용됨
-두 테이블이 공통적으로 가지고 있는 데이터 조회

[구문]
SELECT
		검색할 열 이름
FROM
		R1_테이블
		INNER JOIN
		R2_테이블
		ON -->데이터가 섞이는 것을 방지
		조인을_위한_조건;
*/

SELECT
	*
FROM
	tb_member AS m
	INNER JOIN
	tb_order AS o
	ON
	m.m_id = o.o_id;

-- 1. continent EUROPE에 속한 모든 도시의 이름과 continent를 조회
SELECT
	c.Name AS '도시 이름',
	cn.Continent AS 'continent'
FROM
	country AS cn
	INNER JOIN
	city AS c
	ON
	cn.Code = c.CountryCode
WHERE
	cn.Continent = 'EUROPE';

-- 2. continent가 ASIA면 도시의 인구수의 합을 조회

SELECT
SUM(c.Population) AS '도시의 인구수의 합'
FROM
 country AS cn
 INNER join
 city AS c
 on
 cn.code = c.countrycode
WHERE 
cn.Continent = 'ASIA';

-- 3. 회원 권한 이름이 "관리자"인 회원의 이름, 회원 이메일을 조회

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 = '관리자';

 

-- 4. 회원중 2월에 로그인한 회원의 아이디, 이메일 , 로그인 일자 조회ㅣ

SELECT
	m.m_id AS '회원의 ID',
	m.m_email AS '회원 E-mail',
	l.login_date 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;

SET GLOBAL sql_mode=(SELECT REPLACE (@@sql_mode,'ONLY_FULL_GROUP_BY','')); 추가하고 group by사용

 

-- 5. 구매자 회원의 아이디와 이름, 주소, 구매 상품 코드,구매 상품  이름을 조회

SELECT
	o.o_id AS '회원 ID',
	m.m_name AS '회원 이름',
	m.m_addr AS '회원 주소',
	o.o_g_code AS '구매 상품 코드',
	g.g_name AS '구매 상품 이름'
FROM
	tb_order AS o
	INNER join
	tb_member AS m
	ON
	o.o_id = m.m_id
	INNER join
	tb_goods AS g
	ON 
	o.o_g_code = g.g_code;

 

/*
UNION : 2개 이상의 테이블을 묶어 하나의 결과 집합으로 생성
union을 위한 조건
-select하는 컬럼 개수가 동일해야한다.
-컬럼의 이름이 같아야 한다.(만약 다르다면 AS를 사용)
-컬럼의 데이터타입이 같아야 한다.
union의 특징 : 결과창이 2개의 테이블의 결과가 세로로 붙어서 출력
(1) UNION : 중복 데이터를 없애고 출력
(2) UNION ALL : 중복 데이터 포함 출력
*/

SELECT
	m.m_id,
	m.m_level
FROM
	tb_member AS m
UNION
SELECT
 	g.g_code,
 	g.g_name
FROM
 tb_goods AS g;

/*
IS NULL : NULL값 확인 방법
IS NOT NULL : NULL이 아닌 값 확인 방법
IFNULL : SELECT절에서 NULL을 조회하여 다른값으로 반환
[구문]
컬럼_이름 IS NULL;
컬럼_이름 IS NOT NULL;
SELECT
	조회할_열_이름,
	IFNULL(속성, 속성값)
FROM
	조회할_테이블
*/

-- 6. 회원 중 로그인하지 않은 회원의 아이디,이메일, 로그인 일자 조회
-- 	조회 시, 로그인 일자는 login_record라는 이름으로 조회,
-- 	login_record에서 조회되지 않은 값은 '로그인 기록이 없습니다.'로 조회
SELECT
	m.m_id,
	m.m_email,
	IFNULL(l.login_date,'로그인 기록이 없습니다.') AS 'login_record'
FROM
	tb_member AS m
	LEFT join
	tb_login AS l
	ON
	m.m_id = l.login_id
WHERE
	l.login_id IS NULL;


참고 링크 : https://pearlluck.tistory.com/46