***********************************************聲明***********************************************************************?
原創作品,出自 “深藍的blog” 博客,歡迎轉載,轉載時請務必注明出處,否則追究版權法律責任。
深藍的blog: http://blog.csdn.net/huangyanlong/article/details/39907707
****************************************************************************************************************************
過于簡單的sql,此處就不再列舉了,下面列舉的已經為比較簡單的基礎查詢操作:
在查詢語句中選擇指定的列就是關系數據庫中所稱的投影(project)。
因為字符集的不同使日期型顯示往往出現故障,能夠通過以下來設置:
SQL> alter session set NLS_DATE_LANGUAGE='AMERICAN';
【補充】字符集查詢:
[oracle@master1 db_home]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK??
--環境變量設置,格式:語言_地域(文化)_字符集
SQL> col name for a30
SQL> col value$ for a30
SQL> set linesize 200
SQL> set pagesize 200
SQL> select name,value$ from props$ where name like '%NLS%';
win下查看是這個:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NAME?????????????????????????? VALUE$
------------------------------ ------------------------------
NLS_LANGUAGE?????????????????? AMERICAN?????? --語言
NLS_TERRITORY????????????????? AMERICA??????? --地域
NLS_CURRENCY?????????????????? $
NLS_ISO_CURRENCY?????????????? AMERICA
NLS_NUMERIC_CHARACTERS???????? .,
NLS_CHARACTERSET?????????????? ZHS16GBK
NLS_CALENDAR?????????????????? GREGORIAN
NLS_DATE_FORMAT??????????????? DD-MON-RR
NLS_DATE_LANGUAGE????????????? AMERICAN
NLS_SORT?????????????????????? BINARY
NLS_TIME_FORMAT??????????????? HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT?????????? DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT???????????? HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT??????? DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY????????????? $
NLS_COMP?????????????????????? BINARY
NLS_LENGTH_SEMANTICS?????????? BYTE
NLS_NCHAR_CONV_EXCP??????????? FALSE
NLS_NCHAR_CHARACTERSET???????? AL16UTF16
NLS_RDBMS_VERSION????????????? 10.2.0.1.0
注意:解決這個問題的原則,client的字符集和oracle 數據庫的字符集保持一致
補充完成。
在sql查詢中遵循下面規律:
字符和日期型數據位左對齊;
數字型數據為右對齊;
SQL查詢中的算術表達式:超級簡單!
例1:算術表達式
SQL> select empno,ename,sal,500+sal from emp;
EMPNO ENAME??????????? SAL??? 500+SAL
----- ---------- --------- ----------
?7369 SMITH???????? 800.00?????? 1300
?7499 ALLEN??????? 1600.00?????? 2100
?7521 WARD???????? 1250.00?????? 1750
?7566 JONES??????? 2975.00?????? 3475
?7654 MARTIN?????? 1250.00?????? 1750
?7698 BLAKE??????? 2850.00?????? 3350
?7782 CLARK??????? 2450.00?????? 2950
?7788 SCOTT??????? 3000.00?????? 3500
?7839 KING???????? 5000.00?????? 5500
?7844 TURNER?????? 1500.00?????? 2000
?7876 ADAMS??????? 1100.00?????? 1600
?7900 JAMES???????? 950.00?????? 1450
?7902 FORD???????? 3000.00?????? 3500
?7934 MILLER?????? 1300.00?????? 1800
14 rows selected
例2:算術表達式:優先級推斷
SQL> select empno,ename,500+sal*12 from emp;
EMPNO ENAME????? 500+SAL*12
----- ---------- ----------
?7369 SMITH?????????? 10100
?7499 ALLEN?????????? 19700
?7521 WARD??????????? 15500
?7566 JONES?????????? 36200
?7654 MARTIN????????? 15500
?7698 BLAKE?????????? 34700
?7782 CLARK?????????? 29900
?7788 SCOTT?????????? 36500
?7839 KING??????????? 60500
?7844 TURNER????????? 18500
?7876 ADAMS?????????? 13700
?7900 JAMES?????????? 11900
?7902 FORD??????????? 36500
?7934 MILLER????????? 16100
14 rows selected
由例1、例2簡單總結出優先級的規律為:
1、先乘除、后加減
2、優先級次序為自左向右
3、括號里優先
4、多重括號,內層括號運算最為優先
別名的設置
例3:
SQL> select empno as "employee number", ename name,(500+sal)*12 "annual salary" from emp;
employee number NAME?????? annual salary
--------------- ---------- -------------
?????????? 7369 SMITH????????????? 15600
?????????? 7499 ALLEN????????????? 25200
?????????? 7521 WARD?????????????? 21000
?????????? 7566 JONES????????????? 41700
?????????? 7654 MARTIN???????????? 21000
?????????? 7698 BLAKE????????????? 40200
?????????? 7782 CLARK????????????? 35400
?????????? 7788 SCOTT????????????? 42000
?????????? 7839 KING?????????????? 66000
?????????? 7844 TURNER???????????? 24000
?????????? 7876 ADAMS????????????? 19200
?????????? 7900 JAMES????????????? 17400
?????????? 7902 FORD?????????????? 42000
?????????? 7934 MILLER???????????? 21600
14 rows selected
別名:
對于列名須要加入keyword“as”
對于表達式,直接在其后加入就可以,很easy
連接運算符讓顯示更易讀
例4:使用分隔符
SQL> select ename || ' annual salary ' || (500+sal)*12 "employee's salary" from emp;
employee's salary
SMITH annual salary 15600
ALLEN annual salary 25200
WARD annual salary 21000
JONES annual salary 41700
MARTIN annual salary 21000
BLAKE annual salary 40200
CLARK annual salary 35400
SCOTT annual salary 42000
KING annual salary 66000
TURNER annual salary 24000
ADAMS annual salary 19200
JAMES annual salary 17400
FORD annual salary 42000
MILLER annual salary 21600
例5:假設認為還不夠直觀的話,讓我們變成中文,看看效果例如以下:
SQL> select ename || ' 年薪金額為: ' || (500+sal)*12 "員工2014年年薪" from emp;
員工2014年年薪
SMITH 年薪金額為: 15600
ALLEN 年薪金額為: 25200
WARD 年薪金額為: 21000
JONES 年薪金額為: 41700
MARTIN 年薪金額為: 21000
BLAKE 年薪金額為: 40200
CLARK 年薪金額為: 35400
SCOTT 年薪金額為: 42000
KING 年薪金額為: 66000
TURNER 年薪金額為: 24000
ADAMS 年薪金額為: 19200
JAMES 年薪金額為: 17400
FORD 年薪金額為: 42000
MILLER 年薪金額為: 21600
小結:
??? 在讓顯示結果更易讀時,常用連接運算符“||”以達到預期的效果。字符串與連接運算符的搭配使用在工作中非經常見,這會使數據更易讀。
去重的考慮:DISTINCT運算符
格式:select *|{[distinct] 列表,...} from 表名;
列表的格式為:列名|表達式[別名]
select * from 表名:從表名所指定的表中選擇全部的列
select distinct 列表 ... from 表名:為從表名所指定的表中選擇列表所規定的列,但不顯示反復的數據行(或記錄)。
例6:在emp表內查詢部門號時,會出現所有的信息,數據量小還能夠,假設數據量變得巨大以后,那將變得非常難篩選出實用的信息來。
SQL> select deptno from emp;
DEPTNO
------
??? 20
??? 30
??? 30
??? 20
??? 30
??? 30
??? 10
??? 20
??? 10
??? 30
??? 20
??? 30
??? 20
??? 10
14 rows selected
下面使用distinct命令,例如以下所看到的:
SQL> select distinct deptno from emp;
DEPTNO
------
??? 30
??? 20
??? 10
但這種方法,我們并不建議使用,由于這個distinct完畢的是兩個步驟,會先排序,然后從中篩選反復值。能夠預見,假設在一張大表里的話,效率將會是很低的。假設想要去重的話,我們能夠使用group分組,來完畢去重的目的。
為了實現去重的目的,我們能夠這樣運行語句,例如以下所看到的:
SQL> select deptno from emp group by deptno;
DEPTNO
------
??? 30
??? 20
??? 10
***********************************************聲明***********************************************************************?
原創作品,出自 “深藍的blog” 博客,歡迎轉載,轉載時請務必注明出處,否則追究版權法律責任。
深藍的blog: http://blog.csdn.net/huangyanlong/article/details/39907707
**************************************************************************************************************************** ?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
