[查詢設計]

Module
Contents
Index 🔎︎

# 查詢設計

[查詢設計檢視] 允許您建立及編輯資料庫查詢。

若要使用此指令...

在資料庫檔案視窗中，按一下 [查詢] 圖示，然後選擇 [編輯] – [編輯]

大部分資料庫將使用查詢以篩選或排序資料庫表格來顯示電腦上的顯示記錄。檢視會提供與查詢相同的功能，但只在伺服器端。若您的資料庫位於支援檢視的伺服器上，則您可以使用檢視來篩選伺服器上的記錄以加速顯示時間。

從資料庫文件的 [表格] 標籤頁中選取 [建立檢視] 指令，會看見 [檢視設計] 視窗，該視窗與此處描述的 [查詢設計] 視窗類似。

[查詢設計] 視窗版面配置可連同建立的查詢一併起儲存，但無法連同建立的檢視一併儲存。

## 設計檢視

若要建立查詢，請按一下資料庫文件中的查詢圖示，然後按一下 [在設計檢視中建立查詢]。

設計檢視的下方窗格是定義查詢的位置。若要定義查詢，請指定要包括的資料庫欄位名稱和用於顯示這些欄位的條件。若要重新安排設計檢視下方窗格中的欄，請將欄標頭拖曳至新的位置，或選取欄並按 指令Ctrl
+方向鍵。

在 [查詢設計檢視] 視窗的上方，會顯示 [查詢設計] 列和 [設計] 列的圖示。

如果您想要測試查詢，請連按兩下資料庫文件中的查詢名稱。該查詢結果顯示在類似於資料源檢視的表格中。備註：顯示的表格只是暫時的。

### 查詢設計檢視的按鍵

按鍵 | 函式
F4 | 預覽
F5 | 執行查詢
F7 | 新增表格或查詢

## 瀏覽

When you open the query design for the first time, you see a dialog in which you must first select the table or query that will be the basis for your new query.

按兩下欄位可以將其新增到查詢中。拖放以定義關係。

在設計查詢時，您無法修改選取的表格。

### 移除表格

若要從設計檢視移除一張表格，請按一下表格視窗的上邊框，然後呼叫右鍵功能表。利用「刪除」指令可將表格從設計檢視中刪除。此外，您也可以按下 (Delete) 鍵。

### 移動表格和變更表格大小

您可以隨意排列表格並變更其大小。若要移動表格，則利用滑鼠抓住上邊框，然後拖曳表格到想要的位置。若要放大或縮小表格的顯示，則拖曳邊框或角。

## 表格間的關係

如果一張表格中的資料欄位與另一張表格中的資料欄位有資料上的關聯，那麼您可以將這些關係用於查詢。

例如，如果您具有透過商品號碼識別的商品的試算表，以及透過對應的商品號碼記錄了客戶訂購的全部商品的客戶試算表，則在這兩個「商品號碼」資料欄位之間就存在關係。現在，如果要建立返回客戶訂購的所有商品的查詢，您必須從兩個試算表文件中擷取資料。若要如此，您必須告知 LibreOffice 這兩個試算表中的資料所存在的關係。

按一下表格的資料欄位 (例如，客戶表中的「商品編號」資料欄位) 然後按住滑鼠鍵拖曳到另一個表格的資料欄位上 (商品表的「商品編號」)。當您現在放開滑鼠鍵時，便會看到一條線，連接兩個視窗中的兩個欄位。在產生結果的 SQL 查詢中會輸入對應的條件，指定兩個資料欄位的內容必須相同。

只有在當您將 LibreOffice 用作關係資料庫的介面時，才可能基於數個相關的試算表建立查詢。

在查詢中，您無法從不同的資料庫中存取多個表格。涉及多個表格的查詢僅能在一個資料庫中建立。

### 設定連結類型

如果您連按兩下連結兩個欄位的線條，或呼叫功能表指令[插入] - [新增關係]，您就可以在[關係]對話方塊中指定連結的類型。

或者，按 Tab 鍵直到選取該行，然後按 Shift+F10 組合鍵顯示右鍵功能表，並在此處選擇 [編輯] 指令。某些資料庫只支援可能連結類型的子集。

### 刪除關聯

如果您要刪除兩個表格之間的關聯，則按一下連結線，然後按下 (Delete) 鍵。

