공부/데이터베이스

서브 쿼리( SUBQUERY)

원클릭쓰리버그 2022. 1. 26. 21:41
728x90
use BaseballData

--SubQuery (서브쿼리 / 하위쿼리)
--SQL 명령문 안에 지정하는 하부 SELECT

-- 연봉이 역대급으로 높은 선수의 정보를 추출
SELECT TOP 1*
FROM salaries
order by salary desc;

--rodrial01
select*
from players
where playerID = 'rodrial01'

-- 이것을 한 번에 하려면?
-- 단일행 서브쿼리
select*
from players
where playerID = (select top 1 playerID from salaries order by salary desc);

-- 다중행 IN 사용
SELECT*
FROM players
WHERE playerID IN (SELECT TOP 20 playerID FROM salaries ORDER BY salary DESC);

-- 서비쿼리는 WHERE에서 가장 많이 사용되지만, 나머지 구문에서도 사용 가능
SELECT (SELECT COUNT(*) FROM players) AS playerCount, (select count(*) from batting) as battingCount;

--INSERT에서도 사용 가능
SELECT*
FROM salaries
ORDER BY yearID DESC

--INSERT INTO
INSERT INTO salaries
VALUES (2020,'KOR' ,'NL','rookiss', (select MAX(salary) from salaries))

--INSERT SELECT
INSERT INTO salaries
SELECT 2020, 'KOR', 'NL', 'rookiss2', (select MAX(salary) from salaries);
-- 값 복사
INSERT INTO salaries_temp
select yearID, playerID, salary from salaries;

-- 상관 관계 서브쿼리
-- EXISTS, NOT EXISTS

-- 포스트 시즌 타격에 참여한 선수들 목록
SELECT *
FROM players
SELECT playerID FROM battingpost;

-- 같은 문법
select*
from players
where playerID IN (SELECT playerID FROM battingpost);

-- 같은 문법 하지만 가용성이 강함 (+,-, > 등 사용이 가능)
select*
from players
where EXISTS (select playerID FROM battingpost where  players.playerID = battingpost.playerID)
-- players.playerID 는 외부에서 접근하지만 EXISTS라는 상관 관계문 떄문에 사용이 가능하다.

 

 

Ctal + L 을 누르게 되면 성능 비교 가능

 

 

'공부 > 데이터베이스' 카테고리의 다른 글

정규화 / INDEX  (0) 2022.02.07
데이터베이스 작성  (0) 2022.01.27
INSERT DELETE UPDATE  (0) 2022.01.23
GROUP BY  (0) 2022.01.22
연습문제  (0) 2022.01.22