UNION
SQL UNION
下面的SQL语句从product
和orderdetail
表中选取所有不同的pCode
(只有不同值)
SELECT pCode FROM product
UNION
SELECT pCode FROM orderdetail
ORDER BY pCode;
SQL UNION ALL
下面的SQL语句从product
和orderdetail
表中选取所有的pCode
(也有重复值)
SELECT pCode FROM product
UNION ALL
SELECT pCode FROM orderdetail
ORDER BY pCode;
带有 WHERE 的 SQL UNION ALL
下面的SQL语句从product
和orderdetail
表中选取所有的pCode=101
的值(也有重复值)
SELECT pCode, pName FROM product
WHERE pCode=101
UNION ALL
SELECT pCode, qty FROM orderdetail
WHERE pCode=101
ORDER BY pCode;
排序
ORDER BY子句
ASC
升序,DESC
降序
SELECT * FROM product ORDER BY cost ASC;
SELECT * FROM product ORDER BY cost DESC;
分组
GROUP BY语句
统计每种类型的球有多少条记录
SELECT pType, COUNT(*) FROM product
GROUP BY pType;
WITH ROLLUP
统计pType
中相同类型的球cost
的总数,命名为cost_count
SELECT pType, SUM(cost) as cost_count
FROM product
GROUP BY pType WITH ROLLUP;
执行完后最后一行是
NULL
,取代NULL
的语句coalesce(a,b,c)
参数说明:如果a==null
,则选择b
;如果b==null
,则选择c
;如果a!=null
,则选择a
;如果a b c
都为null ,则返回为null
(没意义)。
SELECT coalesce(pType, '总数'), SUM(cost) as cost_count
FROM product
GROUP BY pType WITH ROLLUP;
连接
INNER JOIN
SELECT a.pId, a.pCode, a.pType, b.qty
FROM product a INNER JOIN orderdetail b
ON a.pCode = b.pCode;
使用while子句
SELECT a.pId, a.pCode, a.pType, b.qty
FROM product a, orderdetail b
WHERE a.pCode = b.pCode;
LEFT JOINMySQL left join
与join
有所不同。 LEFT JOIN
会读取左边数据表的全部数据,即便右边表无对应数据。
SELECT a.pId, a.pCode, a.pType, b.qty
FROM product a LEFT JOIN orderdetail b
ON a.pCode = b.pCode;
RIGHT JOINRIGHT JOIN
会读取右边数据表的全部数据,即便左边边表无对应数据。
SELECT a.pId, a.pCode, a.pType, b.qty
FROM product a RIGHT JOIN orderdetail b
ON a.pCode = b.pCode;
NULL值处理
查找数据表orderdetail
中discount
列是否为NULL
,必须使用 IS NULL
和 IS NOT NULL
,如下实例:
SELECT * FROM orderdetail WHERE discount IS NOT NULL;
SELECT * FROM orderdetail WHERE discount IS NULL;
正则表达式
之前的LIKE
是用来进行模糊匹配
使用REGEXP
操作符来进行正则表达式匹配。
# 以"足"字开头的所有数据
SELECT pType FROM product WHERE pType REGEXP '^足';
# 以"类"字开头的所有数据
SELECT pType FROM product WHERE pType REGEXP '类$';
# 字段中含有"球"字的所有数据
SELECT pType FROM product WHERE pType REGEXP '球';
# 字段中含有"球"或者"泳"字且以"类"字的所有数据
SELECT pType FROM product WHERE pType REGEXP '[球泳]|类&';
模式 | 描述 |
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性, |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性, |
| 匹配除 |
[…] | 字符集合。匹配所包含的任意一个字符。例如, |
| 负值字符集合。匹配未包含的任意字符。例如, |
| 匹配 p1 或 p2 或 p3。例如, |
* | 匹配前面的子表达式零次或多次。例如, |
+ | 匹配前面的子表达式一次或多次。例如, |
| n 是一个非负整数。匹配确定的 n 次。例如, |
| m 和 n 均为非负整数,其中 |