3장 SELECT : 데이터 조회의 기본

·2023년 12월 27일
0

모두의 SQL

목록 보기
2/10

[SELECT문의 기본 문법]

  • SELECT 문
    • 데이터베이스에 있는 데이터 조회 시 사용

    • 단지 선택된 데이터를 화면에 출력할 뿐 데이터의 값이 데이터베이스에 반영(삽입, 갱신, 삭제)되지는 않음

      // [] 안에 있는 내용은 선택 사항
      // ; SQL문이 끝났음을 의미
      // 볼드체는 필수 입력
      // SELECT절은 열을 선택하는 역할
      // FROM절은 테이블을 지정하는 역할
      
      /* SELECT [DISTINCT] 열 이름 [or 별칭(alias)]
      FROM 테이블 이름
      [WHERE 조건식]
      [ORDER BY 열 이름 [ASC or DESC]]; */
  • employees 테이블의 모든 정보 출력하기
    SELECT * // *은 '모든 열'을 의
    FROM employees;
  • employees 테이블에서 employee_id, first_name, last_name을 출력하기
    SELECT employee_id, first_name, last_name
    FROM employees;
  • 행의 순서(오름차순/내림차순) 정하기 (정렬하기)
    ORDER BY 열 이름 [ASC or DESC]
  • employees 테이블에서 employee_id, first_name, last_name을 출력하고 employee_id를 기준으로 내림차순 정하기
    SELECT employee_id, first_name, last_name
    FROM employees
    ORDER BY employee_id DESC;
    
    // ASC : 오름차순 정렬 (기본 정렬 방법이므로 ASC를 입력하지 않아도 오름차순으로 정렬됨)
    // DESC : 내림차순 정렬
  • 중복된 출력 값 제거하기
    DISTINCT 열 이름
    SELECT DISTINCT job_id
    FROM employees;
  • 별칭 사용하기
    • SELECT문의 결과를 출력할 때 일반적으로 열 이름은 테이블을 정의할 때 명명한 열의 제목(열 이름)을 출력함

      → 원래 명명된 열 이름 외에 열 이름으로 임의로 바꿔 쓰고자 할 때 사용하는 것이 별칭(alias)

    • AS

      열 이름을 변경하려면 AS 접속사를 사용해야 함
      
      단, SELECT 문에 기술할 때는 AS 접속사 생략 가능
      SELECT 열 이름 AS 별칭
      
      // 별칭의 특징
      // (1) 별칭은 열 이름을 임시로 변경하는 데 사용함 (원래의 열 이름이 물리적으로 변경되는 것은 아님)
      // (2) 별칭은 열 이름 바로 뒤에 사용하며 열 이름과 별칭 사이에는 AS 접속사를 넣음
      // (3) AS 접속사는 생략 가능
      // (4) 별칭에 공백, 특수문자, 대소문자 등을 사용하려면 "Emp Id"와 같이 ""로 묶어서 사용해야함
  • employees 테이블에서 employee_id는 ‘사원번호’, first_name은 ‘이름’, last_name은 ‘성’으로 출력하기
    SELECT employee_id AS 사원번호, first_name AS 이름, last_name AS 성
    FROM employees;
  • 데이터 값 연결하기
    • ||
      각 열에 따로 담겨 있는 데이터 값을 하나로 붙이거나 추가 수식을 붙여 출력하는 경우 사용

      [열 이름]||[열 이름] or [열 이름]||'[문자]' // 문자를 붙일 때는 '' 사용
  • employees 테이블에서 employee_id를 출력하고 first_name과 last_name을 붙여서 출력하기
    SELECT employee_id, first_name||last_name
    FROM employees;
    EMPLOYEE_IDFIRST_NAME
    1100StevenKing
    2101NeenaKochhar
  • employees 테이블에서 employee_id를 출력하고, first_name과 last_name을 붙여서 출력하되 가운데 한 칸을 띄우기 다음 열에는 email을 출력하되 @company.com 문구를 붙여서 출력하기
    SELECT employee_id,
    			 first_name||' '||last_name,
    			 email||'@'||'company.com'
    FROM employees;
  • 산술 처리하기 : 데이터 값끼리 계산 데이터를 사전에 가공하거나 리포트를 작성할 목적으로 데이터 값끼리 계산하려면 산술 연산자를 사용해야 함
    • 산술 연산자 +, -, *, /이 있고, SELECT 문에서는 FROM절을 제외한 모든 절에서 산술 연산자 사용 가능
  • employees 테이블에서 employee_id, salary, salary에 500을 더한 값, 100을 뺀 값, 10%를 추가해서 2로 나눈 값을 출력하기
    SELECT employee_id, salary, salary+500, salary-100, (salary * 1.1)/2
    FROM employees;
  • employees에서 employee_id를 ‘사원번호’, salary를 ‘급여’, salary+500을 ‘추가급여’, salary-100을 ‘인하급여’, (salary*1.1)/2를 ‘조정급여’로 출력하기
    SELECT employee_id AS 사원번호,
    			 salary AS 급여,
    			 salary+500 AS 추가급여,
    			 salary-100 AS 인하급여,
    			 (salary*1.1)/2 AS 조정급여
    FROM employees;

