Oracle簡單查詢


作者:gqk


本章內容:

  • 基本查詢語句
  • 算數運算符
  • 空值問題
  • 列的別名
  • 字符串鏈接
  • 查詢消除重復行
  • Oracle常用數據類型
  • Where過濾
  • 模糊查詢
  • 排列子句

1,基本查詢語句:

  數據庫查詢語句是我們學習的重點在實際開發中數據庫查詢無處不在:

  查詢某張表的某幾列(自定義列查詢):

  語法:

 

SELECT 列名1,列名2,...FROM 表名

  查詢表的所有列

  語法:

SELECT * FROM 表名

  查詢用戶下的所有表:

SELECT tbale_name FROM user_tables;

SELECT table_name FROM tabs;

 2,算數運算符:

--算數運算符
SELECT 5+3,5-3,5*3,5/2 FROM dual;
--虛表
SELECT 'hello,world',100 FROM dual;
--查詢員工編號,姓名,工資,新工資(=原始工資上浮25% =》衍生列 計算列)
SELECT employee_id,last_name,salary,salary*1.25
FROM   employees;

查詢:--員工編號,姓名,工資,獎金金額,實發工資(工資+獎金)??

3,空值問題:包含空值的數學表達式結果一定為空 

 

在Oracle中空值null和空字符串是等價的,空值不是空格或者0

 

SELECT 5+NULL FROM dual;
SELECT 5-NULL+3 FROM dual;
SELECT 5+'' FROM dual;

 

4,列的別名:

列別名使用方式:

  • AS 別名
  • 空格 別名

--列別名
SELECT employee_id,
       last_name,
       salary,
       salary * 1.25 new_sal
FROM   employees;

SELECT employee_id,
       last_name,
       salary,
       salary * commission_pct AS "Comm",
       salary + salary * commission_pct "my-money"
FROM   employees;

雙引號可以強制原始大小寫執行:

5,字符串鏈接:

把列和列,列和字符鏈接在一起用“||”

--拼接字符串
SELECT 'hello'||'world' FROM dual;
SELECT 'hello'||1234 FROM dual;
SELECT 999||1234 FROM dual;

SELECT '100'+'200' FROM dual;

--員工的姓和名拼接為一列
SELECT first_name||'.'||last_name AS ename
FROM   employees;

6,查詢消除重復行  

 

在SELECT 語句中使用DISTINCT 關鍵字刪除重復行:

--重復行
SELECT DISTINCT department_id FROM employees;

SELECT DISTINCT department_id,job_id FROM employees;

7,Oracle常用的數據類型  

  1、字符類型 

  • CHAR:一個定長字符串,當位數不足自動用空格填充來達到其最大長度。如非NULL的CHAR(12)總是包含12字節信息。CHAR字段最多可以存儲2,000字節的信息

  • VARCHAR2:目前這也是VARCHAR 的同義詞。這是一個變長字符串,與CHAR 類型不同,它不會用空格填充至最大長度。VARCHAR2(12)可能包含0~ 

  • CLOB:(Character Large Object)在Oracle9i及以前的版本中, 這種數據類型允許存儲最多4GB的數據, 在Oracle 10g及以后的版本中允許存儲最多(4GB)×(數據庫塊大小)字節的數據。CLOB包含要進行字符集轉換的信息。這種數據類型很適合存儲純文本信息。

  2、數字類型:

NUMBER:該數據類型能存儲精度最多達38位的數字。每個數存儲在一個變長字段中,其長度在0~22字節之間。Oracle的NUMBER類型精度很高, 遠遠高於許多編程語言中常規的FLOAT和DOUBLE類型。

NUMBER( p,s ) p表示精度(總長度) s表示小數位置且四舍五入

NUMBER(10,3) 10是總長度,3是小數位數的長度

  3、日期類型

• DATE:一個7字節的定寬日期/時間數據類型。其中總包含7個屬性,包括:世紀、世紀中哪一年、月份、月中的哪一天、小時、分鍾和秒。

• TIMESTAMP:一個7 字節或12.字節的定寬日期/時間數據類型。它與DATE 數據類型不同,因為TIMESTAMP 可以包含小數秒(fractional second);帶小數秒的TIMESTAMP 在小數點右邊最多可以保留9位。

  4、二進制及大文本數據

