본문 바로가기
프로그래밍/Oracle SQL 데이터베이스

[오라클 SQL 기초] 데이터베이스 함수, distinct(칼럼), group by, having 조건절, order by, case when then end

by nisne 2020. 9. 15.

모든 설명은 주석으로 확인할 수 있어요.

하나씩 따라해 보세요. ^^

 

lan이라는 테이블에
uname, kor, eng, mat, sum, avg, sno, wdate, addr 칼럼에
아래와 같은 값이 들어있다고 가정합시다앙

사랑해	90	85	95	270	90	1	20/09/15	Seoul
무궁화	40	50	20	110	37	2	20/09/15	Seoul
진달래	90	50	90	230	77	3	20/09/15	Jeju
개나리	20	50	20	90	30	4	20/09/15	Jeju
봉선화	90	90	90	270	90	5	20/09/15	Seoul
나팔꽃	50	50	90	190	63	6	20/09/15	Suwon
선인장	70	50	20	140	47	7	20/09/15	Seoul
소나무	90	60	90	240	80	8	20/09/15	Busan
참나무	20	20	20	60	20	9	20/09/15	Jeju
홍길동	90	90	90	270	90	10	20/09/15	Suwon
무궁화	80	80	90	250	83	11	20/09/15	Suwon

-----------------------------------------------------------------------

-- distinct() - 중복을 제거해주는 함수 > 칼럼에 어떤 값들이 있는 보고 싶을 때
--  문법
--      distinct 칼럼명    또는 distinct(칼럼명)
select addr from lan;           -- 그냥 주소 칼럼을 출력하는 경우
select distinct(addr) from lan; -- 어떠한 주소 값들이 있는지 확인하고 싶을 때

-----------------------------------------------------------------------

-- group by 
--  동일 내용끼리 그룹화, 정렬 기능과 비슷
--  집계 함수와 자주 쓰임  예) 같은 동네 사는 학생들의 국어 점수 평균을 구하기
--  문법
--      group by 칼럼1, 칼럼2, 칼럼3 ~~

select addr     -- 2. 주소값 출력
from lan 
group by addr;  -- 1. 같은 주소별로 묶은 후

select addr, count(*)   --같은 주소가 몇 개씩 있는지
from lan 
group by addr;

-- 활용) 평균이 70점 이상인 행을 대상으로 주소별 인원수를 인원수 순으로 조회
select addr, count(*)
from lan
where aver >= 70        -- 1. 평균 70 이상인 행을
group by addr           -- 2. 주소별로 묶어서
order by count(*);      -- 3. 인원수 순으로 조회

-----------------------------------------------------------------------

-- having 조건절
--  group by와 함께 사용하여 그룹들을 대상으로 조건절 부여

select addr, count(*)
from lan
group by addr           -- 1. 주소별로 그룹화하여
having count(*) = 3;    -- 2. 인원수가 3인 경우만 조회

-- 활용) 주소별 국어 평균이 50 이상인 행만 평균 높은 순으로 조회
select addr, avg(kor)
from lan
group by addr               -- 1. 주소별로 그룹화하여
having avg(kor) >= 50       -- 2. 그룹의 국어 평균이 50 점 이상인 것만
order by avg(kor) desc;     -- 3. 내림차순으로 조회

---------------------------------------------------------------------

-- case when ~ then ~ end ~ 구문
-- 문법
--      case when 조건1 then 조건 만족시 값1
--           when 조건1 then 조건 만족시 값1
--                  ...
--           else 값
--      end 결과컬럼명

-- 활용) 이름과 주소를 조회하되 주소를 한글로 바꿔서 조회
select uname, addr, case when addr = 'Seoul' then '서울'
                         when addr = 'Jeju' then '제주'
                         when addr = 'Busan' then '부산'
                         when addr = 'Suwon' then '수원'
                    end 주소
from lan;


commit;


 

영어를 어느 정도 잘하면 프로그래밍에도 많은 도움이 되더군요.

영어를 배울 수밖에 없다면... ^_^

 

 

댓글