일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Elk
- JShell
- 자바기초
- 기초코딩
- 자바 스프링
- 메소드
- 알고리즘
- 배열
- 데이터베이스
- 컴퓨터과학개론
- github
- 초보코딩탈출
- 클래스
- 프로그래밍기초
- 이클립스
- 초보코딩
- 코딩초보
- 리눅스
- 제이쉘
- JAVA기초
- 자바
- spring
- 프로그래밍언어
- eclips
- Java
- Git
- 자바프로그래밍
- 스프링
- 프로그래밍
- 스프링 기초
- Today
- Total
키보드워리어
[databases] 서브쿼리 본문
안녕하세요 블로그 방문자 여러분, 반갑습니다.
오늘은 databases - 서브쿼리를 포스팅하려고 합니다.
서브 쿼리
서브쿼리란? Select 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적인 질의를 의미합니다.
ex)
(Select명령)
SELECT * FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
하부 select명령을 괄호로 묶어 사용합니다.
selcet구, from구, where구 등 명령의 각 구를 기술할 수 있습니다.
1.delete의 where구에서 서브쿼리 사용
select * from sample 54;
no | a
1 | 100
2 | 90
3 | 20
4 | 80
sample54테이블에서 a 열의 값이 가장 작은 행을 삭제하려 한다. 지금이야 카디날러티가 4개밖에 없지만,
수십 수백개라면 전혀 파악하기 힘들 것이다.
이때 필요한 쿼리는 두 가지이다.
- 제일 낮은 값은 무엇인가?
- 1번의 결괏값을 삭제하라
이렇게 두 가지의 쿼리문이 생겼는데 이걸 해결하는 것이 서브쿼리다.
delete from sample54 where a = (select min(a) from samlple54);
- 참고로 이 구문에서 mysql은 delete가 아니라 select을 사용
- 그리고 sql에서는 순차형 언어에서처럼 변수가 존재하지 않는다.
변수가 존재한다면 변수를 지정해 주고 아래 쿼리문을 쓰는 것도 가능합니다.
구현 방법에는 여러 가지가 있으므로 변수를 사용할 수 있다는 것 정도는 알아두겠습니다.
2. 스칼라 값
통상 서브쿼리를 사용하는 4가지 패턴이 있습니다.
- 1개의 값을 반환하는 패턴
- 복수의 행이 반환되지만 열은 하나인 패턴
- 하나의 행이 반환되지만 열이 복수인 패턴
- 복수의 행, 복수의 열이 반환되는 패턴
이 중에서 1번의 패턴은 다른 패턴과 달리 하나의 값만 반환합니다.
- Point:SELECT명령이 하나의 값만 반환하는 것을 '스칼라 값을 반환한다'라고 한다
스칼라 값을 반환하려면 select문에서 단일 열을 지정해줘야 합니다.
그리고 group by로 그룹화를 하면 몇 가지의 그룹으로 나눠질 가능성이 있기 때문에 결과적으로 단일한 값이 반환되지 않을 수 있습니다.
또한, where 조건으로 하나의 행만 검색할 수 있다면 단일 값이 되므로 스칼라값을 반환하는 명령이 됩니다.
- (=) 연산자를 사용하여 비교할 경우에는 스칼라 값끼리 비교할 필요가 있다.
TIP) 서브쿼리를 활용한다면 select, set, from 구 등에서 활용해 볼 수 있다.
이상 부족한 콘텐츠 읽어주셔서 감사드립니다.
내용 피드백이 있는 경우 댓글 부탁드립니다!
다음 포스팅 때 뵙겠습니다! 감사합니다 🤗
'개발 관련 > Database' 카테고리의 다른 글
[databases] 데이터시스템 설계 쌩 기초 (0) | 2023.08.01 |
---|---|
[데이터베이스] 인덱스란? (0) | 2023.07.31 |
[databases]데이터의 일관성을 지키기 위한 로킹(locking) (0) | 2023.07.27 |
[원티드 프리온보딩 챌린지]1주차 어떤 내용 배웠니? (0) | 2023.07.26 |
[데이터중심 애플리케이션 설계] 7장 트랜잭션 - 다중객체연산 (0) | 2023.07.14 |