《Oracle 入門教程》第 04 篇 簡單查詢語句

作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗,目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net


文章目錄

        4.1 查詢指定字段
        4.2 查詢?nèi)孔侄?br>        4.3 使用表達式
        4.4 設(shè)置一個新標題
        4.5 查詢中的注釋

本篇介紹如何使用SELECT語句查詢單個表中的數(shù)據(jù)。
4.1 查詢指定字段

在 Oracle 中,使用SELECT語句查詢表中的數(shù)據(jù),基本語法如下:

SELECT column1, column2, ...
FROM table_name;



其中,SELECT表示查詢,后面是需要返回的字段,多個字段使用逗號分隔;FROM表示要從哪個表中進行查詢;分號表示 SQL 語句的結(jié)束。

    ??SELECT和FROM稱為 SQL 關(guān)鍵字。關(guān)鍵字不區(qū)分大小寫,建議大寫,便于閱讀;表名和字段名等標識符一般小寫。關(guān)于 SQL 編程風(fēng)格,可以參考這篇文章。

例如,以下查詢返回了員工表中的姓名和性別字段:

SELECT emp_name, sex
FROM employee;

EMP_NAME|SEX |
--------|----|
劉備     |男  |
關(guān)羽     |男  |
張飛     |男  |
...



Oracle 中存儲的表名和字段名都使用大寫字母表示,返回的結(jié)果也使用大寫形式。
4.2 查詢?nèi)孔侄?br>
如果想要查看員工的所有字段信息,可以使用以下查詢語句:

SELECT emp_id, emp_name, sex, dept_id, manager,
       hire_date, job_id, salary, bonus, email
FROM employee;

EMP_ID|EMP_NAME|SEX |DEPT_ID|MANAGER|HIRE_DATE          |JOB_ID|SALARY|BONUS|EMAIL              |
------|--------|----|-------|-------|-------------------|------|------|-----|-------------------|
     1|劉備     |男  |      1|       |2000-01-01 00:00:00|     1| 30000|10000|liubei@shuguo.com  |
     2|關(guān)羽     |男  |      1|      1|2000-01-01 00:00:00|     2| 26000|10000|guanyu@shuguo.com  |
     3|張飛     |男  |      1|      1|2000-01-01 00:00:00|     2| 24000|10000|zhangfei@shuguo.com|
...



以上查詢在 SELECT 關(guān)鍵字之后列出了員工表中的全部字段。

另一種快速返回全部字段的方法就是使用星號(*)表示:

SELECT *
FROM employee;

EMP_ID|EMP_NAME|SEX |DEPT_ID|MANAGER|HIRE_DATE          |JOB_ID|SALARY|BONUS|EMAIL              |
------|--------|----|-------|-------|-------------------|------|------|-----|-------------------|
     1|劉備     |男  |      1|       |2000-01-01 00:00:00|     1| 30000|10000|liubei@shuguo.com  |
     2|關(guān)羽     |男  |      1|      1|2000-01-01 00:00:00|     2| 26000|10000|guanyu@shuguo.com  |
     3|張飛     |男  |      1|      1|2000-01-01 00:00:00|     2| 24000|10000|zhangfei@shuguo.com|
...



Oracle 服務(wù)器在接收到星號時會自動替換為上面的全部字段。

    ??星號可以便于快速編寫一些臨時查詢,但是在實際項目中不要使用這種寫法。因為應(yīng)用程序可能并不需要所有的字段,避免返回過多的無用數(shù)據(jù);另外,當(dāng)表結(jié)構(gòu)發(fā)生變化時,星號返回的信息也會發(fā)生改變。

4.3 使用表達式

除了查詢表中的字段之外,SELECT 查詢列表還支持基于字段的算術(shù)運算、函數(shù)和表達式等。例如:

SELECT emp_name, salary * 12 + bonus
FROM employee;

EMP_NAME|SALARY*12+BONUS|
--------|---------------|
劉備     |         370000|
關(guān)羽     |         322000|
張飛     |         298000|
...


其中,salary * 12 + bonus 是一個表達式,計算了員工一年的總收入。

以下示例是 Oracle 中常見的一種查詢方式:

SELECT current_date, 1 + 1
FROM dual;

CURRENT_DATE       |1+1|
-------------------|---|
2020-11-02 20:47:08|  2|



其中,dual 是 Oracle 為了快速查找信息和進行計算提供的一個虛擬表,它只有一個字段且只包含一行數(shù)據(jù);current_date 是一個系統(tǒng)函數(shù),返回了當(dāng)前的日期和時間。
4.4 設(shè)置一個新標題

Oracle 默認返回的字段標題有時候不方便理解,尤其是使用了表達式或者函數(shù)之后。為了提高查詢結(jié)果的可讀性,可以使用別名(alias)為字段指定一個臨時的名稱。我們?yōu)樯弦还?jié)中的示例指定一些更好理解的標題:

SELECT emp_name AS "員工姓名", salary * 12 + bonus "全年收入"
FROM employee;

員工姓名|全年收入|
------|-------|
劉備   |370000 |
關(guān)羽   |322000 |
張飛   |298000 |
...



Oracle 中使用關(guān)鍵字AS指定字段的別名,可以省略;別名一般通過雙引號進行引用。在 SQL 語句中使用別名不會修改數(shù)據(jù)庫中存儲的表名或者列名,別名只在當(dāng)前語句中有效。

    ??除了字段別名之外,Oracle 還支持為查詢語句中的表指定一個別名,我們將會在多表連接查詢中進行介紹。

4.5 查詢中的注釋

在 SQL 語句中可以像其他編程語言一樣使用注釋;注釋可以方便我們理解代碼的作用,但是不會被 Oracle 服務(wù)器執(zhí)行。

Oracle 中的注釋分為單行注釋和多行注釋。單行注釋以兩個連字符(--)開始,直到這一行結(jié)束。例如:

-- Oracle 列別名的使用案例
SELECT emp_name AS "員工姓名", salary * 12 + bonus "全年收入"
FROM employee;



多行注釋使用 C 語言風(fēng)格的注釋方法(/* … */),例如:

/* 備注:Oracle 列別名的使用案例
   作者:TonyDong
   日期:2020-11-02
*/
SELECT emp_name AS "員工姓名", salary * 12 + bonus AS "全年收入"
FROM employee;



多行注釋之間可以嵌套其他的單行注釋,但是不能嵌套其他的多行注釋。