[SQL 쿡북/01장] 레코드 검색

정은아·2025년 2월 27일

[도서] SQL 쿡북

목록 보기
1/13
post-thumbnail

01장. 레코드 검색


🎨 1.1 테이블의 모든 행과 열 검색하기

🎨 1.2 테이블에서 행의 하위 집합 검색하기

📌 (*): 모든 데이터를 뜻합니다.

ex. SELECT * FROM emp table;

  • 대화형으로 즉석에서 실행하는 쿼리에서는 SELECT * 를 사용하는 편이 더 쉽지만, 프로그램 코드를 작성할 때는 각 열을 개별 지정하는게 더 좋다고 합니다.
  • 쿼리에서 어떤 열을 반환하는지 명확하게 알 수 있고, 자신이 아닌 다른 사용자가 이해하기 쉽기 때문입니다.
  • WHERE절을 사용하면 관심있는 행만 검색할 수 있다. WHERE절의 식이 해당 행에 대해 참이면 반환되는 식으로 진행된다.
    • 여러 조건을 충족하는 행을 반환하는 쿼리 작성 시, OR 및 AND 절과 함께 WHERE절을 사용

🎨 1.3 여러 조건을 충족하는 행 찾기

  • AND, OR 및 괄호 조합을 사용하여 여러 조건을 만족하는 행을 반환한다.
  • 괄호 유무에 따라서 쿼리 결과 값이 다르게 출력된다.

🎨 1.4 테이블에서 열의 하위 집합 검색하기

  • SELECT 절에 열을 지정하면 불필요한 데이터가 반환되지 않기 때문에 네트워크를
    통해 데이터를 검색할 때 특히 중요하다.

🎨 1.5 열에 의미 있는 이름 지정하기

  • AS 키워드를 사용하여 쿼리에서 반환된 열에 새 이름을 지정하는 것을 해당 열의
    별칭 지정이라고 하며, 사용자가 지정한 새 이름을 별칭이라고 한다.
  • 결과를 이해하는 데 큰 도움이 될 수 있다.

🎨 1.6 WHERE 절에서 별칭이 지정된 열 참조하기

  • 별칭을 적용하기 위해서는 서브 쿼리를 사용하여 작업할 수 있다.
  • WHERE 절은 SELECT 절을 시행하기 전에 판단되므로 ‘문제’쿼리의 WHERE 절을
    평가할 때는 아직 별칭이 존재하지 않아 적용할 수 없게 된다.
  • 그러나 FROM절은 WHERE보다 먼저 평가된다.
  • 원래 쿼리를 FROM 절에 배치하면 해당 쿼리의 결과가 가장 바깥쪽 WHERE절 이전에
    생성되고 가장 바깥쪽 WHERE절이 별칭 이름을 ‘확인’한다.
  • 이 기법은 테이블의 열 이름이 이해하기 쉽도록 적절히 지정되지 않은 경우에
    특히 유용하다.

🎨 1.7 열 값 이어붙이기

  • DBMS에서 제공하는 함수를 사용하여 여러 열 값을 연결한다.

    DB2, Oracle, PostgreSQL
        이중 수직선(||)을 연결 연산자로 사용한다.
    MySQL
         CONCAT연산자를 사용한다.


🎨 1.8 SELECT 문에서 조건식 사용하기

  • CASE 식을 사용하면 쿼리로 반환된 값에 대한 조건식을 수행할 수 있다.
  • CASE 식의 결과에 지정된 별칭 STATUS를 볼 수 있으며, ELSE절은 선택 사항이다.
    • ELSE절 생략 시, 해당 값은 NULL 반환

🎨 1.9 반환되는 행 수 제한하기

  • 데이터베이스에서 제공하는 내장 함수를 사용하여 반환되는 행 수를 제어한다.

    DB2
         FETCH FIRST 절을 사용한다.
    - MySQL, PostgreSQL
         LIMIT를 사용하여 같은 작업을 수행한다.
    - Oracle
         WHERE절에서 ROWNUM으로 반환되는 행 수를 제어한다.
         단, ROWNUM = 1이 실제로 첫 번째 행을 반환하는 작업을 수행하기
         때문에 다른 방법과 모순됨을 알 수 있다.
    SQL Server
         TOP 키워드를 사용하여 반환되는 행 수를 제어한다.


🎨 1.10 테이블에서 n개의 무작위 레코드 반환하기

  • 임의의 값을 반환하고자 DBMS에서 지원하는 내장 함수를 사용한다. ORDER BY 절에서 이 함수를 사용하여 행을 무작위 정렬한다.
  • 그 후, 무작위로 정렬된 행에서 반환할 개수를 제한한다.
  • ORDER BY 절은 함수의 반환 값을 받아 결과셋의 순서를 변경할 수 있다.
    Oracle을 사용하지 않는다면, 각자 사용하는 데이터베이스의 내부에서 어떤 일이 일어나고 있는지 (개념적으로) 보여주는 Oracle 해법을 살펴보는 것이 도움이 될 수 있다.
  • ORDER BY 절에 함수를 지정하면 각 행에 대해 계산한 함수의 결과에 따라 정렬이 수행된다.

    DB2
         내장 함수 RAND를 ORDER BY 및 FETCH와 함께 사용한다.
    MySQL
         내장된 RAND 함수를 LIMIT 및 ORDER BY와 함께 사용한다.
    Oracle
         내장된 패키지 DBMS_RANDOM에 있는 함수 VALUE를 ORDER BY 및
         내장 함수 OWNUM과 함께 사용한다.
    PostgreSQL
         내장된 RANDOM 함수를 LIMIT 및 ORDER BY와 함께 사용한다.
    SQL Server
         내장 함수 NEWID를 TOP 및 ORDER BY와 함께 사용한다.


🎨 1.11 null 값 찾기

  • null은 그 자신을 포함하여 다른 무엇과도 비교할 수 ❌
  • 따라서 열이 null인지 테스트 할 때에는 = 또는 ≠를 사용할 수 없다.
    • null 값을 확인하기 위해서는 IS NULL을 혹은 IS NOT NULL을 사용한다.

🎨 1.12 null을 실제값으로 변환하기

  • COALESECE 함수를 사용하여 null을 실제값으로 대체한다.
    • 해당 함수는 하나 이상의 값을 인수로 사용하여 목록에서 첫 번째 null이 아닌 값을 반환
    • null로 작업할 때는 DBMS에서 제공하는 내장 함수를 활용하는게 가장 좋다.
    • 대부분의 경우 여러 함수가 이 작업에서도 동일하게 작동한다.
    • CASE를 사용하여 null을 변환할 수 있으나, COALESCE를 사용하는게 더 쉽고 간단하다.

🎨 1.13 패턴 검색하기


  • 백분율(%) 연산자는 LIKE 패턴 일치 연산에 쓰일 때 모든 문자 시퀀스와 일치한다.
  • 대부분의 SQL 구현에서는 하나의 문자를 의미하는 밑줄(_) 연산자도 제공한다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글