一、基本查询语句
上一篇中已经学到,sql基本的查询语句形式为:
select select 列名称 from 表名称;
sql语句是不区分大小写的,而且会忽略空格,语句可以一行给出,也可以分成多行。
显然分成多行,且使用大写将关键字与表名列名等区分开更容易阅读和调试。
另外每个sql语句必须以分号结尾。
检索多个列:
SELECT id,name
FROM students;
其中sudents为上一篇中建立的表。
检索全部列:
SELECT *
FROM students;
二、排序检索数据
可使用ORDER BY
子句来根据需要排序检索出的数据。
这里有一个子句的概念:
sql语句由子句构成,有的子句是必需的,而有的可选,一个子句通常由一个关键字加上所提供的数据组成。如SELECT和FROM子句。
要注意的是ORDER BY
子句的位置:
在指定一条ORDER BY子句时,必须保证它时最后一个sql子句,否则会报错。
按单列排序
SELECT *
FROM students
ORDER BY id;
按多列排序
SELECT *
FROM students
ORDER BY age,id;
这样会首先依据age进行排序,如果有几项的age相同,那么会再依据id排序。
按列位置排序
SELECT *
FROM students
ORDER BY 1;
可以指定使用第几列进行排序,上面的语句指定了第一列。
指定排序方向
对某列指定DESC
关键字表明按此列降序排列,相反的ASC
关键字表示升序,这是默认的,无须指定。
SELECT *
FROM students
ORDER BY age DESC,id;
三、过滤数据
使用WHERE子句
SELECT id,name
FROM students
WHERE id<10;
上面的语句过滤出id<10的记录。
mariadb中的WHERE子句支持如下操作符:
操作符 | 说明 |
---|---|
= | 等于 |
!= | 不等于 |
<> | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
IS NULL | 为NULL值 |
范围值检查
SELECT *
FROM students
WHERE id BETWEEN 5 AND 10;
使用BETWEEN时必须指定两个值——最小值和最大值,BETWEEN匹配范围内所有的值,包括指定的最小值和最大值。
即上面的语句等价于:
SELECT *
FROM students
WHERE id id>=5 AND id<=10;
空值检查
SELECT *
FROM students
WHERE id age IS NULL;
在创建表时,表设计人员可以指定其中的列是否可以不包含值,当一个列不包含值时,称其包含空值NULL
。它与包含零值、空字符串或仅仅包含空格不同。
四、高级数据过滤
使用逻辑操作符
上面已经涉及到,AND
表示逻辑与,OR
表示逻辑或
SELECT *
FROM students
WHERE id id>=5 AND id<=10;
```
SELECT *
FROM students
WHERE id id=2 OR id=3;
WHERE
子句可以组合任意数量的AND
和OR
,但一定要注意两者运算优先级不同,sql会先计算AND
再计算OR
。
使用括号来避免这一问题。
IN操作符
IN
操作符用来指定条件范围,范围中的每个条件都可以匹配。IN
的合法值是由逗号分隔的清单,全部括在圆括号中。
SELECT *
FROM students
WHERE name IN ('xiaoming','xiaohong')
ORDER BY id;
NOT操作符
WHERE
子句中的NOT
操作符只有一个功能,即否定它之后所跟的条件,相当于逻辑否。
SELECT *
FROM students
WHERE name NOT IN ('xiaoming','xiaohong')
ORDER BY id;