select *
from players
where playerID = (select top 1 playerID from salaries order by salary desc );

playerID 에 해당 하는 내용을 하단과 같이 select 문을 다시 넣어 검색하여 이것의 결과를 활용하는 것을 보고 subquery 라 하고 두번에 나누어서 처리 할것은 한번에 처리 할 수 있다

 

주의 할것은 위 처럼 단일행은 동작 가능하지만 다중행에 대해선 동작하지 않는다

 

 

 

select *
from players
where playerID in (select top 10 playerID from salaries order by salary desc );

하지만 in 을 사용하게 되면 서브쿼리에 있는 내용을 모두 상위 where player 와 매칭 되는것을 모두 보여준다

결과 화면에 3개만 보여지는 이유는  IN 으로 처리 하면 중복되는것은 하나만 보여주기 때문이다

 

 

서브쿼리는 where 에서 많이 사용 되지만 다른 구문에서도 사용 가능하다 

 

다음 처럼 insert into 에도 서브쿼리를 넣을 수도 있다

insert into salaries
values (2023, 'KOR', 'NL', 'kkk', (select max(salary) + 100 from salaries));

 

 

 

 

테이블의 모든 모든 요소들을 다른 테이블에서 새로운 테이블에 일부요소들에 대한 복사하기를 서브쿼리와 유사한 형태로 쓸 수 있다

 

salaries_temp 를 복사를 받을 테이블

--INSERT SELECT 구문

insert into salaries_temp
select  yearID, playerID, salary from salaries;

위는 salaries 내용을 salaries_temp  에 복사하는 코드다

 

 

 

select *
from salaries_temp;

위와 같이 복사 된것을 알수 있다

 

 

원래 salaries 는 다음 처럼 요소들이 배치되어 있다

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능  (0) 2023.02.12
DB : SUBQUERY  (0) 2023.02.10
DB : Insert into , Delete, Update  (0) 2023.02.03
DB : group by  (0) 2023.02.02
DB : COUNT, DISTINCT 각종 함수들  (0) 2023.02.01

+ Recent posts