中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle別名如何使用

發布時間:2022-04-19 17:19:43 來源:億速云 閱讀:403 作者:iii 欄目:開發技術

本篇內容主要講解“Oracle別名如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Oracle別名如何使用”吧!

今天在寫一個簡單的SQL語句并執行時拋出了如下圖所示的一個錯誤提示信息!

Oracle別名如何使用

恩,此異常信息很明顯,在SQL語句中標示符的長度過長了,簡短一些就應該沒問題了,我查看了一下我的SQL語句發現是我的查詢字段的列別名過長,實際測試的結果為列字段別名的最大長度為30個字節!

注意:我的測試數據庫是ORACLE 11.2.0.4.0(如下圖所示)

Oracle別名如何使用

ok,問題搞定了,對應的更多的錯誤信息及解決方案,也可以從ORACLE的錯誤信息手冊中查詢比如(針對此問題):

Error:
ORA-00972: identifier is too long 
Cause:
You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters. 
Action:
The options to resolve this Oracle error are: 
Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.

以上內容是我分析和解決我的SQL語句中,查詢時列的別名過長問題的過程,也是我分享這篇小博文的引子!

下面是我針對別名的一個小結(注意:我的測試數據庫是ORACLE 11.2.0.4.0 字符集是AMERICAN_AMERICA.AL32UTF8)

一:使用別名的好處

   1)簡化SQL語句的書寫,特別是多表關聯查詢且表名較長時

   2)增強SQL語句的可讀性,特別是當查詢出來的列字段較為復雜時效果更為明顯

二:測試小結

1)測試時使用的簡單表結構

CREATE TABLE SALES.STUDENT
(
  ID        NUMBER,
  NAME      VARCHAR2(20 BYTE),
  SEX       CHAR(1 BYTE),
  BIRTHDAY  DATE,
  HOBBY     VARCHAR2(20 CHAR)
)

2)測試使用的若干條測試數據

Oracle別名如何使用

3)列名的最大長度——30個字節

SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE--30個英文大寫字符,正常執行
FROM STUDENT

SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE1--多加另一個1就會報ORA-00972:identifier is to long
FROM STUDENT

SELECT ID 我們學校的好學生學號--10個中文漢字字符,正常執行
FROM STUDENT

SELECT ID 我們學校的好學生學號1--多加另一個1就會報ORA-00972:identifier is to long
FROM STUDENT

4)是否可以使用AS關鍵字——可以使用

SELECT ID AS 學號--使用AS的情況,正常執行
FROM STUDENT

SELECT ID 學號--不適用AS也可以正常執行,而且代碼更簡潔,建議使用方式
FROM STUDENT

5)是否可以以數字開頭——可以以數字開頭但必須使用雙引號括起來

SELECT ID 123學號--執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID "123學號"--正常執行

6)對于中文別名雙引號、單引號、不使用引號的區別(注意:全是英文的單引或雙引符號)——使用單引符號時報錯

SELECT ID 學號--正常執行
FROM STUDENT

SELECT ID "學號"--正常執行
FROM STUDENT

SELECT ID '學號'--執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID StudentId--正常執行
FROM STUDENT

SELECT ID "StudentId"--正常執行
FROM STUDENT

SELECT ID 'StudentId'--執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

7)是否可以使用其他的特殊符號比如:小括號——可以使用但必須使用雙引號括起來(注意:其他的特殊符號可能類似,這里以小括號為例做了測試,其他情況如果感興趣可以自己動手試試)

SELECT ID AS (學號)--英文小括號且使用AS的情形,執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID (學號)--英文小括號,執行時報"ORA-00904: "ID": invalid identifier"
FROM STUDENT

SELECT ID AS "(學號)"--正常執行
FROM STUDENT

SELECT ID AS(學號)--中文小括號且使用AS的情形,執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID(學號)--中文小括號,執行時報"ORA-00904: "ID": invalid identifier"
FROM STUDENT

SELECT ID "(學號)"--正常執行
FROM STUDENT

8)是否可以保留別名中的空格——可以,但必須使用雙引號括起來

SELECT ID 學 號--執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID "學 號"--正常執行
FROM STUDENT

SELECT ID XUE HAO--執行時報"ORA-00923: FROM keyword not found where expected"
FROM STUDENT

SELECT ID "XUE HAO"--正常執行
FROM STUDENT

