SQL学习笔记2 检索 排序 过滤

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操作符搭配时,可以快速找出不匹配的行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值