Database基础_SELECT语句

一、基本句式

1. 选取特定的字段作为输出对象

  SELECT attr1, attr2, attr3,... FROM tableName;

  该语句会按照指令中字段的顺序依次输出对应的数据,另外地,SELECT不会按照特定顺序来检索行。

SELECT installSize, version, gameID FROM games;

  在MySQL的Workbench上的输出结果:

 

2. SELECT WHERE条件

  1) 句式:

  SELECT attr1, attr2, attr3,... FROM tableName WHERE condition;

 该语句会按照WHERE后的条件进行筛选,只输出符合条件的结果,WHERE后一次只能接一个字段

SELECT installSize, version, gameID FROM games
WHERE gameID=100;

  2) 执行上述语句时,系统内部执行了以下步骤:

1 FROM  读取table中的所有数据,所有记录设为待选状态
2 WHERE  使用条件进行筛选,选中符合条件的记录
3 SELECT  保留被选中的记录,输出结果到窗口

  因此,只要你使用了SELECT, 系统都会把整个指定的表格全部读取一遍,无论后面的条件句是什么。

 

二、操作符(Operator

  除了“=”以外,SQL还有很多其他的操作符,用来形成更复杂的筛选条件

1. 不等式

--注:不等式也可以用来判断日期和字符串(大小写不敏感)
WHERE gameID > 100; 
WHERE gameID < 100;
WHERE gameID <= 100;
WHERE gameID >= 100;
WHERE gameID <> 100; -- 不等于,"<>"是ANSI标准的不等号,大部分系统也支持使用"!="

 

2. IN

  • IN之后可以返回一个集合,筛选出所有能与集合内任意一个元素相同的记录
  • 由于IN判断的是一个集合,你可以在IN中插入多项数据,甚至嵌套SELECT,因为SELECT的本质也是返回数据(注意,嵌套中的SELECT必须只能返回一个字段
SELECT * FROM games 
WHERE gameID IN (100,101);

SELECT * FROM games 
WHERE gameID IN (SELECT gameID FROM games WHERE gameID=100); --吃饱了撑的

 

3. BETWEEN...AND...

  WHERE attri BETWEEN lo AND hi 可以返回指定字段处于闭区间[lo,hi]之间所有的记录

SELECT * FROM games 
WHERE gameID BETWEEN 101 AND 103;

  如果不小心将上下限的位置颠倒过来,系统虽然不会报错,但同时也不会返回任何数据

 

4. LIKE

  LIKE配合通配符"%"的使用可以进行模糊匹配,

WHERE name LIKE "%Joey";
WHERE name LIKE "Joey%";
WHERE name LIKE "%Joey%";
WHERE name LIKE "Jo%ey";

  无论如何使用通配符,“%”都代表着“任意长度的字符串”,他可以是其他字符,也可以是数字,也可以什么都没有,也就是说“%Joey”依然会返回开头是Joey的字符串,而如果字符串的开头或结尾不加%,那只会返回以“Joey”为开头/结尾的字符串

 

5. IS NULL

  一般情况下,由于NULL的特殊性,对一个字段进行筛选时,如果有的记录中该字段是NULL,那么即使他符合某些操作符的筛选条件(如!=),他也不会被选中。而只有IS NULL可以筛选出指定字段是空的记录

SELECT * FROM person WHERE Soulmate IS NULL;

   总会找到你。

 

6. NOT

  NOT加入以上语句会对筛选条件进行取反并输出。

WHERE NOT gameID>100;
WHERE gameID NOT IN (100,101);
WHERE gameID NOT BETWEEN 101 AND 103;
WHERE name NOT LIKE "%Joey";
WHERE Soulmate IS NOT NULL;

 

三、运算符、关键词、聚合函数

  仅仅一个WHERE怎么能满足我们复杂的逻辑条件,引入更多语句是十分必要的。

1. 运算符(AND / OR

  1) 基本句式:

  SELECT attri FROM table WHERE condition1 AND condition2;

  SELECT attri FROM table WHERE condition1 OR condition2;

  2) 优先级:

  AND的执行优先级要强于OR,也就是说,AND会无关你的语句顺序进行筛选。

  原始数据:

  需求:找出ID在101以下,102以上之中version不为“a”且发售日期在2021年的游戏

  查询:

SELECT * FROM games
WHERE gameID<101 OR gameID>102
AND version NOT LIKE "a"
AND releaseDate="2021-12-11";

  结果:

  不符合条件,因为以上语句中AND被优先执行了,想要满足条件必须使用括号来提高OR的优先级

SELECT * FROM games
WHERE (gameID<101 OR gameID>102)
AND version NOT LIKE "a"
AND releaseDate="2021-12-11";

  结果:

2. 排序(ORDER BY)

 

  ORDER BY 的使用可以让结果按照指定字段的顺序进行输出

——————施工中——————

posted @ 2021-04-10 15:51  JOE_Chin  阅读(238)  评论(0编辑  收藏  举报