MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의
하위 질의란?
하위 질의는 서브 쿼리라고도 합니다. 하위 질의는 질의를 실행해서 추출한 데이터를 이용해서 다시 질의를 하는 것을 말합니다.
하위 질의를 이용해서 sales의 최대값 레코드를 표시해 보겠습니다.
select * from table_sales;
select * from table_sales
where sales in(select max(sales) from table_sales);
GROUP BY 함수
MAX(), AVG(), SUM()등 집계를 하는 함수를 GROUP BY 함수라고 하는데 그룹화했을 때 값을 처리하는 함수입니다. 단 GROUP BY 가 없는 경우에는 테이블 전체를 하나의 그룹으로 처리합니다.
평균 이상의 레코드 추출하기.
평균나이 이상인 레코드를 추출해 보겠습니다.
select * from table_member;
select * from table_member
where age >= (select avg(age) from table_member);
IN 사용하기 – 컬럼을 반환하는 하위 질의
이번에는 하위 질의가 컬럼을 반환하는 예입니다.
1단계의 하위 질의에서 조건에 일치하는 컬럼을 반환하고 2단계에서 그 컬럼을 포함한 값을 추출합니다.
명령문은 다음과 같습니다.
select 컬럼명 from 테이블명
where 컬럼명 in (select를 이용한 하위 질의로 추출한 컬럼);
table_sales 에서 sales 가 100이상인 number를 추출하고 table_member에서 해당하는 레코드를 표시해 보겠습니다.
select * from table_member
where number
in (select number from table_sales where sales >= 100)
EXISTS를 사용해서 존재하는 레코드를 대상으로 검색하기.
exists는 특정 컬럼이 아닌 대상이 되는 레코드가 존재하고 있다는 의미입니다.
Table_sales의 number와 table_member의 number가 양쪽에 모두 존재하는 레코드를 추출하고 table_member에서 해당하는 레코드를 표시해 보겠습니다..
select * from table_member as A
where exists (select * from table_sales as B
where A.number = B.number);
select * from table_sales as B where A.number = B.number 은 특정 컬럼이 아니라 조건에 맞는 레코드를 추출하는 것입니다. 그리고 exists를 사용해서 table_member에 존재하는 해당 레코드만 표시합니다.
NOT EXISTS 사용하기.
not exists 는 하위 질의로 추출되지 않은 레코드를 대상으로 합니다.
위의 exists 명령문에 not exists를 적용해서 비교해 보겠습니다.
select * from table_member as A
where not exists (select * from table_sales as B
where A.number = B.number);
하위 질의를 이용한 순위 정하기.
하위 질의를 사용하면 다양한 방법으로 순위를 매길 수 있습니다.
하위 질의를 사용해서 순위를 정하는 방법을 알아 보겠습니다.
1. table_sales 컬럼 구조만 복사해서 table_rating 를 생성합니다.
2. table_rating 에 연속 번호 기능을 설정한 rating를 추가합니다.
3. 하위 질의를 사용해서 table_sales의 컬럼 sales를 내림차순으로 정렬하고, number, sales, month를 table_rating에 추가합니다.
create table table_rating like table_sales;
alter table table_rating
add rating int auto_increment primary key;
insert into table_rating (number, sales, month)
(select number, sales, month from table_sales
order by sales desc);
select * from table_rating;
'MySQL' 카테고리의 다른 글
MySQL 저장 프로시저 활용하기. (0) | 2017.12.18 |
---|---|
MySQL 뷰 이용하기. (0) | 2017.12.13 |
MySQL 셀프 조인. (2) | 2017.12.08 |
MySQL 외부 JOIN 사용하기. (0) | 2017.12.07 |
MySQL 내부 JOIN ON 사용하기. (0) | 2017.12.06 |