两种基本情况需要使用组合查询:
1.在单个查询中从不同的表返回类似结构的数据;
2.对单个表执行多个查询,按单个查询返回数据。
创建组合查询

SELECT vend_id, prod_id, prod_price
 FROM products
 WHERE prod_price <= 5
 UNION
 SELECT vend_id, prod_id, prod_price
 FROM products
 WHERE vend_id IN (1002,1001) ;UNION规则
 1.UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字 UNION 分隔
 2.UNION 中的每个查询必须包含相同的列、表达式或聚集函数
 3.列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型SELECT 语句的输出用 ORDER BY 子句排序。
 在用 UNION 组合查询时,只能使用一条 ORDER BY 子句且必须出现在最后一条 SELECT 语句之后。
 SELECT vend_id, prod_id, prod_price
 FROM products
 WHERE prod_price <= 5
 UNION
 SELECT vend_id, prod_id, prod_price
 FROM products
 WHERE vend_id IN (1002,1001)
 ORDER BY vend_id, prod_price ;进行全文本搜索:
 Match() 说明 :传递给 Match() 的值必须与FULLTEXT() 定义中的相同。
 如果指定多个列,则必须列出它们(而且次序正确)。
 搜索不区分大小写,除非使用 BINARY 方式
 SELECT note_text
 FROM productnotes
 WHERE MATCH(note_text) AGAINST(‘rabbit’) ;
 SELECT note_text
 FROM productnotes
 WHERE note_text LIKE ‘%rabbit%’ ;全文本搜索的一个重要部分就是对结果排序。具有较高等级的行先返回
 SELECT note_text,
 MATCH(note_text ) AGAINST (‘rabbit’) AS ranks
 FROM productnotes查询扩展:
 SELECT note_text
 FROM productnotes
 WHERE MATCH(note_text) AGAINST(‘anvils’ WITH QUERY EXPANSION) ;布尔文本搜索
 指示MySQL排除包含 rope*
 SELECT note_text
 FROM productnotes
 WHERE MATCH(note_text) AGAINST(‘heavy -rope*’ IN BOOLEAN MODE)全文本布尔操作符
+  包含,词必须存在
-  排除,词必须不出现
>  包含,而且增加等级值
<  包含,且减少等级值把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)全文本搜索的使用说明
 1.在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词
 2. MySQL带有一个内建的非用词(stopword)列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表
 3.许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。因此,MySQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。50%规则不用于 IN BOOLEANMODE 。
 4.如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者至少出现在50%的行中)。
 5.忽略词中的单引号。例如, don’t 索引为 dont ’
 6.不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果。
 7.如前所述,仅在 MyISAM 数据库引擎中支持全文本搜索数据插入
 INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,
 cust_zip,cust_country,cust_contact,cust_email)
 VALUES(‘Pep E. LaPew’, ‘100 Main Street’, ‘Los Angeles’,
 ‘CA’, ‘90046’, ‘USA’,NULL,NULL) ;省略列:省略的列必须满足以下某个条件。
 1.该列定义为允许 NULL 值(无值或空值)
 2.在表定义中给出默认值。这表示如果不给出值,将使用默认值MySQL用单条 INSERT 语句处理多个插入比使用多条 INSERT语句快
 INSERT INTO customers(cust_name,cust_city)
 VALUES(‘LiLee’,‘China’),(‘MOnkey’,‘US’) ;INSERT SELECT 插入检索出的数据
 不一定要求列名匹配
 INSERT INTO customers(cust_name,cust_city)
 SELECT prod_name, vend_id
 FROM products基本上UPDATE由三部分组成,分别是:
 1.要更新的表
 2.列名和新值
 3.确定要更新的过滤条件UPDATE customers
 SET cust_email = ‘@qq.com’,
 cust_name = ‘LiMing’
 WHERE cust_id = 10005 ;如果用 UPDATE 语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个 UPDATE 操作被取消
 可以使用关键字IGNORE,即使发生错误,也继续更新
 UPDATE IGNORE customers…删除某个列的值,可将它设置为NULL
 UPDATE customers
 SET cust_email = NULL,
 cust_name = ‘LiMing’
 WHERE cust_id = 10005 ;DELETE 语句:从表中删除特定的行;从表中删除所有行
 DELETE FROM customers
 WHERE cust_id = 10006 ;UPDATE 或 DELETE 应遵循的习惯
 1.除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE子句的 UPDATE 或 DELETE 语句
 2.保证每个表都有主键,尽可能像 WHERE 子句那样使用它
 3.在对 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT 进行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确
 4.使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行表创建基础
 CREATE TABLE cust
 (
 cust_id int NOT NULL AUTO_INCREMENT,
 cust_name char(50) NULL,
 PRIMARY KEY (cust_id)
 )ENGINE = INNODB ;


如果想在一个表不存在时创建它,应该在表名后给出 IF NOT EXISTS