第4章 检索数据
**提要:**本章主要介绍了SELECT的基本使用。
1:
为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
2:
检索单个列:
SELECT prod_name FROM products;
说明:本条语句是最基本的语句,比较简单,需要注意的是命名和书写规范;复杂的语句可以分成多行书写。
数据库相关规范(一种):
1、表名以T_开头,全部大写,以下划线分割,如:T_GOOD_GALLERY;
2、列名全部小写,以下划线分割,如:user_name;
3、所有单词均为单数;
4、关键字全部大写;
5、SQL语句结束时加";"。
3:
检索多个列:
SELECT prod_id,prod_name,prod_price FROM products;
4:
检索所有列
SELECT * FROM products;
注意:
使用通配符(*)的缺点:降低性能、不能显示查询的所有列;优点:检索出名字未知的列。
5:
关键字DISTINCT
SELECT DISTINCT vend_id FROM products;
注意:
1、关键字DISTINCT意思是去重,返回的结果是不同的;
2、DISTINCT应用于所有列,当查询多个字段时,除非两行数据完全相同,否则会检索出所有行。
当查询ID和NAME时:
SELECT DISTINCT ID,NAME FROM T_USER;
以下表格会检索出3条数据。
ID | NAME |
---|---|
1 | a |
2 | b |
3 | c |
以下表格会检索出2条数据。
ID | NAME |
---|---|
1 | a |
1 | a |
3 | b |
6:
关键字LIMIT
从第一行开始,查询5行数据。
SELECT prod_name FROM products LIMIT 5;
从第6行开始,查询10行数据。
SELECT prod_name FROM products LIMIT 5,10;
注意:
1、从第一行查询数据,第一个参数可以省略;
2、要查询的数据可以这么理解:从第(LIMIT第一个参数+1)行开始(包含该行),查询共(LIMIT第二个参数)行数据;
3、数据库中的数据没有要查询的行数多时,只会返回数据库中的行数。
7:
完全限定名
SELECT products.prod_name FROM crashcourse.products; -- 假定表在crashcourse数据库中
第5章 排序检索数据
**提要:**本章主要讲述了SELECT语句的ORDER BY子句的使用。
1:
子句(clause): SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。
2:
简单排序
SELECT prod_name FROM products ORDER BY prod_name;
注意:
一般通过查询的列排序,但是也可以使用非查询的列排序。
3:
按多个列排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
注意:
排序时首先按第一列排序,当第一列完全相同时才会按第二列排序。
4:
指定排序方向->降序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
多个列降序排列
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name DESC;
注意:
1 ASC代表升序,DESC代表降序;
2 默认是升序,ASC作用不大;
3 ORDER BY排序时不区分大小写;
5:
结合LIMIT使用->查询产品最高的价格
SELECT prod_price FROM products ORDER BY prod_price LIMIT 1;
第6章 过滤数据
**提要:**本章讲述了SELECT语句的WHERE子句使用。
1:
基本使用
SELECT prod_name,prod_price FROM products WHERE prod_price = 2.5;
2:
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在指定的值之间 |
3:
单个检索
SELECT prod_name,prod_price FROM products WHERE prod_name = 'fuses';
SELECT prod_name,prod_price FROM products WHERE prod_price >=10;
4:
不匹配检索
SELECT vend_id,prod_name FROM products WHERE vend_id <>1003;
5:
范围匹配
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
注意:
1 字符串需要引号,数字不需要;
2 BETWEEN包含两边的值。
6:
空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL;
注意:
NULL与不匹配过滤:
where条件是!=某值时,不会返回是null的行
第7章 高级过滤数据
**提要:**本章主要介绍了where更高级的使用和NOT/IN操作符。
操作符(operator): 用来联结或改变 WHERE 子句中的子句的关键字。也称为逻辑操作符。
1:
AND操作符
SELECT prod_id,prod_price FROM products WHERE prod_id = 1003 AND prod_price >10;
2:
OR操作符
SELECT prod_id,prod_price FROM products WHERE prod_id = 1002 OR prod_id = 1003;
3:
优先级
SELECT prod_id,prod_price FROM products WHERE prod_id = 1002 OR prod_id = 1003 AND prod_price >10;
返回数据:
- id=1002的数据
- id=1003并且价格>10
SELECT prod_id,prod_price FROM products WHERE (prod_id = 1002 OR prod_id = 1003) AND prod_price >10;
返回数据:
id=1002或1003,并且价格>10
4:
IN操作符
SELECT prod_id,prod_price FROM products WHERE prod_id IN(1002,1003);
IN比OR的优点:
- IN 操作符的语法更清楚且更直观;
- 计算的次序更容易管理(IN使用的操作符更少);
- IN 一般比 OR 执行更快;
- IN 的最大优点是可以包含其他 SELECT 语句。
5:
NOT操作符
SELECT prod_id,prod_price FROM products WHERE prod_id NOT IN (1002,1003);
第8章 使用通过符过滤
提要: 本章介绍了通配符和LIKE操作符。
通配符(wild card): 用来匹配值的一部分的特殊字符。
**谓词:**返回值为真值的函数。主要有:LIKE,BETWEEN,IS NULL,IS NOT NULL, IN,EXISTS.
1:
(%)通配符:任何字符出现任意次数
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_name LIKE 'jet%';
任意位置,多个通配符
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_name LIKE '%jet%';
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_name LIKE 's%e';
注意:
- 为了防止空格干扰,应该在字段的两边都加上%;
- %不能匹配NULL;
2:
(_)通配符:单个字符
SELECT prod_name FROM products WHERE prod_name LIKE '_ton anvil';
返回:1ton anvil,2ton anvil;
SELECT prod_name FROM products WHERE prod_name LIKE '%ton anvil';
返回:1ton anvil,2ton anvil,.5ton anvil;
注意:
(_)通配符只能匹配一个字符,不能多,也不能少。
3:
注意事项:
- 不要过度使用通配符;
- 在确实需要使用通配符时,尽量不要把它们用在搜索模式的开始处;
- 注意通配符的位置。如果放错地方,可能不会返回想要的数据。