MySQL笔记
1. 派生表
派生表是从SELECT语句返回的虚拟表,类似于临时表,但是派生表不需要创建临时表的步骤。 (当SELECT语句中的FROM使用独立子查询时,我们将它成为派生表)
例如:
SELECT column_list
FROM (
SELECT column_list
FROM table_1
) derived_table_name
WHERE derived_table_name.c1>0;
与子查询不同,派生表必须有别名,以便稍后再查询中引用该派生表。
派生表示例:
查询2013年销售收入最高的前5名产品
SELECT
productCode,
ROUND(SUM(quantityOrdered * priceEach)) sales
FROM
orderdetails
INNER JOIN
orders USING (orderNumber)
WHERE
YEAR(shippedDate) = 2013
GROUP BY productCode
ORDER BY sales DESC
LIMIT 5;
- 连接两表:INNER JOIN
- 限制条件为2013年:YEAR(shippedDate) = 2013
- 计算产品销量:GROUP BY productCode 并使用SUM()函数
- 取前5名:ORDER BY sales 并 LIMIT 5
使用派生表将以上表与另一个products表关联:
SELECT
productName, sales
FROM
(SELECT
productCode,
ROUND(SUM(quantityOrdered * priceEach)) sales
FROM
orderdetails
INNER JOIN
orders USING (orderNumber)
WHERE
YEAR(shippedDate) = 2013
GROUP BY productCode
ORDER BY sales DESC
LIMIT 5) top5products2013
INNER JOIN products
USING (productCode);
2. MYSQL JOIN
- inner join:内连接,取得两个表中存在连接匹配关系的记录
- left join:左连接,以左表为基准,取左表的所有记录,右表匹配向左表
- right join:右连接,同上
使用示例:
SELECT * FROM article INNER JOIN user ON article.uid = user.uid
或
SELECT * FROM article INNER JOIN user USING(uid)
3. MYSQL函数
数学函数
- ABS(x) 返回x的绝对值
- BIN(x) 返回x的二进制 (OCT八进制,HEX十六进制)
- CEILING(x) 返回大于x的最小整数值
- EXP(x) 返回值e的x次方
- FLOOR(x) 返回小于x的最大整数值
- GREATEST(x1,x2,…,xn) 返回集合中最大的值
- LEAST(x1,x2,…,xn) 返回集合中最小的值
- LN(x) 返回x的自然对数
- LOG(x,y) 返回x的以y为底的对数
- MOD(x,y) 返回x/y的模(余数)
- PI() 返回pi的值(圆周率)
- RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
- ROUND(x,y) 返回参数x的四舍五入的有y位小数的值
- SIGN(x) 返回代表数字x的符号的值
- SQRT(x) 返回一个数的平方根
- TRUNCATE(x,y) 返回数字x截短为y位小数的结果
聚合函数(与GROUP BY一起使用)
- AVG(col) 返回指定列的平均值
- COUNT(col) 返回指定列中非null的值的个数
- MIN(col) 返回指定列的最小值
- MAX(col) 返回指定列的最大值
- SUM(col) 返回指定列的所有值之和
- GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成