Oracle資料庫初級學習

来源:http://www.cnblogs.com/yuyufeng/archive/2016/04/19/5406899.html
-Advertisement-
Play Games

第一天 SQL查詢語句 CMD——SQLPLUS 賬號 soctt 密碼 tiger,輸入完成後進入SQL資料庫,如圖顯示即連接成功。 連接成功後 ,我們首先設置一下基本界面, --設置 每列顯示的字元數 set LINES 1000;set pages 100; --清屏host cls SQL語 ...


  • 第一天 SQL查詢語句

CMD——SQLPLUS----賬號 soctt 密碼 tiger,輸入完成後進入SQL資料庫,如圖顯示即連接成功。

 

連接成功後 ,我們首先設置一下基本界面,

--設置 每列顯示的字元數
set LINES 1000;
set pages 100;
--清屏
host cls

 

---------------------SQL語句中包含什麼信息

DQL
資料庫查詢語言
SELECT
DML
資料庫操作語言
INSERT DELETE UPDATE
DDL
資料庫定義語言
CREATE ALTER 
DCL
資料庫控制語言
GRANT

 

今天我們主要學習的就是DQL,資料庫查詢語言。

 

預設情況下,Orale資料庫中有4張表我們需要關註分別是

--查詢表
SELECT TABLE_NAME FROM USER_TABLES;
DEPT
EMP
SALGRADE
BONUS
--查詢表對應的列
輸入DESC DEPT;
  DEPTNO
  DNAME
  LOC
輸入DESC EMP;
  EMPNO
  ENAME
  JOB
  MGR
  HIREDATE
  SAL
  COMM
  DEPTNO
輸入DESC SALGRADE;
  GRADE
  LOSAL
  HISAL

 

 

/*
DQL語言之列的查詢
*/

 SELECT 列名 FROM 表名 WHERE 條件

 

 

--簡單的查詢列
SELECT ENAME FROM EMP;(查找EMP表中的ENAME列)
SELECT ENAME,SAL,JOB FROM EMP;(查找EMP表中 ENAME,SAL,JOB三列)
SELECT * FROM EMP;(查找EMP表中所有列)
*通配符:優點簡便,缺點效率低

 

 

 

--設置別名的三種方式
1、SELECT ENAME "員工姓名",SAL "薪資" FROM EMP; 
2、SELECT ENAME AS "員工姓名",SAL AS "薪資" FROM EMP;
3、SELECT ENAME 員工姓名,SAL "薪資" FROM EMP;

 推薦第三種方式,具體效果見下圖。

--去掉重覆的列
SELECT DISTINCT JOB FROM EMP;

 

/*
DQL語言之條件查詢
*/

有時候我們需要根據一定的條件對資料庫中的數據進行查詢,下麵就簡單的介紹一下DQL中的條件查詢。

在SQL中,查詢語句多用WHERE關鍵字

--等值查詢
SELECT ENAME,SAL FROM EMP WHERE SAL = 3000;
SELECT ENAME,SAL FROM EMP WHERE ENAME = 'SMITH';
SELECT ENAME,SAL FROM EMP WHERE JOB = 'SALESMAN'

--非等值查詢
SELECT ENAME,SAL FROM EMP WHERE SAL > 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL < 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL <= 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL >= 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL != 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL <> 3000;
SELECT ENAME,SAL FROM EMP WHERE JOB <> 'SALESMAN';

<>符的意思也為不等號,其他符號意思同JAVA。

--區間
SELECT ENAME,SAL FROM EMP WHERE SAL BETWEEN 800 AND 1600;

--空值判斷 null
SELECT ENAME,COMM FROM EMP WHERE COMM IS NULL;
SELECT ENAME,COMM FROM EMP WHERE COMM IS NOT NULL;
--從集合中選取所需要的
SELECT ENAME,SAL FROM EMP WHERE ENAME IN('SMITH','SCOTT','ABCD');
SELECT ENAME,SAL FROM EMP WHERE ENAME NOT IN('SMITH','SCOTT','ABCD');
SELECT ENAME FROM EMP WHERE JOB IN('SALESMAN','CLERK');
--模糊查詢
--%代表了任意字元的任意次數
SELECT ENAME FROM EMP WHERE ENAME LIKE 'C%';(開頭為C的數據)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S';(結尾為S的數據)
SELECT ENAME FROM EMP WHERE ENAME LIKE 'S%';(開頭為S的數據)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S%';(數據中任意位置包含S的數據)
--_代表了任意字元的一次
SELECT ENAME FROM EMP WHERE ENAME LIKE '_A%';
SELECT ENAME FROM EMP WHERE ENAME LIKE '__A%';
SELECT ENAME FROM EMP WHERE ENAME LIKE '%A__';
--轉義字元
SELECT ENAME FROM EMP WHERE ENAME LIKE '%\%%' ESCAPE '\';
--排序
--ASC(預設)升序desc降序
SELECT * FROM EMP ORDER BY SAL;
SELECT * FROM EMP ORDER BY SAL ASC;
SELECTX * FROM EMP ORDER BY SAL DESC;

