Oracle学习总结(四)——SELECT检索

一、基本语法

语法结构:

SELECT
[DISTINCT|ALL]
select_list
FROM table_list
[where_clause]
[group_by_clause]
[HAVING condition]
[order_by_clause]

说明:
[DISTINCT|ALL]:是否去除列表中的重复记录
select_list:需要查询的字段列表
FROM:关键字,用于表示数据来源

select_list具体语法:

{
    *|
    {
        [ schema. ]{ table | view } .*
        | expr [ [ AS ] c_alias ]
    }
}

说明:
schema:模式名称
table | view:表或视图。
Expr:表达式。
C_alias:别名。

二、基础用法

获取指定字段的数据

SELECT a1,b1.c1 FROM table_name;

获取所有字段数据

SELECT * FROM table;
  1. 此处不建议使用*进行编码,只建议日常操作、测试使用。原因如下:
    1.查询明确的列比使用通配符*效率高
    2.只返回必要的列的数据可以减少网络消耗
    3.使用通配后,表中新增字段程序可能异常

使用别名

SELECT a1 AS 壹,a2 AS贰,a3 叁 FROM table_name;

AS关键字可省略,加空格即可。

使用表达式

SELECT a1,a2,a3 || ‘*’ || 100 || ‘=’ || a3*100 FROM table_name;

||代表连字符,类似JAVA中的 +

使用函数作为查询的字段

SELECT a1,a2,subStr(a3,1,6) AS 截取后的字符串 FROM table_name;

去除重复

SELECT distinct(a1) FROM table_name;

三、结果排序

语法:

ORDER BY
{expr | postion | c_alias}
[ASC | DESC]
[NULLS FIRST | NULLS LAST]
    [ , {expr | position | c_alias}
        [ASC | DESC]
        [NULLS FIRST | NULLS LAST]
    ]...

说明:
ORDER BY:排序关键字
expr:表达式
position:表中列的位置
c_alias:别名
[NULLS FIRST | NULLS LAST]:空值处理方式

升序或降序

SELECT a1,a2,a3 FROM table_name ORDER BY a1 DESC;

最后加了DESC为降序,加ASC为升序,默认不加为升序

NULL处理

SELECT a1,a2,a3 FROM table_name ORDER BY a1 NULLS FIRST;

NULLS FIRST即为NULL值排在首位,NULLS LAST即为NULL值排在末尾。

使用别名作为排序手段

SELECT a1,a2,a3 排序 FROM table_name ORDER BY 排序;

使用表达式作为排序手段

SELECT a1,a2,a3 FROM table_name ORDER BY a1*a2;

表达式中NULL和其他值相乘结果为NULL

使用字段位置排序

SELECT a1,a2,a3 FROM table_name ORDER BY 3;

即意为按a3排序

使用多个字段排序

SELECT a1,a2,a3 FROM table_name ORDER BY a1 ASC,3 DESC;

当第一个字段内值相同时会按第二个条件排序

四、WHERE子句

WHERE子句用于定义查询条件

操作符:

  • 关系操作符<、<=、>、>=、=、!=、<>
  • 比较操作符:IS NULL:如果操作数为NULL则返回true
  • 比较操作符:LIKE:模糊比较字符串
  • 比较操作符:BETWEEN..AND…:验证值是否在范围内
  • 比较操作符:IN:验证操作数是否属于设定的集合
  • 逻辑操作符:AND
  • 逻辑操作符:OR
  • 逻辑操作符:NOT

五、GROUP BY子句

格式:

GROUP BY
    { expr
    | { ROLLUP | CUBE } {{expr  [, expr ]...}}
}

说明:
Expr:通常为列名
ROLLUP | CUBE:可以返回小计和总计
b)GROUP BY不许出现在WHERE中,但是可以出现在WHERE后面,来处理WHERE过滤后的数据。

六、HAVING子句

通常与GROUP BY一起使用,限制搜索条件。

SELECT a1,a2,a3,AVG(a4) FROM table_name GROUP BY a1 HAVING AVG(a4)>1000

七、子查询

此处略去子查询的基本使用方式,仅说明量化比较关键字用法:

  • ANY:表示满足子查询结果的任何一个。和<、<=搭配,表示小于等于列表中的最大值,大于号反之。
  • SOME:基本同上。
  • ALL:表示满足子查询所有结果。和<、<=搭配,表示小于等于列表中的最小值,大于号反之。
  • 例子:
SELECT a1,a2,a3 FROM table_name WHERE a1< ANY(SELECT b1 FROM table_name)

你可能感兴趣的:(Oracle,oracle,sql,数据库)