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

+ Recent posts