728x90
salarytable
id
|
name
|
salary
|
year
|
1
|
LeafC
|
100
|
2023
|
2
|
LeafC2
|
101
|
2014
|
3
|
LeafC3
|
102
|
2015
|
4
|
LeafC4
|
103
|
2016
|
5
|
LeafC5
|
104
|
2017
|
6
|
LeafC6
|
105
|
2018
|
7
|
LeafC7
|
106
|
2019
|
8
|
LeafC8
|
107
|
2020
|
9
|
LeafC9
|
108
|
2021
|
10
|
LeafC10
|
109
|
2022
|
mssql에서 salary가 가장 높은 사람의 정보를 검색하는 방법
SELECT TOP 1 id mssql에서 사용가능 오라클에서는 FETCH FIRST 1 ROWS ONLY;
FROM salarytable
ORDER BY salary DESC;
가장 높은 salary의 id를 검색하고 그 결과로 다시 검색한다.
SELECT *
FROM salarytable
WHERE id = 10;
서브 쿼리를 사용하여 두 쿼리를 하나로 합칠 수 있다.
SELECT *
FROM salarytable
WHERE id = (SELECT TOP 1 id FROM salarytable ORDER BY salary DESC);
만약 검색한 결과가 하나가 아니라면?
예를 들어 salary가 가장 높은 5명의 정보를 알고 싶다면
SELECT *
FROM salarytable
WHERE id IN (SELECT TOP 5 id FROM salarytable ORDER BY salary DESC);
= 를 사용할 때는 단일값 즉, 하나의 값만 비교할 때 사용하고 IN을 사용하면 여러개의 값 중 포함되어 있는지를 확인 할 수 있다.
서브쿼리는 WHERE 뿐만 아니라 다른 곳에서도 사용이 가능하다.
SELECT (SELECT COUNT(*) FROM salarytable);
INSERT 에서 사용
salarytable에서 salary가 가장 높은값에 1을 더한 값을 삽입
INSERT INTO salarytable
VALUES (11, 'LeafC11', (SELECT MAX(salary) + 1 FROM salarytable), 2013);
INSERT SELECT
salarytable을 salarytable2에 통째로 내용을 복사하기
INSERT INTO salarytable2
SELECT id, name, salary, year FROM salarytable;
id, age, height 열이 있는 ahtable에 salarytable의 값을
각각 id, id + 20, salary - 30의 값으로 넣기
INSERT INTO ahtable
SELECT id, id + 20, salary - 30 FROM salarytable;
상관 관계 서브쿼리
ahtable의 id와 salarytable의 id를 비교해서 같은게 있으면 name 출력
SELECT name
FROM salarytable
WHERE EXISTS (SELECT * FROM ahtable WHERE salarytable.id = ahtable.id);
728x90
'Database' 카테고리의 다른 글
정규화 (0) | 2023.05.10 |
---|---|
CREATE, DROP, ALTER (0) | 2023.05.10 |
INSERT, DELETE, UPDATE (0) | 2023.05.10 |
GROUP BY (0) | 2023.05.10 |
집계 함수 (COUNT, SUM, AVG, MIN, MAX) (1) | 2023.05.10 |