Oracle 10g數據庫基礎之基本查詢語句-上

  Oracle 10g數據庫基礎之基本查詢語句-上程序員

-- 資料參考:張烈 張建中《數據庫管理員培訓講義》

書寫SQL語句的原則算法

大小寫不敏感,但單引和雙引內的大小寫是敏感的。切記!sql

關鍵字不能縮寫數據庫

能夠分行書寫,但關鍵字不能被跨行書寫,單引內也不要跨行書寫。express

通常每一個子句是一行ide

能夠排版來增長可讀性函數

字符串用單引工具

列的別名用雙引性能

Select 語句的做用

查詢指定的行spa

查詢指定的列

多張表聯合查詢

Select 語句能夠查詢指定的行,指定的列,也能夠多張表聯合查詢來得到數據。上面的三句話,開宗明義的定義了SQL 的基本功能,書寫高效的SQL語句是咱們永恆的追求,無論你是程序員仍是數據庫管理員。Select既是入門所必備,又是數據庫之顛峯。

簡易語法
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

大寫的爲關鍵字

小寫的爲咱們指定的名稱

SELECT子句指定你所關心的列

FROM子句指定你所要查詢的表

之因此稱之爲簡易語法,由於徹底的SELECT語法很長,涉及到不少的邏輯關係,咱們由淺入深。雖然

不能大成,但小成總會有的。

通常咱們將select 叫作select子句,from 叫作from 子句。

實驗1:書寫一個最簡單的sql語句,查詢一張表的全部行和全部列

該實驗的目的是初步認識sql語句,執行一個最簡單的查詢.

使用scottPL/ SQL.Developer.7工具上登陸

查看當前用戶的全部的表 .

查看emp表的全部信息.

查詢emp表的全部行,全部列。對於小的表咱們能夠這樣書寫,對於大的表咱們通常查詢指定條件的行和選定的列。Emp表在scott用戶下.scott用戶是一個練習賬號,密碼是tiger,若是你沒有這個賬號能夠隨時創建,練習完了能夠隨時刪除.招之既來,揮之既去.

鎖定解鎖scott帳戶:

切換帳號

實驗2:查詢一張表的全部行,但列的順序咱們本身決定

該實驗的目的是練習查詢指定的列.

列的名稱之間要使用逗號間隔,列的順序由咱們來指定.

Select ename,sal from emp; 這裏咱們指定表中的兩個列。其它的列咱們不看。

實驗3:查詢表的某些列,在列上使用表達式

該實驗的目的是使用表達式,對錶的部分列進行運算.

Select ename,sal,sal+300 from emp;

其中sal+300是表達式,它並不存在於數據庫中,是計算出來的結果。也可使用函數.

表達式的運算是有優先級的,和程序中的同樣,先乘除後加減,括號強制優先級.

+ - * / 先乘除,後加減,括號強制優先級

我的一年總工資,年終獎爲300元。

我的一年總工資,每月獎金爲300元。

實驗4:使用sqlplus,進入sqlplus並進行簡單的操做

登陸:

創建會話,和數據庫發生鏈接

Sql>connect scott/tiger

鏈接到SCOTT用戶,密碼爲tiger

若是不寫密碼,你回車後會提示你輸入密碼。

Sql>Help index 會列出 sqlplus 命令的幫助 .
SQL> help index

進一步的幫助

SQL> help LIST

顯示SQLPLUS命令的幫助,而不是SQL語法的幫助,它是查詢的數據庫內的一張表,因此你要獲得幫助須要兩個條件,1、數據庫是打開的。2、存在HELP

Sql>show all

顯示當前SQLPLUS的環境設置

Sql>show user

顯示當前所登陸的用戶信息

實驗5:查看當前用戶的全部表和視圖

該實驗的目的是查看簡單的數據字典,熟悉實驗環境.

顯示當前用戶所擁有的表和視圖。其中tab是數據字典,你在每一個用戶下查看都看到是當前用戶的表和視圖,這是最基本的字典,咱們必定要知道當前用戶下的表和視圖。

顯示DEPT表的全部行和全部列,* 表明全部的列。

查看錶結構

對這兩張表你們必定要熟悉,由於咱們全部的例題都是以這兩個表爲基礎

Sql>list

查看當前緩衝區內的語句。

簡寫爲l

Sql>help list —能夠查看縮寫

修改scott的密碼

實驗6:關於null值的問題

該實驗的目的是練習數據庫的一個重要值null的使用.

 Null

其中comm列中有一些行沒有值,是空值(null)。

Null值不等於0,也不等於空格。

Null值是未賦值的值,不入索引。

NULL是雙刃劍,使用好了提升性能,你對它不瞭解,每每是錯誤的根源,切記!

實驗7:在列上起一個別名

