SQL基本语句(以MySQL为例)-- 第二部分

6、LIKE操作符

%匹配0个或任意个字符,_匹配任意一个字符

SELECT prod_name FROM products WHERE prod_name LIKE 'fish%';
-- MySQL默认不区分大小写,紧跟WHERE后加一个BINARY以区分大小写

[]匹配括号中任意一个字符,MySQL并不支持~~

SELECT xxx FROM yyy WHERE xxx LIKE '[ab]%';
-- 匹配任何以a或者b开头的字符串,MySQL可以用OR来代替?^ab表示不匹配a和b

7、计算与拼接字段

拼接就相当于格式化字符串吧

SELECT vend_name + '(' + vend_country + ')' AS vend_title FROM vendors;
-- MySQL并不支持'+'号,但这样确实好看多了,AS后面跟的是新组合列的列名

MySQL采用函数拼接

SELECT concat(vend_name, '(', vend_country, ')') AS vend_title FROM vendors;

执行算术计算(支持+-*/,和正常的优先级)

SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price
FROM orderitems
WHERE order_num = 20008;
-- 显示4列,其中最后一列为计算出来的新列,expanded_price表示总价格

SELECT可以用来进行语句检查,比如:

SELECT 6 * 4; -- 输出24,SELECT trim(' abc ');  -- 输出abc

8、函数

用SOUNDEX检索读音相似的人名或其他

SELECT cust_contact FROM customers WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');
-- 能检索到Michelle Green,可能用于存储人名时的拼写错误~~

日期相关函数示例,更多函数,参考MySQL文档Function and Operator Reference

SELECT order_num FROM orders WHERE YEAR(order_date) = 2012;
-- 用YEAR从日期中获取年份,再与2012匹配~~

9、聚集函数 (对某些行运行的函数,计算并返回一个值)

AVG

SELECT AVG(prod_price) AS avg_price1, AVG(prod_price) AS avg_price2 FROM products;
-- 一个AVG计算一个列,多个(可以是不同的聚集函数)对应多个列,并分别指定AS,会忽略值为NULL的行

COUNT

SELECT COUNT(*) FROM products;  -- 统计整个表的行数,不管是否为NULL
SELECT COUNT(cust_email) FROM customers;  -- 统计cust_email列中,值不为NULL的行数

MAX、MIN

SELECT MAX(prod_price) AS max_price FROM products;
-- 输出
--------------------
-- max_price
--------------------
-- 11.99
--------------------
-- 就输出一个最大值,感觉没什么用啊,

显示价格最大的行

SELECT * FROM products ORDER BY prod_price DESC LIMIT 1;

SUM

SELECT SUM(item_price * quantity) AS total_price FROM orderitems WHERE order_num = 20005;
-- 查询20005号订单的总价值之和

聚集中使用DISTINCT

SELECT AVG(DISTINCT prod_price) FROM products;  -- 查询值不相同的价格的平均值

10、分组数据

NULL值会被分为一组,GROUP BY必须位于WHERE之后,ORDER BY之前

-- 以vend_id分组统计各供应商的商品数,并以商品数排序
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id ORDER BY num_prods; 
-- 以vend_id和prod_price进行分组,SELECT中出现的列,GROUP BY中必须有,反之则没必要
SELECT vend_id, prod_price, COUNT(*) AS num_prodsFROM productsGROUP BY vend_id, prod_price
-- MySQL支持相对位置分组,即上例中可以换成GROUP BY 1, 2

过滤分组HAVING(简单理解为:WHERE分组前过滤,HAVING分组后过滤)

SELECT vend_id, COUNT(*) AS num_prodsFROM products
WHERE prod_price >= 4
GROUP BY vend_idHAVING COUNT(*) >= 2;
-- 可换成HAVING num_prods >= 2-- 此语句查询有2个及以上商品价格>=4的供应商

参考:SQL必知必会(第四版)

你可能感兴趣的:(SQL基本语句(以MySQL为例)-- 第二部分)