或者，刪除[關係]對話方塊的[使用欄位]中相應的條目。或按住 TAB 鍵直到標明此連結向量，然後按 SHIFT+F10 組合鍵開啟右鍵功能表，並選取[刪除]指令。

## 定義查詢

選取定義查詢的條件。 設計表格的每欄都接受用於查詢的資料欄位。同一列中的條件會以布林值 AND 連結。

### 設定資料欄位

首先，從表格中選取要加入此查詢的所有欄位的名稱。拖放表格視窗中的欄位名稱，或將其按兩下，都可達到這一目的。拖放方法，就是使用滑鼠將欄位名稱從表格視窗拖到此查詢設計的下方區域中。拖放時，您可以決定要將此欄位加入哪個欄中。透過按兩下來選取欄位名稱，即可將其加入下一個空白欄中。

### 刪除資料欄位

如果您要刪除查詢中的某個資料欄位，則以滑鼠按一下欄位的欄標題，然後呼叫欄的右鍵功能表中的指令「刪除」。

### 儲存查詢

使用 [標準] 列上的儲存圖示來儲存此查詢。您會看見一個對話方塊，要求您輸入查詢的名稱。如果資料庫支援概要，您也可以輸入概要。

#### 略圖

輸入已指定給查詢或表格檢視的模式名稱。

#### 查詢 / 表格檢視的名稱

輸入查詢或表格檢視的名稱。

### 資料的篩選

若要篩選此查詢的資料，請在設計檢視的下方區域中設定所需的偏好。下列行可用：

#### 欄位

輸入您在此查詢中所參照資料欄位的名稱。在下方的列中所做的所有設定都參照此欄位。如果您透過按一下滑鼠來啟動儲存格，您將看見一個箭頭按鈕，您可以使用該按鈕選取欄位。「Table name.*」選項選取所有的資料欄位，此條件對於所有的表格欄位都有效。

#### 別名

指定別名。查詢中將列出此別名，而不是欄位名稱。如此將使其能夠使用使用者定義的欄標籤。例如，如果資料欄位已經擁有名稱 PtNo（而非該名稱），而您希望查詢中出現 PartNum，請將 PartNum 輸入為別名。

在 SQL 陳述式中，代用名設定如下：

SELECT column AS alias FROM table。

例如：

SELECT "商品 No." AS 商品編號 FROM "商品"

#### 表格

在此將列出與所選資料欄位對應的資料庫表格。如果您透過按一下滑鼠來啟動儲存格，則會出現一個箭頭，使用它您可以選取目前查詢中的另一個表格。

#### 排序

如果您按一下此儲存格，可以在排序選項中進行選取：向上、向下和不排序。文字欄位將依字母順序排序，而數字欄位將依數字順序排序。管理員可設定大部分資料庫的排序選項。

#### 顯示的

如果您將資料欄位標示為 [可見的] 特性，該欄位在查詢中將會是可見狀態。如果您僅使用資料欄位來建立條件，您不一定需要顯示它。

#### 條件

指定篩選資料欄位內容的條件。

#### 或

您可以在此於每一列中輸入用於篩選的另一個條件。欄中的許多條件會以 OR 連結。

此外，您可以透過列標題的右鍵功能表於查詢設計下方區域中，再插入用於功能的一列：

### 功能

您可以在此處執行的功能要視資料庫而定。

若正使用 HSQL 資料庫，則功能列中的清單方塊將提供您以下選項：

選項 | 執行 SQL | 作用
無函式 |  | 將不會執行任何函式。
平均值 | AVG | 計算欄位的直線平均值。
數目 | COUNT | 決定表格中的資料條目數。空欄位的數目可以計數 (a) 或不計數 (b)。 a) COUNT(*)：如果您代入星號作為自變數，則會計算表格的所有資料條目。 b) COUNT(column)：如果您代入資料欄位作為自變數，則只會計算其中每個資料欄位包含一個值的欄位。在此零值 (空欄位) 不會計入。
最大值 | MAX | 計算出某個欄位的最高值。
最小值 | MIN | 計算出某個欄位的最低值。
總計 | SUM | 計算所屬欄位值的總計。
群組 | GROUP BY | 依據選取的欄位名稱，分組查詢資料。函式依據指定的群組執行。在 SQL 中，此選項對應於 GROUP BY 子句。如果加入規則，此條目會出現在 SQL HAVING 中。

您也可以在 SQL 陳述式中直接輸入函式呼叫。其語法是：

SELECT FUNCTION(column) FROM table。

在 SQL 中，計算總計的功能呼叫範例為：

SELECT SUM("價格") FROM "商品"。

除了「群組」功能外，上述功能均關係到所謂的「集合」功能。這些功能即為透過計算資料從結果建立摘要的功能。其它未列於清單方塊中的功能亦可使用。這些功能視您所使用的特定資料庫系統以及 Base 驅動程式目前的狀態而定。

若要使用清單方塊中未列出的其他功能，您必須在 [欄位] 下輸入這些功能。

您同樣可以為功能呼叫配上代用名。如果在欄標題中查詢不應顯示為功能名稱，則在「別名」下輸入所要的名稱。

在 SQL 陳述式中對應的功能呼叫為：

SELECT FUNCTION() AS alias FROM table

範例：

SELECT COUNT(*) AS 數目 FROM "商品"

當您執行一個功能時，您可以不必為查詢插入其他欄，除非這些欄位是當作「群組」功能取得。

範例

下列範例中，將執行關於兩個表格的查詢：一個內含「商品_No」欄位的「商品」表和一個內含「供應商_名稱」欄位的「供應商」表格。此外，這兩個表格擁有一個共同欄位「供應商_No」。

若要建立包括所有供應超過三種商品以上的供應商的查詢，則須執行下列步驟：

1. 將「商品」和「供應商」兩個表格插入查詢設計中。

2. 連結兩個表格的「供應商_No」，如果兩張表格之間尚未擁有適當的關聯。

3. 按兩下「商品」表中的「商品_No」欄位。透過右鍵功能表顯示「功能」列，並選取「數目」功能。

4. 輸入「>3」作為條件，並關閉「顯示」欄位。

5. 按兩下「供應商」表格中的「供應商_名稱」欄位，然後選取「群組」功能。

6. 執行查詢。

當「商品」表中出現「價格」(商品的單價) 和「供應商_No」(商品的供應商) 這兩個欄位時，您可以利用下列查詢某個供應商所提供商品的平均價格：

1. 將「商品」表插入查詢設計中。

2. 按兩下「價格」和「供應商_No」欄位。

3. 啟動「功能」列，並於「價格」欄位中選擇「平均值」功能。

4. 依喜好在列中填入代用名「平均值」(不含引號)。

5. 在「供應商_No」欄位中選擇群組。

6. 執行查詢。

下列右鍵功能表指令和圖示可供使用：

### 功能

顯示或隱藏功能選取的列。

### 表格名稱

顯示或隱藏表格名稱的列。

### 代用名

顯示或隱藏別名的列。

### 明確的數值

僅將明確的數值套用至查詢。這適用於其資料在所選欄位中數次出現的記錄。如果已啟動 [明確的數值] 指令，您僅能在查詢 (DISTINCT) 中看到一條記錄。否則，您將看到對應於查詢條件 (ALL) 的全部記錄。

例如，如果名稱「Smith」多次出現在地址資料庫中，您可以選擇[明確的數值]指令，在查詢中指定名稱「Smith」僅出現一次。

對於涉及數個欄位的查詢，所有欄位數值的組合必須是唯一的，以便可以從特定的資料條目中形成結果。例如，在通訊錄中出現一次「Smith in Chicago」，兩次「Smith in London」。透過[明確的數值]指令，此查詢將使用兩個欄位「last name」和「city」，並返回查詢結果「Smith in Chicago」一次和「Smith in London」一次。

在 SQL 中，此指令對應於 DISTINCT 述語。

### 極限值

Allows you to maximize the number of records with which query returns.

如果有限制極限值，會得到和指定數值一樣多的列數。否則會得到與查詢條件相應的全部記錄。

### 建立篩選條件

當建立篩選條件時，您可以使用各種運算子和指令。除可使用關係運算子外，還可使用查詢資料庫欄位內容的 SQL 特定指令。如果您按 LibreOffice 語法使用這些指令，LibreOffice 會自動將它們轉換為對應的 SQL 語法。您也可以直接輸入 SQL 指令。以下表格給出了這些運算子和指令的摘要：

