SQL-SELECT-检索数据(一)
来源:互联网 发布:金门炮战知乎 编辑:程序博客网 时间:2024/05/17 03:27
1. 检索数据
SELECT 从一个或者多个表中检索信息
-- 检索单个列SELECT prod_name FROM products;-- 检索多个列SELECT prod_id, prod_name, prod_price FROM products;-- 检索所有的列SELECT * FROM products;-- 检索不同的值SELECT DISTINCT vend_id FROM products;-- 限制结果 (MYSQL)SELECT prod_name FROM products;SELECT prod_name FROM products LIMIT 5;SELECT prod_name FROM products LIMIT 3 OFFSET 0; -- 从第0行开始,检索3行SELECT prod_name FROM products LIMIT 0, 3; -- 从第0行开始,检索3行
2. 排序检索数据
使用ORDER BY子句对检索出的数据进行排序。ORDER BY子句必须是SELECT语句中的最后一条子句。根据需要,可以利用它在一个或者多个列上对数据进行排序。
-- 排序:保证ORDER BY位于查询语句最后一条子句SELECT prod_name FROM products ORDER BY prod_name; -- 按照字母表的顺序排序 SELECT prod_name FROM products ORDER BY prod_id; -- 用非检索数据排序也是合法的-- 按多个列排序SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price, prod_name;-- 按列位置排序:易混淆,不推荐使用SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2,3;-- 降序排列:DESC(由于默认为升序排列)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只作用到直接位于其前面的列名,上例中,只对prod_price列指定的DESC,对prod_name列不指定,因此,prod_price列以降序排列,而prod_name仍以升序排列。
3. 过滤数据
使用 SELECT 语句的 WHERE 子句指定搜索条件。只检索所需数据需要指定搜索条件,搜索条件也成为过滤条件。
WHERE 子句在表明(FROM子句)之后给出。
SQL过滤与应用过滤:
数据放在应用过滤特别不妥。让客户端应用(或开发语言)处理数据库的工作将会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,在客户端过滤数据,服务器不得不通过网络发送多余的数据,这样导致网络带宽的浪费。因此,应该把过滤好的数据发送至客户端。
WHERE 子句操作符:
注:并非所有的DBMS都支持这些操作符。想确定你的DBMS支持哪些操作符,请参阅相应的文档。
-- 使用WHERE子句进行相等检测SELECT prod_name, prod_price FROM products WHERE prod_price = 3.49;-- 使用WHERE子句进行其他检测SELECT prod_name, prod_price FROM products WHERE prod_price < 10;SELECT prod_name, prod_price FROM products WHERE PROD_PRICE <= 10;-- 不匹配检测SELECT vend_id, prod_name FROM products WHERE vend_id <> 'DLL01';# 何时使用引号:单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。SELECT vend_id, prod_name FROM products WHERE vend_id != 'DLL01';-- 范围值检查:使用BETWEEN操作符(需要两个值,即范围的开始值和结束值)SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;-- 空值检查# NULL 与字段包含0、空字符串或者仅仅包含空格不同。# SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值得列。这个WHERE子句就是IS NULL子句。SELECT prod_name FROM products WHERE prod_price IS NULL;SELECT cust_name FROM customers WHERE cust_email IS NULL;# 这条语句返回所有没有价格(空prod_price字段,不是价格为0)
注意:NULL和不匹配
通过过滤选择不包括指定值的所有行时,有可能希望返回含有NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们如何匹配,所以在进行匹配过滤或不匹配过滤时,不会返回这些结果。过滤数据时,一定要验证被过滤列中含NULL的行确实出现在返回的数据中。
4. 高级数据过滤
为了进行更强的过滤控制,SQL允许给出多个 WHERE 子句。
-- AND操作符:可以增加多个过滤条件,每个条件间都要使用AND关键字。SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 'DLL01' AND prod_price <= 4;-- OR操作符:匹配任一条件而不是同时匹配两个条件 SELECT prod_name, prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';# 第一个条件得到满足的情况下,就不再计算第二个条件(在第一个条件满足时,不管第二个是否满足,相应的行都被检测出来)-- AND在求值过程中优先级更高 SELECT prod_name, prod_price FROM products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;# 使用圆括号明确地分组操作符,不要过分的依赖默认求值顺序-- IN操作符:用来指定条件范围 SELECT prod_name, prod_price FROM products WHERE vend_id IN('DLL01','BRS01') ORDER BY prod_name;-- IN操作符完成了与OR相同的功能,但推荐使用INSELECT prod_name, prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' ORDER BY prod_name;-- NOT操作符:用来否定其后条件的关键字。NOT从不单独使用,总是与其他操作符一起使用。SELECT prod_name FROM products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;-- 使用<>操作符来完成SELECT prod_name FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;SELECT prod_name FROM products WHERE NOT vend_id IN('DLL01', 'BRS01') ORDER BY prod_name;
5. 用通配符进行过滤
什么是通配符?
通配符(wildcard):用来匹配值的一部分的特殊字符。
搜索模式(search pattern): 由字面值、通配符或者两组构成的搜索条件。
如何使用通配符?
通配符搜索只能用于文本字段(串),非文本数据类型字段不能使用符。
怎样使用 LIKE 操作符进行匹配搜索?
- 百分号(%)通配符
-- 找出所有以词Fish起头的产品SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'Fish%';
注:区分大小写:根据DBMS 的不同及其配置,搜索可是是区分大小写。如果区分大小写,则‘fish%’与 Fish bean bag toy 就不匹配。
-- 使用两个通配符SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%bean bag%';-- 搜索模式‘%bean bag%’表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符--找到以F起头,以y结尾的所有产品SELECT prod_name FROM products WHERE prod_name LIKE 'F%Y';-- 可以根据邮箱地址的一部本来查找电子邮箱
- SQL-SELECT-检索数据(一)
- SQL-SELECT-检索数据(二)
- MySQL 检索数据Select——MySQL系列(一)
- 第二章 SQL Select 语句检索数据
- SQL基础 利用SELECT检索数据
- [My SQL] 使用SELECT检索数据
- 使用SQL SELECT语句检索数据
- ORACLE SQL 1 使用 SQL SELECT 语句检索数据
- SELECT语句检索数据
- 利用SELECT检索数据
- MySQL SELECT检索数据
- select 检索数据
- sql 教程系列 一、检索数据
- MySQL检索数据之SELECT
- 【MySql】检索数据SELECT语句
- mysql的检索数据SELECT
- 一些Select检索高级用法(适用于SQL Server)
- 一些Select检索高级用法(适用于SQL Server)
- FZU 2111
- rhel7 kickstart 参考[备忘]
- nmap使用方法--方便自己查
- linux 可打开的文件描述符数
- 数组的几种排序方式
- SQL-SELECT-检索数据(一)
- 线性回归中偏差,方差权衡
- Light OJ 1253 Misere Nim
- IO和File
- hibernate缓存机制详细分析(一级、二级、查询缓存,非常清晰明白)
- Linux下spi驱动开发(1) .
- HTML5+开发移动app教程1-环境搭建
- linux内核组件分析之---设备驱动模型之driver
- 制作一个跳转提示页面