SELECT * FROM EMP ORDER BY HIREDATE;
SELECT * FROM EMP ORDER BY ENAME;
SELECT * FROM EMP ORDER BY JOB;

SELECT * FROM EMP ORDER BY JOB,EMPNO;
SELECT * FROM EMP ORDER BY DEPTNO,JOB DESC,EMPNO;

SELECT * FROM EMP WHERE ENAME LIKE '%A%' ORDER BY SAL;

 

--函數,類似於java中的方法
SELECT ENAME || '的年薪為' || SAL*12 FROM EMP;
SELECT ENAME,(SAL+COMM)*12 FROM EMP;

SELECT * FROM EMP ORDER BY COMM;
COMM=NULL?0:COMM;


--NVL (expr1, expr2)
--若expr1為NULL,返回expr2;expr1不為NULL,返回expr1。

--單行函數
-- 進去一個出來一個

/*
DQL語言之單行函數--數字
(JAVA) ABS CEIL FLOOR ROUND SQRT POW MOD
*/
SELECT SAL/1000,CEIL(SAL/1000) 向上取整,FLOOR(SAL/1000) 向下取整 FROM EMP;
SELECT SAL/1000,ROUND(SAL/1000) 四捨五入 FROM EMP;
SELECT SAL/1000,TRUNC(SAL/1000),TRUNC(SAL/1000,1),TRUNC(SAL/10,-2) FROM EMP;
SELECT MOD(SAL,8000) FROM EMP;

/*
DQL語言之單行函數--字元串
(JAVA) TRIM,REPLACE,SPLIT,SUBSTRING,TOUPPERCASE,TOLOWERCASE,CONCAT,INDEXOF,LIX,CHARAT
*/
SELECT CONCAT(CONCAT('員工的姓名為:',ENAME),'--AAAA') FROM EMP;
SELECT ENAME,UPPER(ENAME),LOWER(ENAME),INITCAP(ENAME) FROM EMP;
SELECT LTRIM(' A B '),RTRIM(' A B '),TRIM(' A B ') FROM EMP;
SELECT ENAME ,LPAD(ENAME,10,'#'),RPAD(ENAME,10,'&') FROM EMP;
SELECT ENAME,INSTR(ENAME,'A') FROM EMP;
SELECT ENAME,LENGTH(ENAME) FROM EMP;

/*
DQL語言之單行函數--日期
(Java)
*/
SELECT SYSDATE FROM DUAL;

SELECT SYSDATE + 13 FROM DUAL;
SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL;

SELECT SYSDATE-HIREDATE FROM EMP;
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;

SELECT LAST_DAY(HIREDATE) FROM EMP;

SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;

/*
DQL語言之單行函數--轉換函數
*/
--將日期轉成字元串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MON') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL;
--將數字轉成字元串
SELECT TO_CHAR(1234.5678,'99999.99999') FROM DUAL;
SELECT TO_CHAR(1234.5678,'00000.00000') FROM DUAL;
SELECT TO_CHAR(1234.5678,'00.00') FROM DUAL;
SELECT TO_CHAR(1234.5678,'99.99') FROM DUAL;
SELECT TO_CHAR(1234.5678,'0000.00') FROM DUAL;
SELECT TO_CHAR(1234.5678,'9999.99') FROM DUAL;

SELECT TO_CHAR(1234.5678,'$00000.00000') FROM DUAL;
SELECT TO_CHAR(1234.5678,'L00000.00000') FROM DUAL;

SELECT TO_CHAR(1234567890,'$000,000,000,000.00') FROM DUAL;

--相反的
SELECT TO_DATE('2012-11-11','YYYY-MM-DD') FROM DUAL;

SELECT TO_NUMBER('123.45600','9999.99999') FROM DUAL;
SELECT TO_NUMBER('123.45600','0000.99999') FROM DUAL;

 

/*
DQL語言之單行函數--其他函數
*/


--多行(組)函數
-- 無論進去多少個,都出來一個
SELECT MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP;
SELECT COUNT(SAL),SUM(SAL) FROM EMP;

SELECT MAX(ENAME),MIN(ENAME) FROM EMP;
--AVG和sum只能計算純數字
SELECT AVG(ENAME),SUM(ENAME) FROM EMP;

 

--空值的處理
SELECT MIN(COMM),MAX(COMM) FROM EMP;
SELECT COUNT(COMM) FROM EMP;
SELECT SUM(COMM) FROM EMP;
SELECT AVG(COMM) FROM EMP;

 

 