[WHERE 조건 절을 활용한 데이터 검색]

  • WHERE 절
    • 사용자가 원하는 데이터를 조회할 때 사용 (조건 지정 용도)

    • FROM절 다음에 위치

    • 조건 절에는 비교 연산자, SQL 연산자, 논리 연산자, 열 이름, 표현식, 숫자, 문자 등을 쓸 수 있음

      SELECT 열 이름     // 출력하려는 열 (3) 열을 선택하여 조회
      FROM 테이블 이름   // 참조하려는 테이블 (1) 참조하려는 테이블로부터
      WHERE 원하는 조건; // 조건식 (2) 해당 조건식으로
  • 연산자 종류와 우선순위
    • 연산자 우선 순위 : 괄호 > 부정 연산 > 비교 연산 > SQL 연산

    • 논리 연산자 우선 순위 : NOT > AND > OR

      연산자 종류설명예시
      비교 연산자조건을 비교= (같다)
      <> (같지 않다)
      > (보다 크다)
      >= (보다 크거나 같다)
      < (보다 작다)
      <= (보다 작거나 같다)
      SQL 연산자조건 비교를 확장BETWEEN a AND b (a와 b 사이에 값이 있음, a와 b값 포함)
      IN (list 중 어느 값이라도 일치)
      LIKE ‘비교 문자’ (비교 문자와 형태가 일치 : %, _ 사용)
      IS NULL (null 값을 가짐)
      논리 연산자조건 논리를 연결AND (앞의 조건과 뒤의 조건을 동시에 만족해야 할 때)
      OR (앞이나 뒤 중 하나라도 참인 경우)
      NOT (뒤의 조건에 대해 반대 결과를 반환)

  • employees 테이블에서 employee_id가 100인 직원 정보를 출력하기
    SELECT *
    FROM employees
    WHERE employee_id = 100; // 숫자가 아니라 문자라면 ''를 붙여야 함 (WHERE first_name = 'David')
  • employees 테이블에서 first_name이 David인 직원 정보 출력하기
    SELECT *
    FROM employees
    WHERE first_name = 'David';
  • employees 테이블에서 employee_id가 105 이상인 직원 정보 출력하기
    SELECT *
    FROM employees
    WHERE employee_id >= 105;
  • BETWEEN 연산자
    • 두 값의 범위에 해당하는 행을 출력할 때 사용 (a 이상 b 이하의 값을 조회) a에 작은 값을 기술하고, b에 큰 값을 기
  • employees 테이블에서 salary가 10,000 이상이고, 20,000 이하인 직원 정보를 출력하기
    SELECT *
    FROM employees
    WHERE salary BETWEEN 10000 AND 20000;
  • IN 연산자
    • 조회하고자 하는 데이터 값이 여러 개일 때 사용 (다중 행 연산자) 여러 개의 값 목록 중에서 하나의 값이라도 만족하면 조건에 해당하는 결과 출력
  • employees 테이블에서 salary가 10000, 17000, 24000인 직원 정보 출력하기
    SELECT *
    FROM employees
    WHERE salary IN (10000, 17000, 24000);
  • LIKE 연산자

    • 조회 조건 값이 명확하지 않을 때 사용 (%, _와 같은 기호 연산자와 함께 사용)
    • 조건에는 문자나 숫자 포함 가능
    • %는 ‘모든 문자’를 의미, _는 ‘한 글자’를 의미
  • employees 테이블에서 job_id 값이 AD를 포함하는 모든(%) 데이터를 조회하기

    SELECT *
    FROM employees
    WHERE job_id LIKE 'AD%'; // 맨 앞에 AD라는 문자 값을 가지면서 그 뒤로 모든 문자(%)를 포함하는 데이터
    // '%AD'나 '%AD%' 조건 등으로 응용 가능
  • employees 테이블에서 AD를 포함하면서 AD 뒤에 따라오는 문자열이 3자리인 데이터 값을 갖는 직원 정보(job_id)를 조회하세요(AD + 3자리 데이터 값)
    SELECT *
    FROM employees
    WHERE job_id LIKE 'AD___';
  • IS NULL 연산자

    • 데이터 값이 null인 경우를 조회하고자 할 때 사용
  • employees 테이블에서 manager_id가 null 값인 직원 정보를 출력하기

    SELECT *
    FROM employees
    WHERE manager_id IS NULL;
  • employees 테이블에서 salary가 4000을 초과하면서(AND), job_id가 IT_PROG인 값을 조회하기
    SELECT *
    FROM employees
    WHERE salary > 4000 
    AND job_id = 'IT_PROG';
  • employees 테이블에서 salary가 4000을 초과하면서(AND) job_id가 IT_PROG거나(OR) FI_ACCOUNT인 경우를 조회하기
    SELECT *
    FROM employees
    WHERE salary > 4000 
    AND job_id = 'IT_PROG' 
    OR job_id = 'FI_ACCOUNT';
  • 부정 연산자
    구분연산자
    부정 비교!= (같지 않다)
    <> (같지 않다)
    NOT 열 이름 = (~와 같지 않다)
    NOT 열 이름 > (~보다 크지 않다)
    부정 SQLNOT BETWEEN a AND b (a와 b 사이에 값이 없다)
    NOT IN (list 값과 일치하지 않는다)
    IS NOT NULL (null 값을 갖지 않는다)

  • <> 연산자를 사용해서 employees 테이블에서 employee_id가 105가 아닌 직원을 조회하기
    SELECT *
    FROM employees
    WHERE employee_id <> 105;
  • employees 테이블에서 manager_id가 null 값이 아닌 직원 조회하기
    SELECT *
    FROM employees
    WHERE manager_id IS NOT NULL;

0개의 댓글