

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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>

查詢大型資料集時，您可能只想要符合特定條件的記錄。若要這樣做，您可以將 `WHERE`子句附加到`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 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` AND `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 年所有獎勵的第一個得主，並顯示書籍標題和獎勵名稱。