美文网首页
MySQL基础回顾(12-15)

MySQL基础回顾(12-15)

作者: 般若般罗蜜多 | 来源:发表于2020-03-24 23:06 被阅读0次

十二、汇 总 数 据

1、AVG() 返回某列的平均值

SELECT AVG(p_price) AS avg_price FROM products;
只用于单个列 AVG() 只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个 AVG() 函数。`

2、COUNT() 返回某列的行数

SELECT COUNT(*) AS p_num FROM products;
COUNT() 函数有两种使用方式:

  • 使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值( NULL )还是非空值。
  • 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略NULL 值。

3、MAX() 返回某列的最大值

SELECT MAX(p_price) AS max_p FROM products;
对非数值数据使用 MAX() 虽然 MAX() 一般用来找出最大的数值或日期值,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则 MAX() 返回最后一行。

4、MIN() 返回某列的最小值

SELECT MIN(p_price) AS min_p FROM products;

5、SUM() 返回某列值之和

SELECT SUM(p_price) AS sum_p FROM products WHERE p_id=520;

6、组合聚集函数
SELECT AVG(p_price) AS avg_p, COUNT(p_id) AS cunt_p, MAX(p_price) AS max_p, MIN(p_price) AS min_p FROM products;

十三、分组数据

1、创建分组:分组是在 SELECT 语句的 GROUP BY 子句中建立的。
SELECT p_name,p_id AS num_p FROM products GROUP BY p_name;
2、过滤分组: WHERE 过滤指定的是行而不是分组,目前为止所学过的所有类型的 WHERE 子句都可以用 HAVING 来替代。唯一的差别是WHERE 过滤行,而 HAVING 过滤分组
SELECT p_name,p_id AS num_p FROM products GROUP BY p_name HAVING p_id>=120;

3、分组和排序:虽然 GROUP BY 和 ORDER BY 经常完成相同的工作,但它们是非常不同的。

不要忘记 ORDER BY 一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。这是保证数据正确排序的唯一方法。千万不要仅依赖 GROUP BY 排序数据。
SELECT p_price,SUM(p_quantity*p_num) AS cun_p FROM products GROUP BY p_price HAVING cun_p>20 ORDER BY cun_p;

4、SELECT子句及其顺序

  • SELECT 要返回的列或表达式 ;
  • FROM 从中检索数据的表;
  • WHERE 行级过滤;
  • GROUP BY 分组说明;
  • HAVING 组级过滤;
  • ORDER BY 输出排序顺序;
  • LIMIT 要检索的行数。

十四、使用子查询

1、子查询:联系不同表,查找需要的信息。SELECT p_name,p_contact FROM customer WHERE p_id IN (SELECT p_id FROM others WHERE p_num IN (SELECT p_num FROM goods WHERE p_item='TNT2'));

1.逐渐增加子查询来建立查询 用子查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。
2.用子查询建立(和测试)查询的最可靠的方法是逐渐进行,这与MySQL处理它们的方法非常相同。首先,建立和测试最内层的查询。
3.然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。
4.对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

十五、联结表

1、外键(foreign key):外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
2、创建联结:规定要联结的所有表以及它们如何关联即可。

SELECT p_name,c_num FROM products,customer WHERE products.id=customer.id ORDER BY p_name,c_num;

  • 这两个表用 WHERE 子句正确联结, WHERE 子句指示MySQL匹配 vendors 表中的 vend_id 和 products 表中的 vend_id 。
  • 完全限定列名:在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。如果引用一个没有用表名限制的具有二义性的列名,MySQL将返回错误。

3、笛卡儿积(cartesian product): 由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

SELECT p_name,c_num FROM products,customer ORDER BY p_name,c_num;
这里返回的数据用每个供应商匹配了每个产品,它包括了供应商不正确的产品。实际上有的供应商根本就没有产品。

不要忘了 WHERE 子句 应该保证所有联结都有 WHERE 子句,否则MySQL将返回比想要的数据多得多的数据。同理,应该保证 WHERE 子句的正确性。不正确的过滤条件将导致MySQL返回不正确的数据。

4、内部联结SELECT p_name,c_name,p_price FROM customer INNER JION products ON customer.id=products.id;

在使用这种语法时,联结条件用特定的 ON 子句而不是 WHERE子句给出。传递给 ON 的实际条件与传递给 WHERE 的相同。

使用哪种语法 ANSI SQL规范首选 INNER JOIN 语法。此外,尽管使用 WHERE 子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件,有时候这样做也能影响性能。

5、联结多个表SELECT p_name,c_name,p_price,quantity FROM products,customer,other WHERE products.p_id=customer.p_id AND customer.c_id=other.c_id AND o_num=250;

性能考虑 MySQL在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。

相关文章

  • MySQL基础回顾(12-15)

    十二、汇 总 数 据 1、AVG() 返回某列的平均值: SELECT AVG(p_price) AS avg_...

  • MySQL基础回顾

    最近准备一下面试,所以,重新走一遍基础。 1.删除命令 使用truncate 命令,清除表内数据,却不删除表结构...

  • 回顾Mysql基础

    数据库介绍 1.数据库产品介绍 5).平常学习数据库的渠道官方文档书籍阿里月报阿里云社区(云栖社区) 2.mysq...

  • MYSQL回顾(基础)

    数据库简介 什么是数据库(DataBase,简称DB) 数据库,又称为数据管理系统,简而言之可视为电子化的文件柜—...

  • 一、MySQL基础回顾

    MySQL基础概念 数据库(DB):是一个按数据结构来存储和管理数据的计算机软件系统 数据库管理系统(DBMS):...

  • MySQL知识点总结「修订版」

    花了几天时间对之前总结的MySQL知识点做了完善,这篇文章可以用来回顾MySQL基础知识以及备战MySQL常见面试...

  • MySql 基础操作命令和语法

    MySql 基础操作 个人复习留档,方便以后回顾 MySQL服务 连接数据库 下面所有操作都需要登录成功才能操作 ...

  • SQL进阶1

    1.w3School SQL简单回顾 一.基础 二.高级 SELECT INTO用法(mysql当前不支持该语法)...

  • MySQL基础回顾01:表连接与Group by

    MySQL基础回顾第一篇,回顾4种表连接的含义、与笛卡尔积的区别以及group by的用途。 表连接 User表信...

  • MySQL基础回顾(1-5)

    一、了解SQL 1、数据库(database):保存有组织的数据的容器;数据库软件应称为DBMS(数据库管理系统)...

网友评论

      本文标题:MySQL基础回顾(12-15)

      本文链接:https://www.haomeiwen.com/subject/goxoyhtx.html