[DataBase] SQL의 Select문

MINJEE·2023년 8월 24일

SMHRD_2_DataBase

목록 보기
3/9
post-thumbnail

SELECT문 - 검색, 조회

: 데이터베이스에 보관되어 있는 데이터 조회

1 ) SELECT문의 기본 형식

    SELECT [ALL|DISTINCT] 필드명들 (전체 조회 시 * )
    FROM 테이블1, 테이블2, ...
    [WHERE 조건]
    [GROUP BY 필드명
    	[HAVING 그룹화조건]]
    [ORDER BY 필드명 [ASC|DESC]];

2 ) 해석 순서

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
: 테이블에서 → 조건에 맞는 데이터 중 → 그룹기준필드에 따라 그룹화하여 → 그룹화된 조건을 만족하는 데이터 중 → 선택한 필드를 → 정렬기준 필드에 맞게 정렬하여 출력

3 ) 각 구문 설명

  1. FROM 테이블명1, 테이블명2, … : 참조할 테이블 지정

    • 테이블명에 별칭 지정 시, SELECT문 안에서는 무조건 테이블명이 아닌 별칭으로 사용
    select * from table1 A, table2 B where table1.field1 = table2.field2; --잘못된 예
    select * from table1 A, table2 B where A.field1 = B.field2; --바른 예
  2. WHERE 조건식 : 필요한(조건에 맞는) 데이터만 선택

    • 조건식이 여러개 일 때, AND/OR 사용
      --student테이블에서 나이가 26이면서 통계학과인 데이터 선택
      select * from student where age=26 and department='통계학';
      --나이가 26이거나 28인 학생 선택
      select * from student where age=26 or age=28;
  3. GROUP BY 필드명1, … : 필드명 기준으로 그룹화

    • 관련 함수 : ROLLUP, CUBE, GROUPING SETS
      • GROUP BY ROLLUP(A,B) : (A,B) 소계, A소계, 전체
      • GROUP BY CUBE(A,B) : (A,B)소계, A소계, B소계, 전체
      • GROUP BY GROUPING SETS(A,B) : A소계, B소계
      • GROUP BY GROUPING SETS(A,B,(A,B),()) : A소계, B소계, (A,B)소계, 전체
  4. HAVING 조건 : 그룹화된 상태에서 조건에 맞는 데이터만 선택

  5. SELECT [ALL|DISTINCT] 필드명1, [ALL|DISTINCT] 필드명2, … : 선택된 데이터에서 필드 선택

    • ALL : 필드명 조회 시 중복 허용(default값)
    • DISTINCT : 필드명 조회 시 중복 제거
    • SELECT * : 모든 필드 조회 시 필드명 대신 * 사용
    • 필드명 대신 연산 대입가능 (예시 : SELECT SAL+BONOUS)
    • 별칭 지정하는 4가지 방식
       select 필드명 별칭, 필드명 “별칭”, 필드명 as 별칭, 필드명 as “별칭” from 테이블명
  6. ORDER BY 필드명1 [ASC|DESC], 필드명2 [ASC|DESC], … : 필드명 기준으로 오름차순/내림차순 정렬

    • 필드 값이 숫자,영문,한글이 혼합되어 있을 때, 숫자 → 영문 → 한글 순으로 정렬
    • ASC : 오름차순 정렬(default값)
    • DESC : 내림차순 정렬

4 ) 사용 예시

--예시
SELECT * FROM HELP; --help테이블에서 모든 필드 출력
select topic from help; --help테이블에서 topic필드 출력
select topic, seq from help; --help테이블에서 topic,seq필드 출력
select topic, seq from help where topic = 'BREAK'; --help테이블에서 topic이 'BREAK'인 데이터 중 topic,seq 출력
select topic as "제목", seq as "순서" from help where topic = 'BREAK'; --위와 동일, topic을 제목, seq를 순서로 별칭 지정
select topic "제목", seq "순서" from help where topic = 'BREAK'; --as는 생략가능
    
select topic from help;
select all topic from help; --all은 기본값
select distinct topic from help; --help테이블에서 topic을 중복제거하여 출력
select distinct topic from help order by topic desc; --help테이블에서 topic을 중복제거하고 topic을 기준으로 내림차순하여 출력
    
//HELP 테이블에서 제목, 순서, 내용이라는 필드이름을 사용해서 모든 데이터를 출력
//단, SEQ에 대해 내림차순, 제목에 대해 오름차순 정렬
SELECT TOPIC "제목" , SEQ "순서", INFO "내용" FROM HELP ORDER BY SEQ DESC, TOPIC;
    
//HELP 테이블을 사용하여 번호가 2번인 TOPIC과 INFO만 출력
SELECT TOPIC, INFO FROM HELP WHERE SEQ = 2;
profile
개발, 분석 배운 내용 정리하기!

0개의 댓글