運算子 | 涵義 | 條件滿足，如果...
= | 相等 | ... 欄位內容與指定的表示式等同。 運算子 = 不會在查詢欄位中顯示；如果您輸入一個不帶運算子的值，便會接受運算子 =。
<> | 不等於 | ... 欄位內容不符合指定的表示式。
> | 大於 | ... 欄位內容大於指定的表示式。
< | 小於 | ... 欄位內容小於指定的表示式。
>= | 大於或等於 | ... 欄位內容大於或等於指定的表示式。
<= | 小於或等於 | ... 欄位內容小於或等於指定的表示式。

LibreOffice 指令 | SQL 指令 | 涵義 | 條件滿足，如果...
ISBLANK | IS NULL | 是空缺 | ... The value of the field is empty. For Yes/No fields with three states, this command automatically queries the undetermined state (neither Yes nor No).
IS NOT NULL | IS NOT NULL | 不是空缺 | ... 資料欄位不是空缺。
LIKE (萬用字元 * 可用於任意數目的字元 萬用字元 ? 僅用於一個字元) | LIKE (% 萬用字元表示任意數目的字元 萬用字元 _ 僅用於一個字元) | 為組成部分 | ... 資料欄位含有指定的表示式。在此萬用字元 (*) 指定表示式 x 要出現在開頭 (x*)、在尾端 (*x) 或於欄位內容中 (*x*)。您可以在 SQL 查詢中輸入 SQL 字元 % 作為萬用字元，在 LibreOffice 平面則輸入檔案系統所熟悉的萬用字元 (*)。 萬用字元 * 或 % 表示任意數目的字元。針對僅一個字元則可在 LibreOffice 平面中使用問號 (?) 或於 SQL 查詢中使用底線 (_) 當作萬用字元。
NOT LIKE | NOT LIKE | 不是組成部分 | ... 資料欄位不包含指定的表示式。
BETWEEN x AND y | BETWEEN x AND y | 介於區間 [x,y] | ... 資料欄位包含一個介於 x 和 y 兩者之間的數值。
NOT BETWEEN x AND y | NOT BETWEEN x AND y | 不在區間 [x,y] | ... 資料欄位包含一個不在 x 和 y 兩者之間的數值。
IN (a; b; c...) 請注意，分號於所有數值清單中代表分隔符！ | IN (a, b, c...) | 含有 a、b、c... | ... 資料欄位包含指定的表示式 a、b、c、... 之一。您可指定任意數目的表示式，查詢結果會透過 OR 連結得出。表示式 a、b、c... 可以是數字，也可以是字元
NOT IN (a; b; c...) | NOT IN (a, b, c...) | 不包含 a、b、c... | ... 資料欄位不包含指定的表示式 a、b、c、... 的任何一個。
= TRUE | = TRUE | 擁有數值 TRUE | ... 資料欄位擁有數值 TRUE。
= FALSE | = FALSE | 擁有數值 FALSE | ... 資料欄位擁有數值 FALSE。

### 範例

='Frau' | 得出欄位內容為「Frau」的資料欄位。
<'2001-01-10' | returns dates that occurred before January 10, 2001
LIKE 'g?ve' | 返回具有如「give」和「gave」欄位內容的欄位名稱。
LIKE 'S*' | 得出欄位內容為「Sun」的資料欄位。
BETWEEN 10 AND 20 | 得出欄位內容介於數值 10 和 20 之間的資料欄位。(亦可為文字欄位和數字欄位相關。)
IN (1; 3; 5; 7) | 得出含數值 1、3、5、7 的資料欄位。如果資料欄位包含一個商品編號，您可以建立得出包含指定編號的特定商品查詢。
NOT IN ('Mler') | 得出不含「Mler」的資料欄位。

Like Escape Sequence: {escape 'escape-character'}

範例：select * from 商品 where 商品名稱 like 'The *%' {escape '*'}

此範例得出所有以「The *」開頭的商品名稱條目。因此您同樣可以搜尋解譯為萬用字元的字元，如 *、?、_、% 或 .。

Outer Join Escape Sequence: {oj outer-join}

範例：select 商品.* from {oj 商品 LEFT OUTER JOIN 訂購 ON 商品.No=訂購.ANR}

### 文字欄位的查詢

若要查詢文字欄位的內容，您必須以單引號括起表示式。大小寫則不予區分。

### 日期欄位的查詢

