-- 변수의 사용
use market_db;
set @myvar1 = 5;
set @myvar2 = 4.25;
select @myvar1;
select @myvar1+@myvar2;
set @txt = '가수 이름==> ' ;
set @height = 166;
SELECT @txt, mem_name FROM member WHERE height > @height;
set @count =3;
SELECT mem_name, height FROM member ORDER BY height LIMIT 3;
-- 데이터 형변환
SELECT price '평균 가격' FROM buy;
-- 항상 select가 먼저 실행되고, 그 다음에 avg가 실행이 된다. 순서 생각.
SELECT AVG(price) '평균 가격' FROM buy;
-- 정수
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy;
-- 또는
select convert(avg(price) , signed) '평균 가격' from buy;
-- 구분자를 날짜형으로 변경가능.
select cast('2022$12$12' as date);
select cast('2022/12/12' as date);
select cast('2022%12%12' as date);
select cast('2022@12@12' as date);
select convert('2022$12$12' , date);
select convert('2022/12/12' , date);
select convert('2022%12%12' , date);
select convert('2022@12@12' , date);
-- 가격 수량을 곱하는 실제 구매액을 표시하는 SQL을 작성할 수 있다.
-- concat()은 문자를 이어주는 역할을 합니다.
SELECT
num,
CONCAT(CAST(price AS CHAR),
'X',
CAST(amount AS CHAR),
'=') '가격X수량',
price * amount '구매액'
FROM
buy;
-- 4-2 조인
-- 내부 조인의 기본
use market_db;
-- buy table에서 mem_id가 GRL인 것에서 inner join table명을 통해 서로 연결한다.
-- select (column) from (table명) inner join (join할 테이블명) on 연결할 테이블명.column명 =테이블명.column명 where 조건식
select * from buy inner join member on buy.mem_id = member.mem_id where buy.mem_id = 'GRL';
-- where절이 없을 경우
-- buy table을 기준으로 한 것
select * from buy inner join member on buy.mem_id = member.mem_id;
-- member table을 기준으로 한 것
select * from member inner join buy on buy.mem_id = member.mem_id;
-- column명이 양쪽 테이블에 존재하는 것을 사용할 때는 명확하게 하기 위헤 테이블 명.column명을 사용해준다
SELECT
buy.mem_id,
member.mem_name,
buy.prod_name,
member.addr,
CONCAT(member.phone1, member.phone2) '연락처'
FROM
buy
INNER JOIN
member ON buy.mem_id = member.mem_id;
-- 별칭(alias) from 테이블, inner join 테이블 각각 뒤에 별칭을 붙여줌으로써 별칭을 사용할 수 있다.
SELECT
B.mem_id,
M.mem_name,
B.prod_name,
M.addr,
CONCAT(M.phone1, M.phone2) '연락처'
FROM
buy B
INNER JOIN
member M ON B.mem_id = M.mem_id;
-- 중복된 결과 1개만 출력하기
SELECT DISTINCT
M.mem_id, M.mem_name, M.addr
FROM
buy B
INNER JOIN
member M ON B.mem_id = M.mem_id
ORDER BY M.mem_id;
-- 외부 조인
select M.mem_id, M.mem_name, B.prod_name, M.addr
from member m
left outer join buy B
on M.mem_id = B.mem_id
order by M.mem_id;
-- 외부 조인의 활용
-- distinct를 이용해 중복된 것은 하나만 보이게 하고, is null 값만 가져와서 조인해준다.
select distinct M.mem_id, B.prod_name, M.mem_name, M.addr
from member M
left outer join buy B
on M.mem_id = B.mem_id
where B.prod_name is null
order by M.mem_id;