

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Keyspaces의 CQL `SELECT` 문을 사용하여 테이블에서 데이터 읽기
<a name="getting-started.dml.read"></a>

이 [Amazon Keyspaces 테이블에 데이터 삽입 및 로드](getting-started.dml.create.md) 섹션에서는 `SELECT` 문을 사용하여 테이블에 데이터를 성공적으로 추가했는지 확인했습니다. 이 섹션에서는 `SELECT`의 용도를 조정하여 특정 열을 표시하고 특정 기준을 충족하는 행만 표시합니다.

`SELECT` 문의 일반적인 형식은 다음과 같습니다.

```
SELECT column_list FROM table_name [WHERE condition [ALLOW FILTERING]] ;
```

**Topics**
+ [테이블의 모든 데이터 선택](#getting-started.dml.read.all)
+ [열 하위 집합 선택](#getting-started.dml.read.columns)
+ [행의 하위 집합 선택](#getting-started.dml.read.rows)

## 테이블의 모든 데이터 선택
<a name="getting-started.dml.read.all"></a>

`SELECT` 문의 가장 간단한 형식은 테이블의 모든 데이터를 반환합니다.

**중요**  
 이 명령은 테이블의 모든 데이터를 반환하므로 일반적으로 프로덕션 환경에서는 이 명령을 실행하는 것이 가장 좋은 방법은 아닙니다.

**모든 테이블의 데이터를 선택하려면**

1. 를 AWS CloudShell 열고 다음 명령을 사용하여 Amazon Keyspaces에 연결합니다. *us-east-1*을 자체 리전으로 업데이트해야 합니다.

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. 다음 쿼리를 실행합니다.

   ```
   SELECT * FROM catalog.book_awards ;
   ```

   `column_list`에 대해 와일드카드 문자(`*`)를 사용하면 모든 열이 선택됩니다. 문의 출력은 다음 예제와 같습니다.

   ```
    year | award            | category    | rank | author             | book_title            | publisher
   ------+------------------+-------------+------+--------------------+-----------------------+---------------
    2020 |             Wolf | Non-Fiction |    1 |        Wang Xiulan |      History of Ideas |  AnyPublisher
    2020 |             Wolf | Non-Fiction |    2 | Ana Carolina Silva |         Science Today | SomePublisher
    2020 |             Wolf | Non-Fiction |    3 |  Shirley Rodriguez | The Future of Sea Ice |  AnyPublisher
    2020 | Kwesi Manu Prize |     Fiction |    1 |         Akua Mansa |     Where did you go? | SomePublisher
    2020 | Kwesi Manu Prize |     Fiction |    2 |        John Stiles |             Yesterday | Example Books
    2020 | Kwesi Manu Prize |     Fiction |    3 |         Nikki Wolf | Moving to the Chateau |  AnyPublisher
    2020 |      Richard Roe |     Fiction |    1 |  Alejandro Rosalez |           Long Summer | SomePublisher
    2020 |      Richard Roe |     Fiction |    2 |        Arnav Desai |               The Key | Example Books
    2020 |      Richard Roe |     Fiction |    3 |      Mateo Jackson |      Inside the Whale |  AnyPublisher
   ```

## 열 하위 집합 선택
<a name="getting-started.dml.read.columns"></a>

**열 하위 집합을 쿼리하려면**

1. 를 AWS CloudShell 열고 다음 명령을 사용하여 Amazon Keyspaces에 연결합니다. *us-east-1*을 자체 리전으로 업데이트해야 합니다.

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. `award`, `category` 및 `year` 열을 검색하려면 다음 쿼리를 실행합니다.

   ```
   SELECT award, category, year FROM catalog.book_awards ;
   ```

   출력에는 `SELECT` 문에 나열된 순서대로 지정된 열만 포함됩니다.

   ```
    award            | category    | year
   ------------------+-------------+------
                Wolf | Non-Fiction | 2020
                Wolf | Non-Fiction | 2020
                Wolf | Non-Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
    Kwesi Manu Prize |     Fiction | 2020
         Richard Roe |     Fiction | 2020
         Richard Roe |     Fiction | 2020
         Richard Roe |     Fiction | 2020
   ```

## 행의 하위 집합 선택
<a name="getting-started.dml.read.rows"></a>

대규모 데이터 세트를 쿼리할 때는 특정 기준을 충족하는 레코드만 필요할 수 있습니다. 이렇게 하려면 `SELECT` 문 끝에 `WHERE` 절을 추가할 수 있습니다.

**행 하위 집합을 쿼리하려면**

1. 를 AWS CloudShell 열고 다음 명령을 사용하여 Amazon Keyspaces에 연결합니다. *us-east-1*을 자체 리전으로 업데이트해야 합니다.

   ```
   cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl
   ```

1. 지정된 연도의 보상에 대한 레코드만 검색하려면 다음 쿼리를 실행합니다.

   ```
   SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Wolf' ;
   ```

   앞의 `SELECT` 문은 다음 출력을 반환합니다.

   ```
    year | award | category    | rank | author             | book_title            | publisher
   ------+-------+-------------+------+--------------------+-----------------------+---------------
    2020 |  Wolf | Non-Fiction |    1 |        Wang Xiulan |      History of Ideas |  AnyPublisher
    2020 |  Wolf | Non-Fiction |    2 | Ana Carolina Silva |         Science Today | SomePublisher
    2020 |  Wolf | Non-Fiction |    3 |  Shirley Rodriguez | The Future of Sea Ice |  AnyPublisher
   ```

### `WHERE` 절 이해
<a name="getting-started.dml.where"></a>

`WHERE` 절은 데이터를 필터링하고 지정된 기준을 충족하는 데이터만 반환하는 데 사용됩니다. 지정된 기준은 단순 조건일 수도 있고 복합 조건일 수도 있습니다.

**`WHERE` 절에서 조건을 사용하는 방법**
+ 단순 조건 - 단일 열

  ```
  WHERE column_name=value
  ```

  다음 조건 중 하나라도 충족되면 `WHERE` 절에 단순 조건을 사용할 수 있습니다.
  + 열은 테이블의 유일한 프라이머리 키 열입니다.
  + `WHERE` 절의 조건 뒤에 `ALLOW FILTERING`을 추가합니다.

    `ALLOW FILTERING`을 사용하면 성능이 일관되지 않을 수 있으며 특히 여러 파티션을 나눈 대형 테이블의 경우 더욱 그렇습니다.
+ 복합 조건 - `AND`로 연결된 여러 개의 단순 조건

  ```
  WHERE column_name1=value1 AND column_name2=value2 AND column_name3=value3...
  ```

  다음 조건 중 하나라도 충족되면 `WHERE` 절에 복합 조건을 사용할 수 있습니다.
  + `WHERE` 절에서 사용할 수 있는 열에는 테이블의 파티션 키에 열의 전체 또는 하위 집합이 포함되어야 합니다. `WHERE` 절에서 열의 하위 집합만 사용하려면 파티션 키의 선행 열부터 시작하여 왼쪽에서 오른쪽으로 인접한 파티션 키 열 집합을 포함해야 합니다. 예를 들어 파티션 키 열이 `year`, `month`, `award` 인 경우 `WHERE` 절에서 다음 열을 사용할 수 있습니다.
    + `year`
    + `year` 및 `month`
    + `year` 및 `month` 및 `award`
  + 다음 예와 같이 `WHERE` 절의 복합 조건 뒤에 `ALLOW FILTERING`을 추가합니다.

    ```
    SELECT * FROM my_table WHERE col1=5 AND col2='Bob' ALLOW FILTERING ;
    ```

    `ALLOW FILTERING`을 사용하면 성능이 일관되지 않을 수 있으며 특히 여러 파티션을 나눈 대형 테이블의 경우 더욱 그렇습니다.

### 사용해보기
<a name="getting-started.dml.try"></a>

자체 CQL 쿼리를 생성하여 `book_awards` 테이블에서 다음을 찾습니다.
+ 2020 Wolf 어워드의 수상자를 찾아 순위에 따라 책 제목과 작가를 표시합니다.
+ 2020년의 모든 시상식에서 1등상 수상자를 표시하고 책 제목과 시상식을 표시합니다.