IT Dictionary/Database

데이터베이스 SQL SELECT문 총정리

Jaebins 2024. 11. 8. 22:48
반응형

SELECT

  • DML중 조회를 담당하는 구문으로, 외부 스키마(사용자 관점)에서 주로 사용된다.
  • 테이블뿐만 아니라, 뷰도 조회가 가능하다.
SELECT {ALL | DISTINCT} [속성] FROM [테이블]  {WHERE [조건]} {GROUP BY [속성] HAVING [조건]} {ORDER BY [DESC | ASC]}

1. {ALL | DISTNCT}

  • ALL : 중복을 포함해준다. (기본값, 생략가능)
SELECT ALL * FROM 구매고객
번호 이름 상품
1 홍길동
2 이순신 오렌지
3 홍길동 오렌지

 

  • DISTINCT : 중복을 제거해준다.
SELECT DISTINCT * FROM 구매고객
번호 이름 상품
1 홍길동
2 이순신 오렌지

 

2. {WHERE}

  • 조건을 적용하여 투플들을 검색한다.
  • WHERE [조건] 으로 작동한다.
SELECT * FROM 구매고객 WHERE 학생 = '홍길동'
번호 이름 상품
1 홍길동
3 홍길동 오렌지

 

  • 비교 연산자(>, >=, <, <=, <>) 논리 연산자(AND, OR, NOT)도 사용이 가능하다.
SELECT * FROM 구매고객 WHERE 번호 > 2
번호 이름 상품
3 홍길동 오렌지

 

  • Like : 부분적으로 일치하는 조건으로 검색 
SELECT * FROM 구매고객 WHERE 이름 Like "홍%"
/* 이름이 홍씨로 시작하는 모든 투플을 검색함 (글자수 상관X) */
SELECT * FROM 구매고객 WHERE 이름 Like "홍_"
/* 이름이 홍씨로 시작하는 모든 투플을 검색함 (홍으로 시작하면서 두글자인 투플 검섹) */

 

  • IS NULL: 속성값이 NULL 인지 확인
SELECT * FROM 구매고객 WHERE 이름 IS NULL
/* 이름이 NULL 인지 확인 */
SELECT * FROM 구매고객 WHERE 이름 IS NOT NULL
/* 이름이 NULL 이 아닌지 확인 */

 

3. {GROUP BY}

  • 지정한 속성을 기준으로 그룹을 만들어 출력한다.
  • 집계함수(SUM, COUNT 등), AS 구문과 함께 주로 사용한다.
  • AS : 속성을 다른 이름으로 바꿔줌 (조회할 때만)
SELECT 이름, COUNT(상품) AS 총구매량 FROM 구매고객 GROUP BY 이름
이름 총구매량
홍길동 2
이순신 1

 

4. {HAVING}

  • GROUP BY 에 조건을 추가한다. (WHERE 과 유사)
SELECT 이름, COUNT(상품) AS 총구매량 FROM 구매고객 GROUP BY 이름 HAVING COUNT(상품) >= 2
이름 총구매량
홍길동 2

 

5. {ORDER BY}

  • DESC : 내림차순 정렬
  • ASC : 오름차순 정렬
  • 여러 개의 속성들을 정렬할 수 있다.
SELECT * FROM 구매고객 ORDER BY 이름 DESC, 번호 ASC
번호 이름 상품
2 이순신 오렌지
1 홍길동
3 홍길동 오렌지

 


 

JOIN (조인 검색)

  • 데이터 검색을 위해 여러개의 테이블을 연결하는 것
  • 외래키를 기준으로 테이블을 연결한다. (즉, 도메인이 같야아함)
번호 이름 상품
1 홍길동
2 이순신 오렌지
3 홍길동 오렌지

구매고객 테이블

 

이름 나이
홍길동 20
이순신 30
이성계 50

고객 테이블

 

 

  • INNER JOIN (내부 조인) : 테이블 간 교집합을 조회한다.
SELECT 구매고객.이름, 구매고객.상품, 고객.나이 FROM 구매고객 INNER JOIN 고객 ON 구매고객.이름 = 고객.이름
이름 상품 나이
홍길동 20
이순신 오렌지 30
홍길동 20
ON 구매고객.이름 = 고객.이름
구매고객 테이블에 존재하는 이름만 고객 테이블에서 조회한다.


  • OUTER JOIN (외부 조인) : 테이블 간 차집합 + 교집합을 조회한다. (LEFT, RIGHT)
SELECT 구매고객.이름, 구매고객.상품, 고객.나이 FROM 고객 LEFT OUTER JOIN 주문고객 ON 구매고객.이름 = 고객.이름
SELECT 구매고객.이름, 구매고객.상품, 고객.나이 FROM 주문고객 RIGHT OUTER JOIN 고객 ON 구매고객.이름 = 고객.이름

 

이름 상품 나이
홍길동 20
이순신 오렌지 30
홍길동 20
이성계 NULL 50

 


 

부속 질의문(이중 SELECT)

  • SELECT 안에 또 다른 SELECT를 넣는다.
  • 주로 WHERE 절에서 사용된다.
SELECT * FROM 고객 WHERE 나이 = (SELECT 나이 FROM 고객 WHERE 이름='홍길동')
이름 나이
홍길동 20

 

반응형