• BLOB: (binary large object)在Oracle9i及以前的版本中, 這種數據類型允許存儲最多4GB的數據, 在Oracle 10g及以后的版本中允許存儲最多(4GB)×(數據庫塊大小)字節的數據。BLOB包含不需要進行字符集轉換的“二進制“數據,如果要存儲電子表格、字處理文檔、圖像文件等就很適合采用

  注意:ORACLE中沒有boolean類型:

8,Where過濾

  就是按照條件檢索查詢數據:

  比如:查詢本月的手機話費

     百度我們感興趣的信息

     預定乘坐的飛機,火車票

比較運算符:

 

 

--查詢90號部門的員工

 

 

 


--查詢工資超過10000的員工

 

--查詢姓King的員工(字符串比較區分大小寫)

 

--查詢員工編號,姓名,工資,新工資(只看新工資超過10000的員工)

 

 --查詢所有在90年以前入職的員工

 

--查詢所有不是50號部門的員工

 

判斷一下sql的輸出結果:

SELECT *
FROM   employees
WHERE  department_id=NULL;
 
SELECT *
FROM   employees
WHERE  department_id<>NULL;

特殊比較運算符:

  

--查詢沒有部門的員工
SELECT *
FROM   employees
WHERE  department_id IS NULL;

--查詢有部門的員工
SELECT *
FROM   employees
WHERE  department_id IS NOT NULL;

--查詢工資在5000~10000之間的員工
SELECT *
FROM   employees
WHERE  salary BETWEEN 5000 AND 10000;

--查詢工資不在5000~10000之間的員工
SELECT *
FROM   employees
WHERE  salary NOT BETWEEN 5000 AND 10000;

--查詢部門為10,20,50號的員工
SELECT *
FROM   employees
WHERE  department_id IN (10,20,50);

--查詢部門不是10,20,50號的員工
SELECT *
FROM   employees
WHERE  department_id NOT IN (10,20,50);

 9,模糊查詢:

練習:

--查詢first_name以S開頭的員工
SELECT *
FROM   employees
WHERE  first_name LIKE 'S%';

--查詢last_name以s結尾的員工
SELECT *
FROM   employees
WHERE  last_name LIKE '%s';

--查詢last_name以M開頭且第三個字母是u的員工
SELECT *
FROM   employees
WHERE  last_name LIKE 'M_u%';

--查詢email中包含EN的員工
SELECT *
FROM   employees
WHERE  email LIKE '%EN%';

--查詢job_id倒數第5個字符是下划線的員工
SELECT *
FROM   employees
WHERE  job_id LIKE '%\_____' ESCAPE '\';

SELECT *
FROM   employees
WHERE  last_name LIKE '%\%%' ESCAPE '\';
 

  練習:

--查詢工資超過5000且last_name以s結尾的員工
SELECT *
FROM   employees
WHERE  salary>=5000
AND    last_name LIKE '%s';
--查詢部門是10,20,以及沒有部門的員工
SELECT *
FROM   employees
WHERE  department_id IN (10,20)
OR     department_id IS NULL;

 排序問題:

  練習:

  

--查詢員工編號,姓名,工資,新工資,部門編號
--按工資升序
SELECT employee_id,last_name,salary,salary*1.5 new_sal 
FROM   employees
ORDER BY salary;
--按工資降序
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY salary DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY new_sal DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY salary*1.5 DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY 3 DESC;

--查詢員工編號,姓名,工資,入職日期,部門編號
--按部門升序,工資降序,入職日期升序
SELECT employee_id,last_name,salary,hire_date,department_id
FROM   employees
ORDER BY department_id,salary DESC,hire_date;

--排序表達式可以不是列列表中的列
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY job_id;

--查詢50號部門的員工,按工資降序
SELECT *
FROM   employees
WHERE department_id=50
ORDER BY salary DESC;

  偽列:

--rownum偽列
SELECT ROWNUM,employee_id,last_name,salary 
FROM   employees
WHERE  department_id=50;

--查詢某表中的前5條數據(TOP N查詢)
SELECT ROWNUM,employees.*
FROM   employees
WHERE  ROWNUM<=5;

--查詢某表中的第6到第10條數據

--查詢工資最高的前5名員工

select rownum ,last_name,salary from employees where rownum <6 order by salary desc(錯誤的)

select * from (select rownum,last_name,salary from employees order by salary desc) where rownum <6;

--rowid偽列
SELECT ROWID,ROWNUM,employees.*
FROM   employees;

  

 

 

 

 

 

 

 

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM