例表 — Perfume:
id | brand | series | country | suitable_crowd | price |
---|---|---|---|---|---|
1 | Dior | 真我 | 法国 | 女 | 588 |
2 | Dior | 迪奥小姐 | 法国 | 女 | 588 |
3 | CHANEL | 五号 | 美国 | 女 | 1198 |
4 | Burberry | Weekend | 英国 | 通用 | 359 |
5 | Burberry | 英伦 | 英国 | 男 | 399 |
1、BETWEEN AND 区间查询
BETWEEN 操作符需要在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
e.g. 查找Perfume表中价格在300到500之间的香水所有信息
SELECT * FROM Perfume
WHERE 价格 BETWEEN 300 AND 500;
NOT BETWEEN AND
e.g. 查询出价格在588和698区间之外的所有香水,要求只显示系列和价格
SELECT series , price FROM Perfume
WHERE price NOT BETWEEN 588 AND 698;
2、LIKE 模糊查询
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。也就是,有where才能有like,并且和通配符一起使用。
e.g. 快速查询价格开头是5的香水
SELECT * FROM Perfume
WHERE price LIKE '5%' ;
% 可以替代不确定的部分
%5% 可以代表包含5的数据
不常用的通配符还有 ,一个只能代替一个字符
NOT LIKE
不包含
e.g. 我想找一款价格不是2开头的香水
SELECT * FROM Perfume
WHERE price NOT LIKE '2%' ;
3、AND 和 OR 多条件连接符
当查询所需要满足的条件不止一个时,可以用and和or来连接
e.g. 查询出美国品牌的男士香水的所有信息(既要美国又要男士)
SELECT * FROM Perfume
where country = '美国' AND suitable_crowd = '男' ;
e.g. 查询出适合男士或者男女通用的香水的所有信息 (男士和通用都可以)
SELECT * FROM Perfume
WHERE suitable_crowd = '男' OR suitable_crowd = '通用' ;
e.g. 查询出美国品牌的女香,另外还要查询出带有“小姐”字样的香水系列,使用本任务的知识点完成且只可以使一条SQL语句 (美国女香要显示,带小姐字样的也要显示)
SELECT * FROM Perfume
WHERE country = '美国' AND suitable_crowd='女' OR Series LIKE '%小姐%' ;
- 如果第一个条件和第二个条件都成立,则 AND 运算符才可以显示记录
- 如果第一个条件和第二个条件中有一个成立,则OR 运算符就可以显示记录,但是显示的只是所满足条件的记录;如果两个或多个条件全部满足,则显示所有条件对应的记录
- 查询语句里既有AND也有OR时,先计算AND再计算OR
4、IN 集合查询
IN 操作符允许我们在 WHERE 子句中规定多个值。
e.g. 我希望在不使用OR运算符的情况下查询出Burberry, CHANEL两个品牌的所有香水(品牌集合的概念)SELECT * FROM Perfume
WHERE brand IN ('Burberry' , 'CHANEL') ;
-- 对于字符串类型的属性记得加上''
NOT IN
e.g. 我想要不是来自英国和美国的香水SELECT * FROM Perfume
WHERE country NOT IN ('英国' , '美国') ;
5、DISTINCT 去重查询
请列出香水表中价格超过500块的不同的香水品牌SELECT DISTINCT brand FROM Perfume
WHERE price > 500 ;
6、ORDER BY 排序指令
ORDER BY 需要结合asc或者desc一起使用
asc是升序,desc是降序,不加的话默认是升序
e.g. 我想以字母升序显示品牌列,以数字升序显示价格列;SELECT * FROM Perfume
ORDER BY brand ASC , price DESC ;
-- 多列要排序用 , 隔开,且优先级高低按从左到右逐次降低
7、LIMIT 限制
e.g. 我想查询整个香水表的第2~4条记录
e.g. 查询当前价格最低的前三款香水SELECT * FROM Perfume LIMIT ( 2 , 4 ) ;
SELECT * FROM Perfume
ORDER BY price ASC LIMIT 3 ;
-- LIMIT 写在最后
补充:
- 在SQL server 中没有LIMIT,用的是TOP
e.g. 查询香水表中前4条数据
SELECT TOP 4 * FROM Perfume ;
--不同于LIMIT ,TOP 要写在前面
- 在Oracle中用的是ROWNUM
e.g. 查询香水表中价格最低的前4条数据
SELECT * FROM Perfume
WHERE ROWNUM <= 4
ORDER BY price ASC ;