版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love__live1/article/details/83864025
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 次。 |