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 |