若是咱們要執行多個查詢條件,好比檢索price不高於5或者供應商是1001,1002的商品。咱們可使用where...or...語句:mysql
select products.vend_id,prod_id,prod_price from products where prod_price<=5 or products.vend_id in (1001,1002);
可是咱們還可使用union將兩個select語句合併起來:sql
mysql> select products.vend_id,prod_id,prod_price from products where prod_price<=5 -> union -> select products.vend_id,prod_id,prod_price from products where products.vend_id in (1001,1002);
這兩個檢索語句結果同樣。數據庫
注意:函數
若是咱們不想取消這些行,將union改成union all.學習
若要排序,只能在最後一條select後面跟上order by.它做用於所有語句。3d
也能夠稍後指定,不在建立的時候指定。code
注意在導入數據的時候不要指定fulltext,由於更新索引須要花費時間。blog
使用例子:排序
select note_text from productnotes where Match(note_text) Against('rabbit');
就能夠匹配出出現'rabbit'的文本行。使用LIKE照樣能夠:索引
select note_text from productnotes where note_text like '%rabbit%';
咱們使用全文本搜索的優勢在於:like返回的記錄順序沒有特別的用處(或者說是規律)。而使用全文本搜索,咱們是按匹配詞的等級返回的。
看下面一條檢索語句,咱們把等級用數值表示出來:
select note_text,match(note_text) against('rabbit') as rank from productnotes \G;
如圖所示,rank值爲0的就是不包含匹配詞'rabbit'的記錄。咱們返回順序是優先級從高到底的順序。
等級值:
除了查找出現匹配詞的行以外,咱們可能還須要檢索出與這個詞有關的行,但匹配的詞卻沒有出如今這行中。
如咱們要檢索與'anvils'匹配的行:
mysql> select note_text from productnotes -> where match(note_text) against('anvils');
這樣咱們只返回一條數據,其中包含'anvils'.
使用擴展查詢時候:
至因而如何選擇有用的詞,則以後學習。
語法:
mysql> select note_text from productnotes -> where match(note_text) against('anvils' with query expansion);
此次咱們返回了7條記錄:
緣由如上圖。
布爾文本搜索即便沒有fulltext索引也可使用。
布爾方式能夠提供如下細節:
表達式分組。
select note_text from productnotes
-> where match(note_text) against('heavy' in boolean mode);
此條布爾查詢和全文本搜索一致。但咱們要若是須要排斥一個詞呢?
mysql> select note_text from productnotes
-> where match(note_text) against('heavy -rope*' in boolean mode);
此條布爾查詢就能夠返回不以'rope'開頭的含有'heavy'的記錄。
實例: