ORACLE實例練習二(常見數據查詢例子)

1. 簡單數據查詢

1.1 單條件查詢

返回輸出的是滿足WHERE子句條件的所有記錄,即條件爲TRUE。
若需返回表所有記錄,條件可以是不爲零的常數。

1.2 根據查詢結果創建和複製表

create table stu1 
as
select * from stu;

無where條件實現表結構和數據的複製;加入where 1=2 由於“1=2”爲false,因此只會複製表結構,也可用where rownum<1實現

1.3 返回表中的前N行記錄

因爲rownum是符合條件的結果集的序號,從1開始集加的一個僞列

  • 只能使用<、<=、!=
  • 不能使用>、>=
  • =1可以返回符合條件第一行數據
  • 與order by使用時,先排序再取值
select * from stu
where rownum<4;

1.4 消除重複行

DISTINCT只消除查詢結果中的重複記錄,對原表無影響

select distinct sage from stu;

1.5 NULL值的判定

NULL表示

  • 字段值未知(不包括零、一個或多個空格組成的字符串以及零長度的字符串)
  • 字段值不存在
  • 字段對錶的記錄不可用

另外:

  • 空值不代表相等
  • IS NULLIS NOT NULL 判斷

1.6 查詢字段值爲某個範圍內的記錄

select * from stu
where sage between 22 and 25;

1.7 複合條件查詢

  • and的優先級高於or,改變優先級需要用()來實現
  • not的優先級最高

1.8 模糊查詢

like與通配符搭配使用

  • _:與任意單字符匹配
  • %:一個或多個字符的字符串匹配
  • []:與特定範圍(例如[a-f]或特定集(例如[abcdf])中 任意單字符匹配)

like後可以是完整的值,此時與=相同

1.9 使用ESCAPE和轉義字符

搜索%作爲字符而不是通配符就需要使用ESCAPE子句和轉義符來實現

select * from class
where ms like '%0!%' escape '!'

'%0!%'表示

  1. 第一個“%”是通配符,允許前面有多個字符,若比例不是100%,可使用“_”;
  2. 後一個“%”爲 普通字符百分號,爲區別於通配符,加了轉義字符“!”,用ESCAPE子句定義的轉義字符“!”;(也可用ESCPAE定義爲“\”、“a”)

2. 數據查詢函數使用

2.1 count計數

select count(distinct(sno) 人數 from stu;

2.2 sum求和

  • 只能對數值型數據求和
  • 也支持distinct關鍵字

2.3 avg求平均值

like sum

2.4 max求最大值

  • 可用於非數值的數據
  • 中文漢字比較時,將比較拼音字母

2.5 min求最小值

like min

count、sum、avg、max等聚合函數不能在WHERE子句中使用

2.6 replace查找替換

只改變顯示在控制端的值

select replace(sdept,'計算機','COMPUTER') 所在班級
from stu;

2.7 dual表

  • 對所有用戶可用的一個實際存在的表
  • 一行一列的結構固定的表,不能對其插入刪除
  • 不可存儲信息,僅執行select語句

2.8 length返回字符串長度

還可統計數值位數

SQL> select length(34444) from dual;

LENGTH(34444)
-------------
            5

SQL> select length(34444.444) from dual;

LENGTH(34444.444)
-----------------
                9

2.9 round函數輸出記錄

round(處理的數值,精度(默認爲0,爲負數時對小數點前數字四捨五入))

SQL> l
  1  select round(123.456),
  2  round(123.456,2),
  3  round(123.456,-2),
  4   round(163.456,-2)
  5* from dual
SQL> /

ROUND(123.456) ROUND(123.456,2) ROUND(123.456,-2) ROUND(163.456,-2)
-------------- ---------------- ----------------- -----------------
           123           123.46               100               200

2.9 日期運算(add_months)

SQL> select sysdate from dual;

SYSDATE
--------------
29-3-20

SQL> select sysdate,add_months(sysdate,-12) from dual;

SYSDATE        ADD_MONTHS(SYS
-------------- --------------
29-3-20     29-3-19

參數N爲小數時,往前取整數

2.10 日期格式化輸出( to_char(d|n[,fmt])

在這裏插入圖片描述

SQL> l
  1* select to_char(sysdate,'yyyy/mm/dd') 年月日,to_char(sysdate,'yyyy/mm/dd hh:mi:ss')年月日12小時制,to_char(sysdate,'yyyy/mm/dd hh24:mi:ss')年月日24小時制 ,to_char(sysdate,'yyyy"年"mm"月"dd"日"') 自定義年月日  from dual
SQL> /

年月日      年月日12小時制                         年月日24小時制                         自定義年月日
----------- -------------------------------------- -------------------------------------- ---------------
2020/03/29  2020/03/29 10:32:53                    2020/03/29 22:32:53                    20200329

自定義年月日時需要使用雙引號引用非格式化字符

2.11 提取日期特定部分

EXTRACT(fmt from d)

SQL> l
1  select sysdate 當前時間,
2  extract(year from sysdate) 年份,
3  extract(month from sysdate) 月份,
4  extract(day from sysdate),
5   extract(hour from systimestamp) 小時,#systimestamp纔可抽取時分
6   extract(minute from systimestamp),
7   extract(second from systimestamp)8* from dual
SQL> /

當前時間             年份       月份         日       小時         分         秒
-------------- ---------- ---------- ---------- ---------- ---------- ----------
29-3-20           2020          3         29         14         38     52.059
`extract`提取時間,HOUR匹配結果沒有加上時區,故在中國運行結果小八小時

ROUND(d[,fmt])

返回四捨五入日期值

SQL> l
1  select sysdate 當前日期,
2  round(sysdate),
3   round(sysdate,'year') round年, #返回某年的一月一日
4   round(sysdate,'month') round月,#返回某月的一日
5   round(sysdate,'day') round日#返回最近周的週日
6* from dual
SQL> /

當前日期       ROUND(SYSDATE) ROUND年        ROUND月        ROUND日
-------------- -------------- -------------- -------------- --------------
29-3-20     30-3-20     01-1-20     01-4-20     29-3-20

2.12 數據類型轉換

to_char:將日期類型和數字類型轉換爲字符串類型
to_num:將字符串類型轉換爲數字類型

SQL> select to_char(-123456,'L9.9EEEEPR') from dual;

TO_CHAR(-123456,'L9.9EEEEPR')
----------------------------------------
        <1.2E+05>

SQL> select to_number('-$12,345.67','$99,999.99') 數字  from dual;

      數字
----------
 -12345.67

在這裏插入圖片描述

2.13 計算時間差

SQL> select floor(to_number(sysdate-to_date('2019-03-29','yyyy-mm-dd'))) as spandays from dual;

 SPANDAYS
----------
      366
  • to_date 指定日期返回格式
  • to_number將日期轉爲數值類型
  • floor 取小於等於該相差值的最大整數
SQL> select ceil(to_number(sysdate-to_date('2019-03-29','yyyy-mm-dd'))) as spandays from dual;

  SPANDAYS
----------
       367
  • ceil獲取大於等於該相差月份的最小整數
    74
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章