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 JOIN
MySQL 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 JOIN
RIGHT 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 属性,^也匹配 '\n'或'\r'之后的位置。 |
| $ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或'\r' 之前的位置。 |
. |
匹配除"\n" 之外的任何单个字符。要匹配包括'\n' 在内的任何字符,请使用象'[.\n]'的模式。 |
| […] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]'可以匹配 "plain"中的'a'。 |
[^...] |
负值字符集合。匹配未包含的任意字符。例如,'[^abc]' 可以匹配"plain"中的'p'。 |
p1|p2|p3 |
匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配"z"或 "food"。'(z|f)ood'则匹配"zood" 或 "food"。 |
| * | 匹配前面的子表达式零次或多次。例如,zo* 能匹配"z" 以及 "zoo"。*等价于{0,}。 |
| + | 匹配前面的子表达式一次或多次。例如,'zo+'能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+等价于{1,}。 |
{n} |
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}'不能匹配 "Bob"中的'o',但是能匹配 "food"中的两个 o。 |
{n,m} |
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
博客园上的格式还没有修改好[原文来自博主CSDN]。
浙公网安备 33010602011771号