数据库 (三) -- 简单 SQL 语句
排序
DISTINCT
去重,作用于所有列
SELECT DISTINCT vend_id FROM Products;
ORDER BY
/* 先按 prod_price 排序 */
/* 为每一列指定 DESC */
select prod_id,prod_price,prod_name from Products order by prod_price DESC,prod_id DESC;
过滤
EXISTS 和 NOT EXISTS
所有、任何的,再用 NOT EXISTS 否定,例如:
1️⃣ : 检索学过 001 号教师主讲的所有课程的所有学生的姓名
即: 不存在有一个 001 号教程的课程 该同学没学过
没有学过任何一个 == not exists select *
SELECT Sname FROM Student
WHERE not exists
(
SELECT * FROM Course WHERE Course.T# = '001' and
not exists
(SELECT * FROM SC WHERE S# = Student.S# and C# = Course.C#)
)
some all
找出 products 中价格最低的
SELECT prod_id FROM products
WHERE prod_price <= all(SELECT prod_price FROM products);
IN
指定范围条件, WHERE 子句中用来指定要匹配值的清单的关键字,功能与 OR 相当
select prod_name
from Products
where vend_id in ('DLL01', 'BRS01) -- 等同于 where vend_id = 'DLLL01' or 'BRS01'
order by prod_name;
NOT
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;
分组
GROUP BY
把查询出的数据,具有相同值的行分到一起
HAVING
WHERE 在数据分组前进行过滤, HAVING 在数据分组后,使用 HAVING 时结合 GROUP BY
一般使用 WHERE 过滤之后,使用 GROUP BY 进行分组,再用 HAVING 删除一些分组行
通配符
% 通配符
% 表示任何字符出现任意次数。可以匹配 0 个字符
SELECT user_name
FROM User
WHERE user_email LIKE 'b%@forta.com'
_ 通配符
只匹配单个字符,不能多也不能少
[] 通配符
匹配集合内的元素
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;
简单函数
拼接 concatenate
返回 vend_name 和 vend_country 拼接后的结果
-- RTRIM 去除右空格
select Concat(RTRIM(vend_name), '(',RTRIM(vend_country),')')
from Vendors;
聚集函数
- AVG()
- COUNT()
- MAX()
- MIN()
- SUM()
集合操作
- UNION
- INTERSECT
- EXCEPT
浙公网安备 33010602011771号