MySQL必知必会笔记(5)

2019-01-19 15:54

GROUP BY 一些重要规定

1 GROUP BY 子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供了更细致的控制

2 如果在GROUP BY 子句中嵌套了分组,数据将在最后规定的分组上进行汇总,

换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别列取回数据)

3 GROUP BY 子句列出的每个列都必须是检索列或有效的表达式,(但不能是聚集函数)如果。在SELECT 中使用了表达式,则必须在GROUP BY 子句中指定相同的表达式,不能使用别名。

4 除聚集计算语句外,SELECT 语句中的每个列都必须在GROUP BY 子句中给出 5 如果分组列中具有NULL值,不管一个或多个都将作为一个分组返回 6 GROUP BY 子句必须出现在WHERE 子句之后,GROUP BY 子句之前

过滤分组

如想要得到大于3的不同产品订单

WHERE 是过滤指定的行而不是列。 HAVING 支持所有 WHERE 操作符。 SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >3;

WHERE 是在分组前进行过滤, HAVING 是在分组后进行过滤 分组和排序区别 ORDER BY 排序产生的输出

GROUP BY

分组行,单输出可能不是分组的顺序

任意列都可以使用(甚至 只可能使用选择列或表达式,而且必须使用每个选择列表达式

是分选择列也可以使用) 如果与聚集哈思楠一起使用列(或表达式)则必须使用 不一定需要

例子:检索总计订单价格大于50的订单号和总计订单

SELECT order_num , SUM(quantity* item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50; 按订单价格进行排序 ,后面加 ORDER BY ordertotal;

SELECT 子句顺序 SELECT FROM WHERE

要返回的列或表达式

从中检索数据的表

行级过滤 分组说明 组级过滤 输出排序顺序

GROUNP BY HAVING

ORDER BY LIMIT

要检索的行数

第十四章 使用子查询

Sql还允许使用子查询,即嵌套在其他查询中的查询。 利用子查询进行过滤

SELECT cust_id FROM orders WHERE order_num IN(

SELECT order_num FROM orderitems WHERE prod_id = 'TNT2' )

可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE 子句 格式化sql 包含子查询的sql语句难以阅读,可以使用适当的缩进。 得到了订购物品TNT2的所有客户ID,下一步是检索这些客户的信息,总语句是 SELECT cust_name , cust_contact FROM customers WHERE cust_id IN(

SELECT cust_id FROM orders WHERE order_num IN (

SELECT order_num FROM orderitems WHERE prod_id = 'TNT2' )

)

列必须匹配 在WHERE子句中使用子查询,应该保证SELECT语句具有WHERE 子句中相同数目的列。通常子查询将返回的单个列于单个列匹配,但如果需要也可以多个列。

虽然子查询一般与IN操作符结婚使用,但也可以用于测试等于、不等于等符号

作为计算字段使用子查询

使用子查询的另一个方法是创建计算字段。

假设需要显示sustomers表中每个客户的订单总数。 SELECT cust_name ,cust_state,(

SELECT COUNT(*) FROM orders WHERE orders,coust_id = customers . Cust_id ) AS orders FROM customers ORDER BY cust_name;

MySQL必知必会笔记(四)SELECT语句 联结表 高级联结 组合查询 全文本搜索 第十五章 联结表

Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分。

外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息

联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

创建联结

SELECT vend_name , prod_name , prod_price

FROM vendors , products

WHERE vendors.vend_id = products . Vend_id

ORDER BY vend_name , prod_name; ;

如果没有WHERE子句,表一中的每行将于表二中的每行配对,而不管他们逻辑是否可以配在一起。其配对的结果是 笛卡尔积。就是表一行数*表二行数

内部联结

前面讲的联结称为等值联结,它基于两个表之间的相等测试。这种联结也称为内部联结。前其实这种联结可以使用稍微不同的语法来明确指定联结的类型。下面是语句与上面返回一样

SELECT vend_name , prod_name , prod_price

FROM vendors

INNER JOIN products ON vendors . vend_id = products . vend_id;

这里的两个表之间的关系是由FROM 子句组成的。以 INNER JION指定。使用这种语法时。联结子句的条件用特定的ON子句而不是WHERE子句给出。传递给ON的跟传递给WHERE的子句相同。

首选使用INNER JOIN语法,这样不会忘记联结的条件,虽然WHERE子句定义联结比较简单。

联结多个表

SELECT prod_name , vend_name ,prod_price , quantity

FROM orderitems , products , vendors

WHERE products . Vend_id = vendors.vend_id

AND orderitems.prod_id = products.prod_id

AND order_num = 20005;


MySQL必知必会笔记(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:结构设计原理-1997-2007试题集

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: