天天看點

循序漸進學Oracle之簡單查詢

   SQL(Structued Query Language,結構查詢語言)是一個功能強大的資料庫語言。SQL通常用于與資料庫通訊。ANSI(美國國家标準學會)聲稱,SQL是關系資料庫管理系統的标準語言。

Oracle資料庫之是以發展的很好,主要也是因為Oracle是全世界最早采用SQL語句的資料庫産品。

DML(Data Manipulation Language,資料操作語言)—-用于檢索或者修改資料

DDL(Data Definition Language,資料定義語言)—-用于定義資料的結構,如:建立、修改或者删除資料庫對象;

DCL(Data Control Language,資料控制語言)—-用于定義資料庫使用者的權限

簡單查詢指的是一張表中的所有的資料,簡單查詢的文法如下:

1

<code>SELECT  [DISTINCT] *| 字段 [别名] [字段 [别名]]FROM  表名稱 [别名]</code>

範例1: 查詢dept表的全部記錄    

<code>SELECT * FROM dept ;</code>

SQL&gt; SELECT * FROM dept ;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL&gt;

範例2:查詢出第個雇員的編号、姓名、基本工資    

<code>SELECT empno,ename,sal FROM  emp ;</code>

SQL&gt; SELECT empno,ename,sal FROM emp ;

EMPNO ENAME SAL

---------- ---------- ----------

7369 SMITH 800

7499 ALLEN 1600

7521 WARD 1250

7566 JONES 2975

7654 MARTIN 1250

7698 BLAKE 2850

7782 CLARK 2450

7788 SCOTT 3000

7839 KING 5000

7844 TURNER 1500

7876 ADAMS 1100

7900 JAMES 950

7902 FORD 3000

7934 MILLER 1300

已選擇14行。

範例3:查詢出每個雇員的編号、姓名、職位    

<code>SELECT empno,ename,job FROM emp ;</code>

SQL&gt; SELECT empno,ename,job FROM emp ;

EMPNO ENAME JOB

---------- ---------- ---------

7369 SMITH CLERK

7499 ALLEN SALESMAN

7521 WARD SALESMAN

7566 JONES MANAGER

7654 MARTIN SALESMAN

7698 BLAKE MANAGER

7782 CLARK MANAGER

7788 SCOTT ANALYST

7839 KING PRESIDENT

7844 TURNER SALESMAN

7876 ADAMS CLERK

7900 JAMES CLERK

7902 FORD ANALYST

7934 MILLER CLERK

範例4:查詢出每個雇員的職位    

<code>SELECT job FROM emp ;</code>

SQL&gt; SELECT job FROM emp ;

JOB

---------

CLERK

SALESMAN

MANAGER

ANALYST

PRESIDENT

由上可知,查詢出的job内容出現了重複的資料,而之是以資料會有重複,主要的原因是現在沒有消除掉重複記錄,可以使用DISTINCT消除掉所有的重複内容:

範例5:查詢出每個職位的不重複的記錄    

<code>SELECT DISTINCT job FROM emp ;</code>

SQL&gt; SELECT DISTINCT job FROM emp ;

但是,對于重複資料,指的是一行中的每個列的記錄重複,才叫重複資料。

範例6:查詢出每個雇員的姓名、職位    

<code>SELECT ename,job FROM emp ;</code>

SQL&gt; SELECT ename,job FROM emp ;

ENAME JOB

---------- ---------

SMITH CLERK

ALLEN SALESMAN

WARD SALESMAN

JONES MANAGER

MARTIN SALESMAN

BLAKE MANAGER

CLARK MANAGER

SCOTT ANALYST

KING PRESIDENT

TURNER SALESMAN

ADAMS CLERK

JAMES CLERK

FORD ANALYST

MILLER CLERK

在進行簡單查詢的操作之中,也可以使用各個數學的四則運算符

範例7:要求顯示每個雇員的姓名、職位、基本年薪(incom)    

<code>SELECT ename,job,(sal*</code><code>12</code><code>) </code><code>as</code> <code>income FROM emp ;</code>

SQL&gt; SELECT ename,job,(sal*12) as income FROM emp ;

ENAME JOB INCOME

---------- --------- ----------

SMITH CLERK 9600

ALLEN SALESMAN 19200

WARD SALESMAN 15000

JONES MANAGER 35700

MARTIN SALESMAN 15000

BLAKE MANAGER 34200

CLARK MANAGER 29400

SCOTT ANALYST 36000

KING PRESIDENT 60000

TURNER SALESMAN 18000

ADAMS CLERK 13200

JAMES CLERK 11400

FORD ANALYST 36000

MILLER CLERK 15600

