例表 — 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之间的香水所有信息

  1. SELECT * FROM Perfume
  2. WHERE 价格 BETWEEN 300 AND 500;

NOT BETWEEN AND

e.g. 查询出价格在588和698区间之外的所有香水,要求只显示系列和价格

  1. SELECT series , price FROM Perfume
  2. WHERE price NOT BETWEEN 588 AND 698;

2、LIKE 模糊查询

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。也就是,有where才能有like,并且和通配符一起使用。
e.g. 快速查询价格开头是5的香水

  1. SELECT * FROM Perfume
  2. WHERE price LIKE '5%' ;

% 可以替代不确定的部分
%5% 可以代表包含5的数据
不常用的通配符还有 ,一个只能代替一个字符

NOT LIKE

不包含
e.g. 我想找一款价格不是2开头的香水

  1. SELECT * FROM Perfume
  2. WHERE price NOT LIKE '2%' ;

3、AND 和 OR 多条件连接符

当查询所需要满足的条件不止一个时,可以用and和or来连接
e.g. 查询出美国品牌的男士香水的所有信息(既要美国又要男士)

  1. SELECT * FROM Perfume
  2. where country = '美国' AND suitable_crowd = '男' ;

e.g. 查询出适合男士或者男女通用的香水的所有信息 (男士和通用都可以)

  1. SELECT * FROM Perfume
  2. WHERE suitable_crowd = '男' OR suitable_crowd = '通用' ;

e.g. 查询出美国品牌的女香,另外还要查询出带有“小姐”字样的香水系列,使用本任务的知识点完成且只可以使一条SQL语句 (美国女香要显示,带小姐字样的也要显示)

  1. SELECT * FROM Perfume
  2. WHERE country = '美国' AND suitable_crowd='女' OR Series LIKE '%小姐%' ;


  • 如果第一个条件和第二个条件都成立,则 AND 运算符才可以显示记录
  • 如果第一个条件和第二个条件中有一个成立,则OR 运算符就可以显示记录,但是显示的只是所满足条件的记录;如果两个或多个条件全部满足,则显示所有条件对应的记录
  • 查询语句里既有AND也有OR时,先计算AND再计算OR

    4、IN 集合查询

    IN 操作符允许我们在 WHERE 子句中规定多个值。
    e.g. 我希望在不使用OR运算符的情况下查询出Burberry, CHANEL两个品牌的所有香水(品牌集合的概念)
    1. SELECT * FROM Perfume
    2. WHERE brand IN ('Burberry' , 'CHANEL') ;
    3. -- 对于字符串类型的属性记得加上''

    NOT IN

    e.g. 我想要不是来自英国和美国的香水
    1. SELECT * FROM Perfume
    2. WHERE country NOT IN ('英国' , '美国') ;

    5、DISTINCT 去重查询

    请列出香水表中价格超过500块的不同的香水品牌
    1. SELECT DISTINCT brand FROM Perfume
    2. WHERE price > 500 ;

    6、ORDER BY 排序指令

    ORDER BY 需要结合asc或者desc一起使用
    asc是升序,desc是降序,不加的话默认是升序
    e.g. 我想以字母升序显示品牌列,以数字升序显示价格列;
    1. SELECT * FROM Perfume
    2. ORDER BY brand ASC , price DESC ;
    3. -- 多列要排序用 , 隔开,且优先级高低按从左到右逐次降低

    7、LIMIT 限制

    e.g. 我想查询整个香水表的第2~4条记录
    1. SELECT * FROM Perfume LIMIT ( 2 , 4 ) ;
    e.g. 查询当前价格最低的前三款香水
    1. SELECT * FROM Perfume
    2. ORDER BY price ASC LIMIT 3 ;
    3. -- LIMIT 写在最后

补充:

  • 在SQL server 中没有LIMIT,用的是TOP

e.g. 查询香水表中前4条数据

  1. SELECT TOP 4 * FROM Perfume ;
  2. --不同于LIMIT TOP 要写在前面
  • 在Oracle中用的是ROWNUM

e.g. 查询香水表中价格最低的前4条数据

  1. SELECT * FROM Perfume
  2. WHERE ROWNUM <= 4
  3. ORDER BY price ASC ;