티스토리 뷰

카테고리 없음

SQL3

eyoadgkn 2024. 2. 13. 09:35
-- 변수의 사용
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;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함