SQL&gt; SELECT ename,job,(sal*12)income FROM emp ; //as可省略!

重點:但是對于别名,建議不要使用中文,隻要是程式的開發,都要回避中文,這不是中國的“易語言”。

範例8:公司福利好,每個月都有200元的飯食補貼及100元車費補助,這個時候的年薪    

<code>SELECT ename,job,</code><code>12</code><code>*(sal+</code><code>200</code><code>+</code><code>100</code><code>) income FROM emp ;</code>

SQL&gt; SELECT ename,job,12*(sal+200+100) income FROM emp ;

SMITH CLERK 13200

ALLEN SALESMAN 22800

WARD SALESMAN 18600

JONES MANAGER 39300

MARTIN SALESMAN 18600

BLAKE MANAGER 37800

CLARK MANAGER 33000

SCOTT ANALYST 39600

KING PRESIDENT 63600

TURNER SALESMAN 21600

ADAMS CLERK 16800

JAMES CLERK 15000

FORD ANALYST 39600

MILLER CLERK 19200

範例9:公司每年的年底都會多發一個月的基本工資    

<code>SELECT ename,job,</code><code>12</code><code>*(sal+</code><code>200</code><code>+</code><code>100</code><code>)+sal income FROM emp ;</code>

SQL&gt; SELECT ename,job,12*(sal+200+100)+sal income FROM emp ;

SMITH CLERK 14000

ALLEN SALESMAN 24400

WARD SALESMAN 19850

JONES MANAGER 42275

MARTIN SALESMAN 19850

BLAKE MANAGER 40650

CLARK MANAGER 35450

SCOTT ANALYST 42600

KING PRESIDENT 68600

TURNER SALESMAN 23100

ADAMS CLERK 17900

JAMES CLERK 15950

FORD ANALYST 42600

MILLER CLERK 20500

在簡單查詢之中也可以使用“||”連接配接查詢的字段

範例10:觀察“||”的使用    

由于“,”(逗号)屬于原樣輸出的字元串,是以必須使用“’”(單引号)括起來,即:在SQL語句之中,“’”(單引号)表示的是字元串

範例11:要求現在的資料按照如下的格式顯示:

“雇員編号是:7369 雇員姓名是:SMITH 基本工資是:800職位是:CLERK ”

現在相當于查找:empno ename sal job字段,且使用||來連接配接,  

<code>SELECT </code><code>'雇員編号是:'</code><code>||empno||</code><code>'的雇員姓名是:'</code><code>||ename||</code><code>',基本工資是:'</code><code>||sal||</code><code>',職位是:'</code><code>||job FROM emp ;</code>

<a href="http://beyondhdf.blog.51cto.com/attachment/201308/25/229452_1377396681JN5T.jpg"></a>

<code>SELECT </code><code>'雇員編号是:'</code><code>||empno||</code><code>'的雇員姓名是:'</code><code>||ename||</code><code>',基本工資是:'</code><code>||sal||</code><code>',職位是:'</code><code>||job||</code><code>'|'</code> <code>FROM emp ;</code>

<a href="http://beyondhdf.blog.51cto.com/attachment/201308/25/229452_1377396682Kn8p.jpg"></a>

<code>SELECT </code><code>'雇員編号是:'</code><code>||empno||</code><code>'的雇員姓名是:'</code><code>||ename||</code><code>',基本工資是:'</code><code>||sal||</code><code>',職位是:'</code><code>||job||</code><code>'|'</code><code>雇員資訊 FROM  emp ;</code>

<a href="http://beyondhdf.blog.51cto.com/attachment/201308/25/229452_1377396683Jvkd.jpg"></a>

重點:

     一定要記住,别名上的内容不要使用“’”(單引号)括起來,而隻有在SELECT子句之中出現的内容才使用“’”(單引号)。

什麼叫子句?一般習慣而言,SELECT後面的叫SELECT 子句,FROM後面的叫FROM子句。

範例12:

使用者(sys)連接配接到Oracle資料庫,去查詢使用者scott下的一張表emp(雇員表)的方法:  

<code>SELECT </code><code>'雇員部門編号是:'</code><code>||empno||</code><code>'的雇員姓名是:'</code><code>||ename||</code><code>',基本工資'</code><code>||sal||</code><code>',上司編号'</code><code>||mgr||</code><code>',雇員職位是:'</code><code>||job||</code><code>',獎金是:'</code><code>||comm ||</code><code>'|'</code> <code>as</code> <code>雇員資訊 FROM scott.emp ;</code>

<a href="http://beyondhdf.blog.51cto.com/attachment/201308/25/229452_1377396683zu2x.jpg"></a>