部分練習:

--1.找出各月倒數第3天受雇的所有員工.
SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE)-2;

--2.找出早於12年前受雇的員工.

SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>13;


--3.以首字母大寫的方式顯示所有員工的姓名.
SELECT INITCAP(ENAME) FROM EMP;


--4.顯示正好為5個字元的員工的姓名.
SELECT ENAME FROM EMP WHERE LENGTH(ENAME)=5;

--5.顯示不帶有"R"的員工的姓名

SELECT ENAME FROM EMP WHERE ENAME NOT LIKE '%R%';

--6.顯示所有員工姓名的前三個字元.

SELECT SUBSTR(ENAME,1,3)FROM EMP;

--7.顯示所有員工的姓名,用a替換所有"A"

SELECT REPLACE(ENAME,'A','a')ENAME FROM EMP;

--8.顯示滿10年服務年限的員工的姓名和受雇日期.:

SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>10;

--9.顯示員工的詳細資料,按姓名排序.

SELECT * FROM EMP ORD;



--10.顯示員工的姓名和受雇日期,根據其服務年限,將最老的員工排在最前面.

SELECT ENAME,HIREDATE FROM EMP ORDER BY HIREDATE ASC;

--11.顯示所有員工的姓名、工作和薪金,按工作的降序排序,若工作相同則按薪金排序.

SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL ASC;

--12.顯示所有員工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同則將最早年份的員工排在最前面.

SELECT ENAME,TO_CHAR(HIREDATE,'MM-YYYY') FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM')DESC,TO_CHAR(HIREDATE,'YYYY')ASC;


--14.找出在(任何年份的)2月受聘的所有員工。
SELECT ENAME,HIREDATE FROM EMP WHERE TO_CHAR(HIREDATE,'mm')=2;

--15.對於每個員工,顯示其加入公司的天數.

SELECT ENAME,ROUND(SYSDATE-HIREDATE)Day FROM EMP;

--16.顯示姓名欄位的任何位置包含"A"的所有員工的姓名.

SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在使用Oracle SQL Developer連接遠程伺服器的時候,出現如下的錯誤 在伺服器本地是可以正常連接的。這個讓人想起來,跟SQL Server的一些設計有些類似,伺服器估計預設只在本地監聽,不允許遠程訪問的,這是為了提高安全性。 解決的方法是,添加一個監聽地址 然後,重啟服務 ...
  • 如果哪天你忘記了線上MySQL資料庫的root密碼,怎麼辦? 大家往往會想到skip-grant-tables參數,具體步驟如下: 1. 關閉MySQL資料庫,因為root密碼忘記了,mysqladmin無法使用,此時,只能通過kill pid關閉程式。 在這裡,科普一下kill 和kill -9的 ...
  • 一、簡介 kattle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,數據抽取高效穩定。它允許你管理來自不同資料庫的數據,通過提供一個圖形化的用戶環境來描述我們需要完成的功能。這裡使用的是pdi-ce-5.4.0.1-130。下載地址為http://com ...
  • 在ORACLE 資料庫中有一種方法可以實現級聯查詢 select * //要查詢的欄位 from table //具有子接點ID與父接點ID的表 start with selfid=id //給定一個startid(欄位名為子接點ID,及開始的ID號) connect by prior selfid ...
  • DCL(Data Control Language)是資料庫控制語言。 是用來設置或更改資料庫用戶或角色許可權的語句,包括(grant,deny,revoke等)語句。 在預設狀態下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員才有權力執行DCL ...
  • 1、MySQL基礎概念 mysql邏輯架構如下: 每個客戶端連接都會在伺服器中擁有一個線程,這個連接的查詢只會在這個單獨的線程中執行。 MySQL是分層的架構。上層是伺服器層的服務和查詢執行引擎,下層是存儲引擎。雖然有很多不同作用的插件API,但存儲引擎API還是最重要的。如果能理解MySQL在存儲 ...
  • 在本機遠程連接遠程Oracle服務的時候,寫瞭如下檢索語句 select * from sys_employee 結果集中出現了中文亂碼,但是遠程伺服器本身的PL/SQL檢索出來沒有問題 解決方案: 步驟一: select * from v$nls_parameters 獲取執行結果 步驟二:SEL ...
  • 上文介紹了Sphinx的工作原理,關於如何安裝的文章在網上有很多,筆者就不再覆述了,現在繼續講解Sphinx的配置文件,讓Sphinx工作起來。 數據源配置 先來看一份數據源的配置文件示例: 其中 source後面跟著的是數據源的名字,後面做索引的時候會用到; type:數據源類型,可以為MySQL ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...