SQL学习笔记2 检索 排序 过滤
2018-03-02 16:04
561 查看
SELECT 检索数据
基本语法SELECT 列名1[,列名2,列名3...] FROM 表名;
多条SQL语句必须以分号( ; )分隔,SQL语句不区分大小写,但一般关键字使用大写,便于阅读
使用星号(*)检索所有列
SELECT * FROM products;
使用DISTINCT关键字去除重复
SELECT DISTINCT vend_id FROM products;
使用
DISTINCT关键字必须放在列名最前面,其作用于后续所有的列
限制结果
-- SQL Server 和 Access -- 返回5行数据 SELECT TOP 5 prod_name FROM products;
-- DB2 -- 返回5行数据 SELECT prod_name FROM products FETCH FIRST 5 ROWS ONLY;
-- Oracle -- 返回5行数据 SELECT prod_name FROM products WHERE ROWNUM <=5;
-- MySQL、MariaDB、PostgreSQL或SQLite -- 返回5行数据 SELECT prod_name FROM products LIMIT 5; -- 返回第3行起的5行数据 SELECT prod_name FROM products LIMIT 5 OFFSET 3; -- 或LIMIT 5,3;
第一个被检索的行是第0行,而不是第1行。因此,
LIMIT 1 OFFSET 1会检索第2行
并非所有SQL实现都一样,不同的数据库软件可能会有一定的差异
注释
行内注释SELECT * -- 这是一条注释 FROM products;
多行注释
/* SELECT prod_name,vend_id FROM products; */
ORDER BY 排序数据
基本语法ORDER BY 列名1 [,列名2,列名3...];
可按1个列或多列进行排序,当进行多列排序时,按指定列的顺序依次进行排序
ORDER子句必须是
SELECT语句中的最后一条子句,否则会出现错误
可以使用非检索的列进行排序数据
按列位置排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY 2,3; -- 相当于按prod_price和prod_name排序
可以混合使用实际列名和相对列位置进行排序
使用DESC降序排列
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_id DESC;
DESC关键字只应用于其前面的列名,若想在多个列名上降序排列,则必须对每一列指定
DESC关键词
除了
DESC降序排列,还有
ASC升序排列,但因为默认的排序结果为升序排列,因此用处不大。
WHERE 过滤数据
检查单个值
SELECT prod_price,prod_name FROM products WHERE prod_price < 10;
不匹配检查
SELECT vend_id,prod_name FROM products WHERE vend_id <> 'DLL01';
范围值检查
SELECT prod_price,prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;
空值检查
SELECT prod_price,prod_name FROM products WHERE prod_price IS NULL;
通过过滤选择不包含指定值的所有行时,返回结果中不会包括含NULL值的行,因为数据库不知道它们是否匹配
使用AND操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 'DLL01' AND prod_price <= 4;
AND操作符用来检索满足所有给定条件的行
使用OR操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
AND操作符的优先级高于
OR操作符,因此在使用AND和OR操作符时,需要注意顺序,最好使用圆括号进行分组
SELECT prod_id,prod_price,prod_name FROM products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price > 10;
使用IN操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id IN ( 'DLL01','BRS01') ORDER BY prod_name;
IN操作符一般比一组
OR操作符执行得更快,其可以包含其他
SELECT语句,推荐使用
使用NOT操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE NOT vend_id = 'DLL01';
NOT用来否定其后条件的关键字,与IN操作符搭配时,可以快速找出不匹配的行
相关文章推荐
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
- 数据库笔记6:检索,排序检索,过滤数据
- oracle开发之<<SQL Cookbook>>学习笔记整理:第二章 查询结果排序
- 数据库笔记6:检索,排序检索,过滤数据
- 经典SQL学习笔记 (一)-简单、限定、模糊、排序
- 数据库笔记6(下半部分):检索 排序 过滤
- 数据库笔记6(下半部分):检索 排序 过滤
- MySQL必知必会笔记(二)SELECT语句 检索 排序 过滤 通配符搜索 正则表达式搜索
- 数据库学习(一)检索、排序、过滤、通配符
- SQL学习笔记四 聚合函数、排序方法
- PL/SQL 学习笔记(一)----- pl/sql 基本查询与排序
- 学习笔记---检索与排序
- 数据库笔记6:检索,排序检索,过滤数据
- SQL学习笔记四聚合函数、排序
- Oracle Database 11g SQL 开发指南学习笔记:从数据库中检索数据
- Oracle Database :Oracle11g SQL开发指南学习笔记之(5):从数据库表中检索信息
- EF6 学习笔记(三):排序、过滤查询及分页
- SQL学习笔记四 聚合函数、排序方法
- sql必知必会学习笔记-二,检索,过滤数据
- 数据库笔记6(下半部分):检索 排序 过滤