注:这篇文章中将使用下表进行举例说明。
表名:sales
列名:id, name, amount, price
1. 单表查询
1.1 查询指定的列
语法:
SELECT <列名> [...] FROM <表名>;
示例
SELECT id, name FROM sales;
1.2 查询全部列
语法:
SELECT * FROM <表名>;
示例
SELECT * FROM sales;
等价于
SELECT id, name, amount, price FROM sales;
1.3 查询经过计算的值
SELECT后面可以是表中的属性列,也可以是表达式、字符串常量或函数。
语法:
SELECT <目标列表达式> FROM <表名>;
示例
SELECT name, amount*price FROM sales;
我们还可以手动改变查询结果的列标题
语法:
SELECT <目标列表达式> [AS] 列标题 FROM <表名>;
示例
SELECT name, amount*price total FROM sales;
2. 选择表中的若干元组
前面的例子中,在选择列的时候,同一列的所有记录都被选中了。
有时候我们只想提取满足特定要求的记录,这时候就需要使用查询条件进行数据的筛选。
2.1 消除取值相同的行
在SELECT的后面跟上DISTINCT短语,查询结果就会自动消除重复的数据。
语法:
SELECT DISTINCT <列名> FROM <表名>;
示例
SELECT DISTINCT amount FROM sales;
2.2 查询满足条件的元组
常用的查询条件有以下六种
- 比较:
=
>
<
>=
<=
!=
NOT+上述运算符
- 确定范围:
BETWEEN ... AND ...
,NOT BETWEEN ... AND ...
- 确定集合:
IN
,NOT IN
- 字符匹配:
LIKE
,NOT LIKE
- 空值匹配:
IS NULL
,IS NOT NULL
- 多重条件:
AND
,OR
语法:
SELECT <目标列表达式> FROM <表名> WHERE 查询条件;
示例
(1) 比较大小的查询
SELECT name, price FROM sales WHERE price < 100;
SELECT name, price FROM sales WHERE NOT price >= 100;
(2) 确定范围的查询
SELECT * FROM sales WHERE price BETWEEN 50 AND 100;
SELECT * FROM sales WHERE price >= 50 AND price <= 100;
(3) 确定集合的查询
SELECT * FROM sales WHERE amount IN (10, 20, 50);
SELECT * FROM sales WHERE name IN ('商品1', '商品2');
(4) 字符匹配的查询
语法:
[NOT] LIKE '<匹配符>' [ESCAPE '<转义字符>']
匹配符可以包含普通字符,也可以包含通配符。
通配符%:任意长度(包括0)的字符。
通配符_:任意单个字符。
例如想查询联想电脑或外星人电脑的销售记录,可以输入
SELECT name FROM sales WHERE name LIKE '%电脑';
又比如想找商品名为4个字的某某饮料的销售记录,可以输入
SELECT * FROM sales WHERE name LIKE '__饮料';
(5) 涉及空值的查询
空值(NULL)在数据库中有特殊含义,它表示不确定的值,不能简单使用=或!=来判断。
若要判断某个值是否为空,应该使用 IS NULL
或 IS NOT NULL
语句。
SELECT * FROM sales WHERE amount IS NULL;
SELECT * FROM sales WHERE amount IS NOT NULL;
(6) 多重条件查询
WHERE语句后面除了跟上单个查询条件外,还可以同时跟上多个查询条件。
如果是要同时满足多个条件,则使用 AND
短语;
如果只要满足任意一个条件即可,则使用 OR
短语。
SELECT * FROM sales WHERE amount > 10 AND price < 50;
SELECT * FROM sales WHERE name LIKE '%电脑' OR name LIKE '%手机'
3. 对查询结果排序
SQL语句支持对查询结果以特定条件进行排序,可根据单列排序,也可根据多列来排序。
如果根据多列排序,则第一列中具有相同值的多个记录将根据第二列进行排序。
若第二列也相同,则根据用户指定的第三列进行排序,以此类推。
语法:
ORDER BY <列名> [ASC|DESC] [, <列名> [ASC|DESC] ...]
对所有商品按价格从低到高升序排列
SELECT * FROM sales ORDER BY price;
SELECT * FROM sales ORDER BY price ASC;
价格相同时,按商品数量从多到少降序排列
SELECT * FROM sales ORDER BY price, amount DESC;
作者:Wray Zheng
原文:http://www.codebelief.com/article/2017/01/sql-learning-basic-query-statements/