該實驗的目的是瞭解使用別名的目的和別名的使用方法.

別名的使用原則:

1。區分同名列的名稱

2。非法的表達式合法化

3。按照你的意願顯示列的名稱

4。特殊的別名要雙引

5。直接寫列的後面

6。使用as增長可讀性

SQL> Select sal as salary,hiredate 上班日期 ,sal*12 年工資 from emp;

實驗8:在顯示的時候去掉重複的行

該實驗的目的是使用distinct關鍵字,去掉重複的行.

SELECT 語句顯示重複的行。用DISTINCT語法來去掉重複的行。

SQL> select deptno from emp;

咱們會看到不少重複的行,若是咱們想去掉重複的行,咱們須要distinct關鍵字。

SQL> select distinct deptno from emp;

ORACLE數據庫的10G前版本,該語句須要排序才能去掉重複的行,而在10G中數據庫並不須要排序,而是使用HASH算法來去掉重複的行,因爲避免了排序,從而極大的提升了SQL語句的效率,由於10GSQL內核改寫了。效率更加的高。由於沒有排序,因此輸出也是無序的。

Where和order by 子句

語法

SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[order by column|expression| alias ];

Where 必定要放在FROM 子句的後面。

符合條件的行會被篩選出來。

Order by 放在最後,用來排序顯示結果

實驗9:顯示錶的部分行和部分列,使用where子句過濾出想要的行

該實驗的目的是使用where子句.

SQL> select deptno 部門編號 ,ename 姓名 from emp where deptno=10;

只顯示10號部門的員工名稱。

SQL> select * from emp where ename='KING';

顯示KING員工的詳細信息。

字符串要單引,字符串大小寫敏感,日期格式敏感,牢記在心。

關係運算:

=
<>,!=,^=
>=
<=
Between…and……
SQL> Select ename,sal from emp Where sal between 1000 and 2500;

Between:含上下界

in 操做 ,窮舉,聽說窮舉不能超過 1000 個值,我沒有去驗證。通常咱們也不會窮舉到 1000 個值,若是到 1000 請改寫你的 SQL

>select deptno 部門編號,ename 姓名,sal 工資 from emp where deptno in(10,20);

查詢NULL

未知不等於未知,無窮不等於無窮.

And 運算,兩個條件的交集,必須同時知足。

OR 運算,兩個條件的並集,知足一個就能夠。

not運算,補集,不是J打頭的員工。

優先級
1 。算術運算
2 。鏈接運算
3 。關係運算

4 IS [NOT] NULL, LIKE, [NOT] IN

5Between

6.not
7.and
8.or
括號強制優先級
實驗10:使用like查詢近似的值

該實驗的目的是掌握like的通配符.還有邏輯運算.

 Like 運算

_ 通配一個,僅匹配一個字符,

% 通配沒有或多個字符

SQL> select deptno 部門編號,ename 姓名 from emp where ename like 'J%';

首字母爲J的員工,J後有沒有字符,有多少字符都無論。

SQL> select deptno 部門編號,ename 姓名 from emp where ename like '_A%';

尋找第二個字母爲A的員工,第一個字母必須有,是什麼無所謂。

當你想查詢_,%特殊字符時,請用escape.

Select ename from emp where ename like ‘%s_%’ escape ‘s ’;

咱們並不想查找S後必須有一個字符以上的員工,而是要剔除SS出現的目的就是轉義,將_轉義了,這裏的_不是通配符,而是實際意義的_

Select ename from emp where ename like ‘%/_%’ escape ‘/’;

通常咱們使用/來轉義,以避免產生歧異。

實驗11:使用order by子句來進行排序操做

該實驗的目的是掌握排序操做.

Order by 子句

不指明都是二進制排序,若是你想按照拼音,部首,筆畫,法語等特殊的排序模式,請設定排序的環境變量。

默認是升序asc

降序要指定desc

默認排序的類型就是升序。

降序要明確的指出。
隱式排序,顯示的結果裏沒有工資,可是按照工資的順序顯示的。

別名排序
SQL> Select sal*12 salary from emp order by salary;

表達式排序

位置排序,對集合操做時比較方便.

多列排序,先按照部門排序,部門相同的再按照工做排序。

練習:

練習01:

查看scott emp表的信息:

select * from emp;

練習02:

scott emp表中,編號爲7369的部門編號?

select deptno from emp where EMPNO=7369;

scott emp表中,job7900 員工相同的員工有哪些?

練習03:

scott emp表中,在10號部門中誰的工資+獎金最高?

select ename 姓名,sal+nvl(comm,0) 總工資 from emp where (sal+nvl(comm,0))=( select max(sal+nvl(comm,0)) from emp where deptno IN (10));

《完》

--xjzhujunjie

--2012/05/15

相關文章
相關標籤/搜索