[SQL]Chapter2. SQL의 기초부터 탄탄히!(기본쿼리 1)

차보경·2023년 1월 3일
0

SQL

목록 보기
14/14
post-thumbnail

※ 하기 내용은 class101 비전공자도 쉽게 배워 바로 써먹는 실무 활용 SQL을 정리한 내용입니다.

가장 많이 사용하는 문이 SELECT 문! DB중 필요한 정보를 원하는 형태로 만들어서 꺼내올 때 사용되기 때문에 가장 많이 사용됨~


2.1 SELECT문의 기본 구조 이해

  • 원하는 데이터를 추출하기 위해서는 업무적인 요구사항을 먼저 정의해야한다.
    • SQL을 작성한다는 것은 업무적인 요구사항을 SQL문법을 이용해 적는 것
    • 이 요구사항이 구체적이여야 정확한 SQL 문을 작성할 수 있고, 그에따라 원하는 데이터 집합을 조회할 수 있다
      EX. ~~ 데이터를 뽑아주세요, ~~ 데이터를 뽑아보고 싶다. ,, -> SQL을 사용한다 = 요구사항을 문법에 맞춰서 기술하는 것
  • SELECT문은 DB에 저장된 데이터를 조회하는 구문
    • 저장된 데이터를 저장된 그대로의 값을 조회하거나 가공하여 조회할 수 있음
    • 하지만, 테이블에 저장된 데이터 자체를 변경하진 않음

예제

  • 회사에 있는 사원중에서 월급이 1000$이상인 사원들의 직업군별 집계 정보를 보고자함. (단, 인원이 3명 이상인 직업군만 유효직업으로 봄). 보고자하는 집계정보는 직업군별 인원수, 월급 합계, 최종 입사자의 입사일자임. 결과는 직업군의 이름 순으로 정렬하고자 함

  • 먼저, 어디에서 데이터를 가져와야할지 봐야함.
    -> 사원 테이블에 있는 정보를 봐야겠다 -> 월급이 1000$이상인 사원들 -> 직업군별 집계 정보(GROUP BY ~?) -> 인원이 3명 이상인 직업군만 유효(COUNT로 CUT) -> 집계정보는 직업군별 인원수, 월급 합계, 최종 입사자의 입사일자 -> 직업군의 이름 순

SELECT문의 논리적 처리 순서


1) EMP TABEL에서 시작
2) SAL 가 1000$ 이상
3) JOB COL로 그룹을 짓는다
4) COUNT 3이상의 조건만 갖는(HAVING) 그룹을
5) 3COL 만 SELECT
6) JOB COL 값으로 정렬(ORDER BY)

  • 해당 순서를 잘 기억하면 수월하게 SQL 문을 작성할 수 있음

