05. Data 조회

Last updated - 2024년 11월 21일 Edit Source

    유튜버 쉬운코드 님의 데이터베이스 강의를 정리한 내용


    # 데이터 조회

    # SELECT


    1
    
    SELECT 속성 FROM 테이블명 [WHERE 조건];
    

    1
    
    SELECT name, position FROM employee WHERE id = 9;
    
    • selection condition : 조건을 명시해주는 것
      • WHERE id = 9;
    • projection condition : 관심있어 하는 속성 리스트
      • SELECT name, position



    ex) project 2002를 리딩(leading)하고 있는 임직원의 ID와 이름과 직군 조회

    1
    2
    3
    
    SELECT employee.id, employee.name, position
    FROM project, employee
    WHERE project.id = 2002 and project.leader_id = employee.id;
    
    • selection condition : 조건을 명시해주는 것
      • WHERE project.id = 2002 and project.leader_id = employee.id;
    • join condition : 테이블을 연결시켜주는 조건
      • project.leader_id = employee.id;
    • projection condition : 관심있어 하는 속성 리스트
      • SELECT employee.id, employee.name, position

    • 테이블 이름을 같이 명시해두지 않은 id와 name은 어떤 테이블의 것인지 알 수 없음
    • 그래서 테이블 이름을 반드시 명시해줘야함.

    • 모호하다는 오류 뜨는거 보이지!?

    # AS 별칭짓기

    AS는 테이블이나 attribute에 별칭(alias)을 붙일 때 사용

    • AS는 생략 가능

    • 근데, 이렇게 불러오면 SELECT 결과가 id, name, position 이렇게 뜰거임
    • 리더의 아이디, 리더의 이름으로 명시해주고 싶다면? AS 사용!

    • AS는 생략 가능!!

    # DISTINCT

    DISTINCT는 SELECT 결과에서 중복되는 tuples은 제외하고 싶을 때 사용

    1
    
    SELECT DISTINCT 속성명 FROM 테이블
    



    ex) 디자이너들이 참여하고 있는 프로젝트들의 ID와 이름을 알고싶음

    • WORKS_ON 테이블이 나머지 두 테이블을 연결해주는 연결고리 역할

    • 근데 결과를 보면 중복이 발생. 이때 DISTINCT 사용!



    # LIKE


    LIKE는 문자열에 맞는 pattern matching 할 때 사용

    • %는 0개 이상의 임의의 개수를 가지는 문자를 의미
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    // 속성이 N 문자로 시작
    SELECT 속성명 FROM 테이블명
    WHERE 속성 LIKE 'N%';
    
    // 속성이 N 문자로 끝나는
    SELECT 속성명 FROM 테이블명
    WHERE 속성 LIKE '%N';
    
    // 속성에 N이 들어가는
    SELECT 속성명 FROM 테이블명
    WHERE 속성 LIKE '%N%';
    
    // 속성에 N이 들어가면서 4글자
    SELECT 속성명 FROM 테이블명
    WHERE 속성 LIKE 'N _ _ _';
    

    escape 문자와 함께 LIKE 쓰고싶으면?

    • %로 시작하거나 _로 끝나는 프로젝트 이름을 찾고싶다면?
    • SELECT name FROM project WHERE name LIKE '\%%' or name LIKE '%\_';



    ex) 이름이 N으로 시작하거나 N으로 끝나는 임직원들의 이름 알고싶음



    ex) 이름에 NG가 들어가는 임직원들의 이름을 알고싶음



    ex) 이름이 J로 시작하는, 총 네 글자의 이름을 가지는 임직원들의 이름 알고싶음



    # asterisk

    Asterisk(*, 애스터리스크)는 선택된 tuples의 모든 attributes를 의미


    # 주의사항

    1. SELECT로 조회할 때 조건들을 포함해서 조회한다면 이 조건들과 관련된 attributes에 index가 걸려있어야 함
      • 그렇지 않다면 데이터가 많아질수록 조회 속도가 느려짐
      • ex) SELECT * FROM employee WHERE position = 'dev_back';
        • positon에 대해 index가 걸려 있어야 employee 테이블에 데이터가 아무리 많이 있다고 해도 쿼리문의 실행 속도가 느려지지 않고 여전히 빠르게 유지될 것
    2. MySQL 기준으로 작성된거라 다른 RDBMS와 SQL 문법이 조금씩 다를 수 있음

    Comment