SQL学习二、查询

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 语句的【偏移量】和【查询条数】的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值