`

SELECT查询语句

    博客分类:
  • SQL
阅读更多

 

查询:从一个或多个表或视图中检索数据的操作,不会改变表中的数据。

查询数据是关系代数,关系演算在SQL中的主要体现。select语句能够表达所有的关系表达式。

 

 

基本格式

select  列名称1 as col1, 列名称2 as col2
from  表名1 tab1, 表名2 tab2, 表名3 tab3
where  行选择条件

 

select [distinct] *|[column1 [as col1] , column2 [as col2] , …]
from table1 [tab1],table2 [tab2], …
where 查询条件
group by columnA, columnB , … 
having  对分组的约束
order by字段x,字段y,…[ASC|DESC]

 

一.基本查询

 

1.FROM

需要查询的表。表可以有别名。

 

 

2.SELECT

select关键词用于检索列。 select 之后接指定需要查询的列名称。名称之间用“,”隔开。

使用as指定列的别名,别名是查询结果集的列名称。

 

2.1 使用 * 表示检索所有列

 

2.2 检索唯一值 distinct

数据表中可能有些结果是相同的。如果要显示每个值都是唯一的结果。使用DISTINCT。

例:

select job from emp;    --有重复结果
select distinct job from emp;    --无重复结果

 

2.3 使用算数运算

例:显示EMP表中雇员们,及其工资增加20%后的工资列

select ename,(1+0.2)*sal from emp;

 

 

3. WHERE

where关键词用于检索行。where之后接检索行的boolean表达式。

 

where子句的功能:

定位要查询的行。

筛选满足条件行。

 

 

where子句的条件表达式中可以使用的运算符:

=  ; <>,!= ; >= ; <= ; > ; < ;

and ; or ; not ;

in(...)  ; not in(...) ;

between a and b ; not between a and b ;

is null ; is not null ; like ; not like

 

例:

select ename,sal,hiredate from emp where hiredate>to_date('1-1月-1982','dd-mm-yy')
select ename,sal,hiredate from emp where sal between  1000 and 2000
select ename,sal,hiredate from emp where ename like 'S%'
select ename,sal,hiredate from emp where sal in (1250,3000)

 

3.1 where子句中使用数值时候,既可以用单引号也可以不用单引号

使用字符串值,日期值时,必须使用单引号

字符串值:大小写敏感。

日期值:格式敏感。默认日期格式是:DD-MON-YY 。由数据库参数NLS_DATE_FORMAT设置。

 

3.2 使用通配符指定字符串的模糊查询条件

当字符串作为查询条件,但不能完全确定字符串而只知道它的某些特征时,使用LIKE运算符用于模糊查询。

格式:

[not] like ‘匹配字符串’ [ESCAPE ‘换码字符串’]

 

like的通配符:

%    用于表示0个或多个字符。

_     用于表示1个字符,称为位置标识符。

如果匹配字符串中需要使用”%”和”_”,则使用”\”作为转义字符。并且用ESCAPE指定该字符。

 

例:

where first_name like ‘%\_A%’ ESCAPE ‘\’           --能查询出ab_Ab,或abc_Abc等记录。

 

3.3 使用表达式

在所查询的列中使用表达式来进行算术运算+-*/ ,连接字符串|| ,系统函数等。

 

 

 

二. 排序ORDER BY

select  列名称1 as col1, 列名称2 as col2
from  表名1 tab1, 表名2 tab2, 表名3 tab3
where  行选择条件
ORDER BY  要排序的列名1 [asc|desc],要排序的列名2 [asc|desc]

1.ASC(默认排序方式),升序排列  由小到大
2.DESE,降序排列  由大到小
3.多列排列

 

注:在oracle中ORDER BY后面的列可以用函数计算后再按照计算结果排序。其他数据库还没有试过。

 

 

 

三. 分组

select  列名称1 as col1, 列名称2 as col2
from  表名1 tab1, 表名2 tab2, 表名3 tab3
where  行选择条件
GROUP BY  要分组的列名1, 要分组的列名2 
HAVING   限定分组统计结果的boolean条件

 

1. 多行函数

max 

min

avg

count

variance  返回列或表达式的方差

stdeev  返回列或表达式的标准差

说明:

多行函数的参数必须是列名称。

多行函数只能出现在所查询的列,order by子句,having子句中,不能出现在wheregroup by子句中。

除count(*)之外,其他多行函数,包括count(column_name)都会忽略用于分组的列的值为null的行。

如果查询的列同时包含列,表达式和多行函数,那么这些列,表达式应该都会出现在group by子句中。

在分组函数中可以指定all和distinct选项。

例:

select avg(sal),avg(distinct sal),max(sal) ,min(sal),sun(sal),count(*),count(sal),count(distinct sal),count(comm) from emp where deptno=30;

 

 

 

2. 使用group by子句

分组方法:按指定的一列或多列值分组,值相等分为一组。

 

作用:

该子句的作用是查询的中间结果。

该子句细化了分组函数的作用对象。

 

注意:

使用该子句后, select 子句所查询的列中只能出现用于分组的列和分组函数。

 

2.1 按单列分组

2.2 按多列分组

 

2.3 使用ROLLUP和CUBE限定词

在实际应用中,若需要生成横向,纵向的统计结果(两列分组时)。此时可以在group by子句中使用限定词rollup和cube来生成超级组合。

rollup用于生成横向统计结果。

cube用于生成纵向统计结果,横向统计结果。

 

 

3. 使用having子句

可以使用having子句类限制(或过滤)经过group by 分组处理之后的结果显示。

说明:

wheregroup byhaving三者一起使用时,先执行where过滤行,再 group by 对过滤之后的行分组。最后 having 对分组结果筛选。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics