MySQL基础回顾(12-15)

十二、汇 总 数 据

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容