2.2 데이터 조회(SELECT절과 FROM절)

  • SELECT문은 DB의 데이터를 조회하는 구문

  • 기본적으로 SELECT 절과 FROM 절로 구성

    • SELECT 절에는 조회할 칼럼 또는 표현식을 ,로 구분하여 기술
    • FROM 절에는 조회할 테이블을 기술
    SELECT TABLE_NAME, TABLESPACE_NAME
    		FROM USER_TABLES A ;
    • SELECT 절에 *를 기술하면 테이블의 전체 COLUMN이 조회됨
    SELECT *
      FROM USER_TABLES A ;
    • ✨✨실무활용 TIP) COL기반의 DB에서 SELECT절에 *을 사용하면 조회 성능이 크게 느려질 수 있으므로 주의해야함! SELECT절에 필요한 COL만 기술
    • 참고) SQL*PLUS의 DESC[RIBE] 명령어를 사용하면 테이블의 구조를 확인할 수 있다
  • SELECT 절에 DISTINCT 키워드를 기술하면 중복 값이 제거된 결과가 반환됨 (카테고리, 종류를 나타낼 때 사용됨. EX.어떤 종류의 아이템이 있는지)

    • ALL 키워드를 기술하면 전체 행이 나오지만, 일반적으로 생략됨(DEFAULT)
      SELECT DISTINCT TABLE_NAME
    		  FROM USER_TABLES A ;
  • SELECT 절의 컬럼에 별칭(COLUMN ALIAS)을 지정할 수 있음

    • 조회결과의 칼럼 레이블을 간결하게 나타낼 수 있음
    • 칼럼 별칭은 AS 키워드 사용(생략할 수 있으나 가독성을 위해 기술하는 게 좋음)
    • Double Quotation(")을 사용하면 별칭에 공백, 특수문자, 대소문자 포함이 가능하다('은 다른 용도로 사용됨)
    SELECT TABLE_NAME AS "부서 명 Table"
    		FROM USER_TABLES A ;

  • FROM 절의 테이블에도 별칭(TABLE ALIAS)을 지정할 수 있음

    • 테이블 별칭은 테이블명 뒤에 한칸 띄우고 바로 기술
    • 칼럼 앞에 테이블 별칭을 사용하면, 해당 컬럼이 어떤 테이블의 컬럼인지 명시할 수 있음
      SELECT A.TABLE_NAME  -- A테이블의 TABLE_NAME 컬럼
    		  FROM USER_TABLES A ; -- USER_TABLES를 A라고 별칭
    • 참고) FROM절에 여러개의 테이블이 기술 될 경우, 테이블 별칭(또는 테이블 명)을 필수적으로 사용해야한다.

      여기서 SELECT A.DEPTNO ~~ WHERE B.DEPTNO 식으로 써줘야함
  • SELECT 절에 컬럼과 함께 리터럴(Literal)을 기술할 수 있음

    • 리터럴은 변하지 않는 값으로, 프로그래밍 언어의 상수와 유사함 = 내가 하드코딩으로 넣어주는 값 -> 반복적으로 출력됨
    • 문자, 숫자, 날짜 리터럴이 있음
    • 문자 리터럴을 Single Quotation(')으로 감싸 기술하고, 날짜 리터럴은 DATE 키워드와 함께 기술

      ???? 아 ''안에 들어가는 값을 넣는 거네...ㅎ
      SELECT A.TABLE_NAME,
      		'Chabbo' AS char_literal, 0823 AS num_literal, DATE'2023-01-03' AS date_literal
        FROM USER_TABLES A ;
    • 보면 문자는 왼쪽정렬, 숫자는 오른쪽정렬(0이 사라짐), 날짜는 일시로 표시되는 것이 보임
      • DATE는 DATE'20230103'이런식으로 입력하면 오류남. 숫자도 '0823'으로 하면 0823으로 왼쪽정렬되서 나타남
  • SELECT 절의 컬럼이나 리터럴에 대해 연산자를 사용할 수 있음

    • 산술 연산자는 숫자값과 날짜 값에대해 사용할 수 있음

      • 숫자값 간에 산술연산은 수학에서 사칙연산(+-*/)과 동일하게 수행되며, 괄호로 우선순위를 지정
      • 날짜값과 숫자값 간에는 +,- 연산만 가능하며, 숫자 값은 일수(DAY)로 처리됨
      • 날짜값 간에는 - 연산만 가능하며, 결과값으로 두 날짜간의 일수(DAY)가 나옴
    • ✨✨연결연산자는 문자값에 대해 사용할 수 있음 (많이 사용!!!)

      • 연결 연산자(||)는 여러 개의 문자 값들을 연결시켜 하나의 문자 값을 만듦
      • 문자값이 아닌 피연산자는 문자 값으로 변환한 뒤에 연결시킴
  • NULL

    • NULL은 값이 없거나 정해지지 않은 것을 의미하며, 0 또는 공백' '과는 다름
    • 오라클 DB는 NULL과 빈 문자값''을 동일하게 처리함
    • NULL을 포함한 산술연산의 결과는 항상 NULL임 -> 잘 처리해줘야함
  • DUAL 테이블 (오라클 한정 사용, 오라클에서 많이 사용)

    • SELECT 문의 기본 구조(SELECT, FROM절)를 갖추기 위한 일종의 DUMMY TABLE(임시테이블?)
    • 사용자 SYS가 소유하며 모든 사용자가 엑세스 가능함
    • 1개의 행, 1개의 열만을 가짐
    • 리터럴 조회, 행 복제 등 다양한 용도로 활용 할 수 있음 (-> 건에 맞춰 복제되어나오니까 듀얼 하나로 값 확인하는 용도로 사용)
  • 주석(Comments)

    • 주석은 SQL문 결과에 영향을 주지 않음, 관련 메모나 정보 등을 기술
    • 단일 행 : -- 뒤에 내용 기술 (줄이 바뀌기 전까지 유지)
    • 다중 행 : /* ~ */ 사이에 주석 기술 (줄이 바뀌어도 주석 유지)

뭐든지 경험하면서 익숙해지면 할 수 있다!!!


2-3. 필요한 데이터만 골라서 조회하기 (WHERE절)

  • WHERE절

    • SELECT문에 WHERE절을 사용하여 조회되는 데이터(행)를 제한함
    • WHERE 절에는 행을 제한하기 위한 조건을 기술
      • 조건은 각 행마다 평가되며 TRUE/FALSE/UNKNOWN 중 하나를 반환함
      • 조건의 결과가 TRUE인 행들만 결과 집합에 포함됨
    • WHERE 절 조건의 종류
      • 비교조건, 논리조건, IN조건, BETWEEN 조건, LIKE조건, IS NULL 조건
  • 비교조건

    • 같지 않다 !=을 많이 사용하지 않음(가능은 함)
  • 논리조건

    • WHERE 절에 AND, OR 논리 조건을 사용하면 조건들을 결합하여 평가할 수 있음
    • 1 AND 2 : 1, 2 모두 TRUE여야함
    • 1 OR 2 : 1, 2 둘중 하나만 TRUE면 됨
  • AND, OR 논리 간 우선 순위

    • AND 조건이 OR 조건보다 먼저 평가됨( = 우선순위가 높다)
    • OR 조건만 처리시
    • AND까지 하면 OR에서 많이 사라진다
    • ✨✨WHERE절에서 AND와 OR 논리조건이 함께 사용되는 경우! 괄호를 사용해서 우선순위를 지정해주는 것이 좋음
  • 논리조건

    • 조건앞에 NOT 논리조건을 사용하면 조건에 반대되는 결과를 리턴
    • 해석이 어려워짐 -> 걍 쓰지말자... (아님 벤다이어그램 그려야해...)

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글