MySQL进阶操作

来源:互联网 发布:mac装win10温度咋样 编辑:程序博客网 时间:2024/06/12 08:22

LIKE子句

  • MySQL 中使用 SELECT 命令来读取数据。通过 SELECT 语句中使用WHERE 子句来获取指定的记录。

  • LIKE 子句通常用于 WHERE 子句中。

  • LIKE 子句中使用百分号(%)字符来表示任意字符,类似于UNIX或正则表达式中的星号(*)。

  • 如果没有使用百分号(%), LIKE 子句与等号(=)的效果是一样的。

SELECT   field_1,   field_2,   ...,   field_n from   table_name_1,   table_name_2,   ...,   table_name_n WHERE   field1 LIKE condition1 [AND [OR]] filed2 = 'value'

GROUP BY分组子句

  • GROUP BY 语句根据一个或多个列对结果集进行分组。
  • 可使用 COUNT, SUM, AVG 等函数对每一组进行操作。
  • 若不分组使用 COUNT, SUM, AVG 等函数,MySQL将把所有获取的所有数据做为一个组,当且仅当只有这一个组。
SELECT   column_name,   function(column_name) FROM   table_name [WHRER Clause] GROUP BY   column_name

HAVING子句

  • HAVING子句通常与GRUOP BY同时使用,用于过滤聚合后的结果(比如使用了SUM、COUNT、AVG等聚合函数)。
  • HAVING子句通常与聚合函数(SUM、COUNT、AVG)搭配使用。
  • HAVING与WHERE子句含义相近,都是用来设置条件的。不同的是,WHERE子句先判断再聚合结果;HAVING子句先聚合结果再判断再聚合结果。
  • HAVING与WHERE通常不会同时出现。
SELECT    field_1,   field_2,   ...,   field_n FROM   table_name_1,   table_name_2,   ...,   table_name_n GROUP BY   field_1 HAVING  SUM(field_1) > 10

表的别名(Alias)

当进行多表操作时,给表使用别名可以达到简化SQL语句的功能。

别名加在表名的后面,用AS子句表示,也可以直接用空格隔开。事实上,通常用空格隔开。

SELECT   t1.name,   t2.gender FROM   table_1 [AS] t1,   table_2 [AS] t2

解析:从table_1、table_2中取出数据。对于table_1只需要它的name字段数据;对于table_2只需要它的gender字段数据。

JOIN连接表,进行多表查询

你可以在SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

注:MySQL没有FULL OUTER JOIN,但可以通过某种方式实现FULL OUTER JOIN,后续讲解。

①INNER JOIN(相当于JOIN,内连接)

SELECT   t1.name,   t2.salary FROM   table_1 t1   [INNER] JOIN table_2 t2 ON t1.dept = t2.dept

分析:只返回满足t1.dept = t2.dept条件的数据。分别取t1表的name字段,t2表的salary字段。
这里写图片描述

②LEFT JOIN(左连接)

SELECT   t1.name,   t2.salary FROM   table_1 t1   LEFT JOIN table_2 t2 ON t1.dept = t2.dept

分析:返回t1表的所有数据,不管是否满足t1.dept = t2.dept条件。返回t2表中满足t1.dept = t2.dept的数据。
这里写图片描述

③RIGHT JOIN

SELECT   t1.name,   t2.salary FROM   table_1 t1   LEFT JOIN table_2 t2 ON t1.dept = t2.dept

分析:返回t2表的所有数据,不管是否满足t1.dept = t2.dept条件。返回t1表中满足t1.dept = t2.dept的数据。
这里写图片描述

刚才上文说MySQL没有FULL OUTER JOIN,那么我们怎么实现FULL OUTER JOIN呢?

事实上,使用UNION语句连接LEFT JOIN和RIGHT JOIN就可实现全外连接

SELECT   t1.name,   t2.salary FROM   table_1 t1   LEFT JOIN table_2 t2 ON t1.dept = t2.dept UNION SELECT   t1.name,   t2.salary FROM   table_1 t1   RIGHT JOIN table_2 t2 ON t1.dept = t2.dept
0 0