SQL一

来源:互联网 发布:不基于比较的排序算法 编辑:程序博客网 时间:2024/05/16 13:42
                     SQL语句一

1. 检索不同的值
Distinct
Select distinct vend_id from Products;
分析:select distinct vend_id告诉DBMS只返回不同(具有唯一性)的vend_id行。
警告:不能部分使用distinct
Distinct关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定select distinct vend_id,prod_price ,除非指定的两列完全相同,否则所有的行都会被检索出来。
2. 限制结果
Select语句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定数量的行,这是可行的,然而遗憾的是,各种数据库中的这一SQL实现并不相同。
在SQL Server和Access中使用select时,可以使用top关键字来限制最多返回多少行,在Oracle中不适用。
在SQL Server和Access中使用select:
Select top 5 prod_name from Products;
在DB2:
Select prod_name from Products fetch first 5 rows only;
在Oracle:
Select prod_name from Products where rownum <= 5;
在MySQL,MariaDBA,PostgreSQL,SQLite
Select prod_name from Products limit 5;
3. 按多个列排序
经常需要按不止一个列进行数据排序。例如,如果要显示雇员名单,可能希望按姓和名排序(首先先按姓排序,然后在每个姓中再按名排序)。

   下面的代码检索三个列,并按其中两个列对结果进行排序—首先按价格,然后按名称排序   Select prod_id,prod_price,prod_name from Products order by prod_price,prod_name;   也可以按照列位置排序   select t.name,t.book_no from d401 t order by 1,2;   这样查的结果集都是一样。   如果select t.name from d401 t order by 2;这样的查询就是错误的会报错。   注:当order by与where同时出现时,order by位于where之后。

4. 范围值检查
要检查某个范围的值,可以使用between操作符,其语法与其他的where子句的操作符稍有稍有不同,因为它需要两个值,即范围的开始值和结束值。
select t.office_date from d504 t where to_char(t.office_date,’yyyy-mm-dd’) between ‘2016-01-01’ and ‘2016-03-31’ order by t.office_date;–date范围
select prod_name,prod_price from Products where prod_price between 5 and 10;–number范围
其实between…and…与>= and <=类似,结果值是一样的。
5. 空值检查
在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不包含值时,称其空值null。
Null(no value),它与字段包含0,空字符串或仅仅包含空格不同。
确定值是否为null,不能简单的检查是否= null,而是is null。
Select prod_name from Products where prod_price is null;
这条语句返回所有没有价格的(空prod_price字段,不是价格为0)产品。

0 0