1.查询
SELECT * FROM Products;
SELECT id, name, price FROM Products;
SELECT DISTINCT id FROM Products; -- DISTINCT 去重 TOP 5 查看前5条
2.排序
SELECT id, price, name FROM Products ORDER BY price, name; -- ORDER BY 排序,默认是升序,后面加 DESC 降序
SELECT id, price, name FROM Products ORDER BY 2, 3; -- 按照位置排序,先排 price,后排 name
3.过滤
SELECT name, price FROM Products WHERE price < 5; -- <、 =、 >、 !=、<=、>= 等等
SELECT name, price FROM Products WHERE price BETWEEN 5 AND 10; -- BETWEEN 指定范围
SELECT name FROM Products WHERE price IS NULL; -- 空值
SELECT id, price, name FROM Products WHERE id = '01' AND price <= 4; -- AND、OR 附加多个条件
SELECT name, price FROM Products WHERE id = '1' OR id = ‘01’ AND price >= 10; -- AND、OR 全用上
SELECT name, price FROM Products WHERE (id = '1' OR id = ‘01’) AND price >= 10; -- SQL 优先处理 AND,必要的时候要加括号
SELECT name, price FROM Products WHERE id IN ( 'DLL01', 'BRS01' ) ORDER BY name; -- IN 满足括号内任意一个条件即可
SELECT name FROM Products WHERE NOT id = 'DLL01' ORDER BY name; -- NOT 操作
4.通配符过滤
SELECT id, name FROM Products WHERE name LIKE 'Fish%'; -- nama 只要是以 Fish 开头即可
SELECT id, name FROM Products WHERE name LIKE '__ inch teddy bear'; -- 一个下划线匹配一个字符,%匹配任意多个字符
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_contact; -- J 或 M 开头都满足,[ ] 里的字符,只需满足一个即可
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[^JM]%' ORDER BY cust_contact; -- ^ 表示 否定,不以 J 或 M 开头
5.字段操作
SELECT name + ' (' + country + ')' FROM Vendors ORDER BY name; -- 用 + 拼接,输出格式为: name (country) ,SQL Server 使用+号。Oracle、PostgreSQL、SQLite 使用||。
Bear Emporium (USA)
Bears R Us (USA)
SELECT RTRIM(name) + ' (' + RTRIM(country) + ')' FROM Vendors ORDER BY name; -- RTRIM()函数去掉字段右边空格,LTRIM()去掉左边空格
Bear Emporium (USA)
Bears R Us (USA)
SELECT id, num, price, num*price AS expanded_price FROM OrderItems -- num 商品数量,price 单价,num*price AS赋值给总价expanded_price,可操作 +、-、*、/
id num price expanded_price
--- ------ -------- -----------------
01 5 4.9900 24.9500
6.函数操作
SELECT UPPER(name), price FROM Products ORDER BY price; -- UPPER() 将字段的值变为大写,LOWER() 变为小写,LENGTH() 返回字符串长度
SELECT AVG(price) AS avg_price FROM Products; -- AVG() 求该列的平均值,COUNT() 求行数,MAX()、MIN() 该列最大最小值,SUM() 求该列之和
SELECT COUNT(*) AS num_items, MIN(price) AS price_min, MAX(price) AS price_max, AVG(price) AS price_avg FROM Products;
SELECT name, CAST(price AS char(4)) AS produ_price FROM Products WHERE price < 4; -- CAST转换数据类型为 chat,并设定字段长度为4
7.分组数据
SELECT id, COUNT(*) AS num FROM Products GROUP BY id; -- GROUP BY 分组,查询每个 id 的商品数量
SELECT id, COUNT(*) AS num FROM Products GROUP BY id HAVING COUNT(*) >= 2; -- HAVING 过滤分组,WHERE过滤行
SELECT id, COUNT(*) AS num FROM Products GROUP BY id HAVING COUNT(*) >= 2 ORDER BY num; -- RODER BY 排序,升序
8.SELECT 子句执行顺序
子 句 | 说 明 | 是否必须使用 |
SELECT | 要返回的列或表达 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
9.子查询
-------------------------待更新----------------------------------