1、简单 SELECT 语句
使用 SELECT 检索表数据,必须至少给出两条信息——想选择什么, 以及从什么地方选择。
需要注意的几点
- 多条 SQL语句必须以分号(;)分隔
- SQL语句不区分大小写,但是列名和值的大小写需要根据实际情况而定
许多 SQL开发人员喜欢对 SQL关键 字使用大写,而对列名和表名使用小写,这算是一个不成名的规范。 - 在处理 SQL语句时,其中所有空格都被忽略。
所以我们的SQL语句也可以写成这样,方便阅读。 - SQL语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。
SELECT prod_name FROM Products;
...
SELECT
prod_name
FROM
Products;
2、多列查询
列名之间必须以逗号分隔
SELECT prod_id, prod_name, prod_price FROM Products;
3、检索所有列
星号(*)通 配符,
除非你确实需要表中的每一列,否则最好别使用*
通配符,检索不需 要的列通常会降低检索和应用程序的性能。
SELECT * FROM Products;
4、IN的使用
IN 这个指令可以让我们依照一或数个不连续 (discrete) 的值的限制之内抓出数据库中的值
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
5、BETWEEN 的使用
BETWEEN 让我们可以运用一个范围 (range) 内抓出数据库中的值。
SELECT *
FROM Store_Information
WHERE Txn_Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999';
**注意:**这里的BETWEEN AND 中间接的参数需要用''
英文单引号包裹,而不是用‘’
中文单引号进行包裹
6、去掉重复值,DISTINCT 的使用
- 单列查询
SELECT file_name FROM "adjunctlist"
- 单列去重查询
SELECT DISTINCT file_name FROM "adjunctlist"
- 多列查询
SELECT file_name ,file_path FROM "adjunctlist"
- 多列去重查询
SELECT DISTINCT file_name ,file_path FROM "adjunctlist"
DISTINCT 关键字会作用于你查询的所有列
7、限定查询 ,LIMIT
MySQL、MariaDB、PostgreSQL或者 SQLite,需要使用 LIMIT
Oracle ,需要使用行计数器 ROWNUM
SQL Server和 Access ,需要使用TOP关键字来处理
DB2 则需要一个特定的SQL语句 : FETCH FIRST 【查询的数量】 ROWS ONLY
- Oracle 实现类似LIMIT的功能
查询前10行:
select * from 【表名】where rownum<=10;
查询10到100行:
select * from 【表名】rownum<101 minus select * from TABLE rownum>9
注:
select * from 【表名】and rownum>99 and rownum<101 是错误的,oracle会认为条件不成立
- Access 实现类似LIMIT的功能
其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为0)均为变量,请相应处理。
SQL语句解释:子查询得到逆序排列的前 PageSize * (PageIndex + 1) 条记录,然后把这PageSize * (PageIndex + 1)条记录按正序排列得到前 PageSize 条记录,这样对应分页的数据就取出来了,之后再按实际需求进行排序就OK了
SELECT * FROM
(
SELECT TOP [PageSize] * FROM
(
SELECT TOP [PageSize * (PageIndex + 1)] * FROM 【表名】WHERE 【条件】 ORDER BY id DESC
)
ORDER BY id ASC
)
ORDER BY id DESC
- DB2 实现类似LIMIT的功能
和 Access 的实现一样,也是利用正序和倒叙。
查询前10行 :
fetch first 10 rows only
查询 11 - 20:
fetch first 20 rows only – 倒序 – fetch first 10 rows only – 正序
其他依次类推。
- LIMIT 的使用
LIMIT 【查询条数】OFFSET 【偏移量】
查询前10条:
这里虽然没有写 OFFSET ,实际相当于 OFFSET 0
SELECT * FROM 【表名】LIMIT 10
查询前21-30条:
SELECT * FROM 【表名】LIMIT 10 OFFSET 20
备注:
MySQL 和 MariaDB 支持简化版的LIMIT 【查询条数】 OFFSET 【偏移量】
语句,即LIMIT 【偏移量】,【查询条数】
。
注意简化版 LIMIT 语句的【偏移量】和【查询条数】的位置