zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    svn 巧用,如果遇到问题解决不了,而上一个版本可以正常使用,则可以查记录
    Fastadmin 后台编辑,或者添加的时候,出现的问题
    Fastadmin 写关联命名时,最好前后台用同一个model,方便管理(会出现命名空间问题)
    python笔记(一)基础一
    服务器端解决跨域
    支付宝的pc端配置
    解决svn update 产生Node remains in conflict的问题
    CentOS7使用firewalld打开关闭防火墙与端口
    腾讯云Centos7下启用端口防火墙
    Centos查看端口占用情况和开启端口命令
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476219.html
Copyright © 2011-2022 走看看