MySQL进阶操作

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
posted @ 2017-02-20 16:26  晚樨  阅读(155)  评论(0编辑  收藏  举报