持续更新中。。。
检索数据
检索不同的值
检索出不同的值,使用distinct
,而且必须放在列的前面,作用于后面所有的列
select distinct vend_id from Products;
限制结果
使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT
子句
select prod_name from Products limit 5;
LIMIT 5
指示MySQL等DBMS返回不超过5行的数据
为了得到后面的5行数据,需要指定从哪儿开始以及检索的行数,像这样:
select prod_name from Products limit 5 offset 5;
LIMIT 5 OFFSET 5
指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始
注意:数据库行数是从第0行开始
MySQL、MariaDB和SQLite支持简化版的LIMIT 4 OFFSET 3
语句,即LIMIT3,4
。使用这个语法,逗号之前的值对应OFFSET
,逗号之后的值对应LIMIT
注释
单行注释使用 --
或者 #
多行注释使用 /* */
排序检索数据
排序数据
ORDER BY
子句取一个或多个列的名字,据此对输出进行排序
select prod_name from Products order by prod_name;
在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错误消息。
按多个列排序
首先按价格,然后按名称排序。
select prod_id, prod_price, prod_name from Products order by prod_price, prod_name;
对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序
按列位置排序
select prod_id, prod_price, prod_name from Products order by 2, 3;
SELECT清单中指定的是选择列的相对位置而不是列名。ORDER BY 2表示按SELECT清单中的第二个列prod_price进行排序。ORDER BY 2, 3表示先按prod_price,再按prod_name进行排序。
指定排序方向
与DESC(降序)相对的是ASC(升序)
为了进行降序排序,必须指定DESC关键字。
select prod_id, prod_price, prod_name from Products order by prod_price desc;
使用多个列排序
DESC关键字只应用到直接位于其前面的列名
select prod_id, prod_price, prod_name from Products order by prod_price desc, prod_name;
与DESC相对的是ASC,在升序排序时可以指定它
过滤数据
使用WHERE子句
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出
select prod_name, prod_price from products where prod_price = 3.49;
在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误
WHERE子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
!= | 不等于 |
<> | 不等于 |
> | 大于 |
!> | 不大于 |
>= | 大于等于 |
< | 小于 |
!< | 不小于 |
<= | 小于等于 |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为NULL |
检查单个值
检索所有价格小于等于10美元的产品
select prod_name, prod_price from products where prod_price <= 10;
不匹配检查
WHERE子句中的条件,单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。
SELECT vend_id, prod_name from products where vend_id <> "DLL01"; SELECT vend_id, prod_name from products where vend_id != "DLL01";
范围值检查
要检查某个范围的值,可以使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。
检索价格在5美元和10美元之间的所有产品
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
空值检查
在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不包含值时,称其包含空值NULL。
NULL : 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其语法如下:
SELECT prod_name FROM products WHERE prod_price IS NULL;
这条语句返回所有没有价格(空prod_price字段,不是价格为0)的产品,由于表中没有这样的行,所以没有返回数据
通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中。