9)使用別名時因SQL語句各子句的執行順序引起的問題

           ORACLE中的SQL語句, 

            1.WHERE/GROUP BY/HAVING子句中只能直接使用欄位或者常量,而不能使用欄位的別名,除非這個別名來自                   子查詢之中,如:SELECT .... FROM (SELECT COLUMN_NAME C FROM TABLE_NAME) WHERE C > 1
            2.而ORDER BY 則可以直接使用別名,如SELECT COLUMN_NAME C FROM TABLE_NAME ORDER BY C

                這和SQL的執行順序是有關的,SQL語句的執行順序大致如下所示:

                1. FROM語句

                2. WHERE語句(結合條件)

                3. START WITH語句

                4. CONNECT BY語句

                5. WHERE語句

                6. GROUP BY語句

                7. HAVING語句

                8. MODEL語句

                9. SELECT語句

                10. UNION、MINUS、INTERSECT等集合演算演算

                11. ORDER BY語句

           我們可以看到SELECT子句是在WHERE子句執行后才執行的,當SELECT子句執行時查詢列的別名才生成,所以在            WHERE子句中根本看不到列的別名,當然,自然也就無法引用列的別名了。 所以字段、表達式的別名在WHERE子            句和GROUP BY子句都是不能使用的,而在ORDER BY中不僅可以使用別名,甚至可以直接使用欄位的下標來進行            排序,如:ORDER BY ID或者ORDER BY 1

SELECT ID ID_ 
FROM STUDENT 
WHERE ID_=11--執行時報"ORA-00904: "ID_": invalid identifier"

SELECT ID ID_ 
FROM STUDENT 
WHERE ID=11--正常執行

SELECT ID ID_ 
FROM STUDENT 
WHERE ID='11'--正常執行,注意:ID是NUMBER類型的數據

SELECT ID ID_ 
FROM STUDENT 
WHERE ID="11"--執行時報"ORA-00904: "11": invalid identifier",注意:ID是NUMBER類型的數據


SELECT ID,COUNT(*) C
FROM STUDENT
GROUP BY ID
      HAVING C>0--執行時報"ORA-00904: "C": invalid identifier"
      
SELECT ID,COUNT(*) C
FROM STUDENT
GROUP BY ID
      HAVING Count(*)>0--正常執行   

SELECT ID,COUNT(*)C
FROM STUDENT
GROUP BY ID
      HAVING COUNT(*)>0
ORDER BY C--正常執行


SELECT ID ID_
FROM STUDENT
ORDER BY ID_--正常執行

SELECT ID ID_
FROM STUDENT
ORDER BY 1--正常執行

10)別名是否區分大小寫——區分大小寫(注意:當不用雙引號括起來的時候英文字符大小寫不敏感)

SELECT XUEHAO
FROM (SELECT ID XUEHAO FROM STUDENT) 
WHERE XUEHAO > 1--正常執行

SELECT XUEHAO
FROM (SELECT ID xuehao FROM STUDENT) 
WHERE XUEHAO > 1--正常執行

SELECT XUEHAO
FROM (SELECT ID "XUEHAO" FROM STUDENT) 
WHERE XUEHAO > 1--正常執行

SELECT XUEHAO
FROM (SELECT ID "xuehao" FROM STUDENT) 
WHERE XUEHAO > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier"

SELECT XUEHAO
FROM (SELECT ID "xuehao" FROM STUDENT) 
WHERE xuehao > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier"

SELECT XUEHAO
FROM (SELECT ID "xuehao" FROM STUDENT) 
WHERE "xuehao" > 1--執行時報"ORA-00904: "XUEHAO": invalid identifier"
SELECT "xuehao"
FROM (SELECT ID "xuehao" FROM STUDENT) 
WHERE "xuehao" > 1--正常執行

這個小例子也可以看到SQL語句是先執行WHERE子句然后才執行SELECT子句的!

到此,相信大家對“Oracle別名如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广饶县| 柯坪县| 留坝县| 中阳县| 新源县| 叶城县| 肥乡县| 崇义县| 蒲城县| 临城县| 大城县| 宜都市| 名山县| 漠河县| 林甸县| 玉环县| 茶陵县| 南宁市| 广汉市| 通州市| 淮南市| 宣化县| 林芝县| 仁怀市| 唐河县| 洪洞县| 德江县| 全椒县| 仪陇县| 福建省| 扶绥县| 黑龙江省| 应城市| 龙岩市| 中卫市| 襄城县| 满洲里市| 中西区| 孝昌县| 咸阳市| 澎湖县|