Date fields are represented as #Date# to clearly identify them as dates. Date, time and date/time constants (literals) used in conditions can be of either the SQL Escape Syntax type, or default SQL2 syntax.

Date Type Element | SQL Escape syntax #1 - may be obsolete | SQL Escape syntax #2 | SQL2 syntax
日期 | {D'YYYY-MM-DD'} | {d 'YYYY-MM-DD'} | 'YYYY-MM-DD'
時間 | {D'HH:MM:SS'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]'
日期時間 | {D'YYYY-MM-DD HH:MM:SS'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]'

範例：select {d '1999-12-31'} from world.years

範例：select * from mytable where years='1999-12-31'

All date expressions (literals) must be enclosed with single quotation marks. (Consult the reference for the particular database and connector you are using for more details.)

### 「是/否」欄位的查詢

若要查詢 [是/否] 欄位，請在 dBASE 表格中使用下列語法：

狀況 | 查詢條件 | 範例
是 | 在 dBASE 表格中：不等於任何指定的值 | =1 得出所有資料條目，其中「是/否」欄位擁有「是」或「否」狀況 (黑色標記)。
否 | . | =0 得出所有資料條目，其中「是/否」欄位擁有「否」或「不使用」狀況 (無標記)。
空缺 | IS NULL | IS NULL 得出所有資料條目，其中「是/否」欄位不含「是」或「否」這兩個狀況 (灰色標記)。

其語法取決於使用的資料庫系統。您還應該注意，[是/否]欄位可能有不同的定義 (僅 2 種狀態，而不是3 種)。

### 參數查詢

Parameter queries allow the user to input values at run-time. These values are used within the criteria for selecting the records to be displayed. Each such value has a parameter name associated with it, which is used to prompt the user when the query is run.

Parameter names are preceded by a colon in both the Design and SQL views of a query. This can be used wherever a value can appear. If the same value is to appear more than once in the query, the same parameter name is used.

In the simplest case, where the user enters a value which is matched for equality, the parameter name with its preceding colon is simply entered in the Criterion row. In SQL mode this should be typed as WHERE "Field" = :Parameter_name

Parameter names may not contain any of the characters <space>`!"$%^*()+={}[]@'~#<>?/,. They may not be the same as field names or SQL reserved words. They may be the same as aliases.

A useful construction for selecting records based on parts of a text field's content is to add a hidden column with "LIKE '%' || :Part_of_field || '%'" as the criterion. This will select records with an exact match. If a case-insensitive test is wanted, one solution is to use LOWER (Field_Name) as the field and LIKE LOWER ( '%' || :Part_of_field || '%' ) as the criterion. Note that the spaces in the criterion are important; if they are left out the SQL parser interprets the entire criterion as a string to be matched. In SQL mode this should be typed as LOWER ( "Field_Name" ) LIKE LOWER ( '%' || :Part_of_field || '%' ).

Parameter queries may be used as the data source for subforms, to allow the user to restrict the displayed records.

### 參數輸入

The Parameter Input dialog asks the user to enter the parameter values. Enter a value for each query parameter and confirm by clicking OK or typing Enter.

The values entered by the user may consist of any characters which are allowable for the SQL for the relevant criterion; this may depend on the underlying database system.

The user can use the SQL wild-card characters "%" (arbitrary string) or "_" (arbitrary single character) as part of the value to retrieve records with more complex criteria.

## SQL 模式

SQL 代表「Structured Query Language」並描述指令，以查詢、更新和管理相關的資料庫。

在 LibreOffice 中，對於大多數查詢您無需任何 SQL 的知識，因為您不必輸入 SQL 程式碼。如果您在查詢設計中建立查詢，LibreOffice 自動將您的指令轉換成對應的 SQL 語法。如果您變更至 SQL 檢視 (藉助 [啟動或關閉設計檢視] 按鈕)，您可以查看先前所建立查詢的 SQL 指令。

您可以直接在 SQL 程式碼中建立您的查詢。但是要注意的是，特殊語法需視您使用的資料庫系統而定。

如果您手動輸入 SQL 程式碼，便可以建立特殊的 SQL 查詢，但是查詢設計中的圖形平面則不支援。這些查詢必須以「Native SQL」模式執行。

透過按一下 SQL 檢視中的直接執行 SQL 指令圖示，您可以用公式表示未經 LibreOffice 處理的查詢。