MySQL命令學習筆記(四)

一、組合查詢

有兩種基本情況,其中需要使用組合查詢:

  • 在單個查詢中從不同的表返回類似結構的數據;
  • 對單個表執行多個查詢,按單個查詢返回數據

1 創建組合查詢

可用UNION操作符來組合數條SQL查詢。利用UNION,可給出多條SELECT語句,將它們的結果組合成單個結果集。

1.1 使用UNION

創建UNION涉及編寫多條SELECT語句。使用示例如下:

SELECT id,name FROM table1 WHERE price <= 9
UNION
SELECT id,name FROM table1 WHERE id IN (1,4);

結果如下:
UNION
這條語句由前面的兩條SELECT語句組成,語句中用UNION關鍵字分隔。UNION指示mysql執行兩條SELECT語句,並把輸出組合成單個查詢結果集。

1.2 UNION規則

在使用時需要注意以下規則:

  • UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔(因此,如果組合4條SELECT語句,將要使用3個UNION關鍵字)。
  • UNION中的每個查詢必須包含相同的列、表達式或聚集函數(不過各個列不需要以相同的次序列出)。
  • 列數據類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含地轉換的類型(例如,不同的數值類型或不同的日期類型)。

1.3 包含或取消重複的行

UNION從查詢結果集中自動去除了重複的行(換句話說,它的行爲與單條SELECT語句中使用多個WHERE子句條件一樣)。若想返回所有匹配行,可使用UNION ALL而不是UNION。

1.4 包含或取消重複的行

SELECT語句的輸出用ORDER BY子句排序。在用UNION組合查詢時,只能使用一條ORDER BY子句,它必須出現在最後一條SELECT語句之後。對於結果集,不存在用一種方式排序一部分,而又用另一種方式排序另一部分的情況,因此不允許使用多條ORDER BY子句。

二、全文本搜索

2 使用全文本搜索

爲了進行全文本搜索,必須索引被搜索的列,而且要隨着數據的改變不斷地重新索引。在對錶列進行適當設計後, MySQL會自動進行所有的索引和重新索引。
在索引之後, SELECT可與Match()和Against()一起使用以實際執行搜索。

2.1 啓用全文本搜索支持

一般在創建表時啓用全文本搜索。 CREATE TABLE語句接受FULLTEXT子句,它給出被索引列的一個逗號分隔的列表。
在定義之後, MySQL自動維護該索引。在增加、更新或刪除行時,索引隨之自動更新。
下面的CREATE語句演示了FULLTEXT子句的使用:

CREATE TABLE productnotes
(
	nots_id        int        NOT NULL AUTO_INCREMENT
	prod_id        char(10)   NOT NULL,
	note_date      datetime   NOT NULL,
	note_text      text       NULL,
	PRIMARY    KEY(note_id),
	FULLTEXT(note_tetx)
)ENGINE=MyISAM;

分析: 其中名爲note_text的列,爲了進行全文本搜索,MySQL根據子句FULLTEXT(note_text)的指示對它進行索引。

2.2 進行全文本搜索

在索引之後,使用兩個函數Match()和Against()執行全文本搜索,其中Match()指定被搜索的列,Against()指定要使用的搜索表達式。

SELECT note_text FROM table1 WHERE Match(note_text) Against('rabbit');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章