資料庫基礎(Oracle)

来源:https://www.cnblogs.com/Magic-Li/archive/2020/04/14/12697182.html
-Advertisement-
Play Games

1.前言 2.select簡單查詢 3.單值函數 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 前言 ...


前言:

1.認識Oracle
    oracle:商業運用第一的關係型資料庫,實質上就是一種關係型資料庫。
2.資料庫與關係型資料庫
    資料庫:數據存儲的倉庫
    關係型資料庫:資料庫中保存的對象之間可以存在一定的關聯關係,並非完全獨立。主要反映到以後學習的主外鍵.
    關係資料庫是關係或二維表的集合:
       Orcale資料庫
         /    \
       table_1     table_2
    關係資料庫是:
      由關係型資料庫對象組成的。
      由關係操作管理。
      受數據完整性約束控制。
3.三個名詞
    (1) sql:結構化的查詢語句,操作oracle資料庫的語言
      (Structured Query Language, SQL)
      第四代編程語言,之關心做什麼,不關心怎麼做,結構化查詢,易學易用
    (2) sqlplus:oracle軟體自帶的終端可以輸入sql,且將sql執行結果顯示
                                SQL*Plus
                                  ↓
    SQL*Plus: 如同操作系統中的SHELL,SQL——>Oracle,就是說在Oracle資料庫執行SQL語句之前,需要SQL*Plus進行編譯。
    (4) pl/sql:這是一種過程化語言,純SQL中沒有邏輯的控制,而在PL/SQL中存在邏輯控制
            像存儲過程函數就是一種典型的PL/SQL語言的實現
4.資料庫中的對象
   table:表格(實體OR關係),由行和列組成,列又稱欄位,每一行內容為表格的一條完整的數據。
   view: 視圖,一張表或者多張表的部分或者完整的映射,好比表格照鏡子,鏡子裡面的虛像就是view
   除去常見的table和view兩種對象以外,oracle資料庫還支持如下四種對象
   sequence:序列,生成主鍵值
   index:索引,提高數據的訪問效率
   synonym:同義,方便對象的操作
   program unit:程式單元,pl/sql操作的對象
5.五種分類
   sql的五大分類:
   數據查詢(DQL):SELECT
   數據操作(DML): INSERT, UPDATE, DELETE (增刪改) 需要commit
   數據定義(DDL): CREATE, ALTER, DROP, RENAME, TRUNCATE
   數據控制(DCL): GRANT, REVOKE
   事務控制(DTL): COMMIT(事務提交), ROLLBACK(事務回滾), SAVEPOINT(設置回滾點)

delete,truncate區別:
  delete: 刪除表中的一條或者多條記錄,該操作需要提交事務
  truncate:清空表格,該操作不需要提交事務

oracle資料庫環境準備(一般現在使用mysql資料庫的是一種趨勢):
   三種登錄方式:
    sqlplus "/as sysdba"
    sqlplus system/*******
    sqlplus username/password

   瞭解三張表以及相互關係
    s_emp 員工表
    s_dept 部門表
    s_region 地區表

      

                    建表語句附在文檔最後

 

6.去重
distinct關鍵詞只能放在select關鍵詞後面.
如果distinct關鍵詞後面如果出現多列,表示多列聯合去重,即多列的值都相同的時候才會認為是重覆的記錄。

7.select語句永遠不對原始數據進行修改。

8.加減乘除有優先順序,加小括弧可以改變運算的順序

9.字元串拼接select id,first_name||' '||last_name||','||title as name from s_emp;

10.sqlplus 登錄之後,可以使用buff(緩存)來存儲/執行/修改要執行的sql語句
  這裡的buff的特點:
  1.buff中只能存儲一條sql語句(但是這條sql語句可能有很多行)
  2.每次放入新的sql語句,會把之前的覆蓋掉
  3.每次執行sql語句,都會把這個sql語句放到buff裡面

11.sqlplus基礎操作:
 直接輸入該行的行號就是定位
 l 查看緩存中的sql語句
 a 在[定位]的那一行後面追加新的內容after
 i 在[定位]的那一行下麵插入新的一行insert
 c 替換[定位]的那一行中的某些字元串
 c/老的字元串/新的字元串
 del 刪除[定位]的那一行內容
 n 後面加內容可以重寫這一行
 ! 後面接終端命令 !clear:清屏 windows中使用$符號 例如:$cls
 / 執行緩存sql命令
 clear buffer:清空當前緩存的命令
 save test.sql buff中的sql語句保存在test.sql文件中
 get test.sql 把test.sql中的內容在載入到buff中,但是沒有運行
 導入:
    start test.sql 把test.sql中的內容在載入到buff中並且執行
    @test.sql 把test.sql中的內容在載入到buff中並且執行
 edit file_name 使用系統預設編輯器去編輯文件
 錄製:

    spool file_name //將接下來的sql語句以及sql的運行結果保存到文件
    sql1
      result1
    sql2
      result2
    ...
    spool off 關閉spool功能
 exit:退出

12.查詢結果不好看,通過column使我們的顯示界面好看:COLUMN last_name FORMAT a15;  可以簡寫為:col last_name for a15;

13.order by:desc(降序) asc(預設升序),優先順序最低

限制查詢:
14.邏輯比較運算符:
select col_name,...
from tb_name
where col_name 比較操作表達式
邏輯操作符and or not
col_name 比較操作表達式
  ...
15.邏輯比較操作符 = > < >= <= !=
  不等於:三個都表示不等於的意思(經常用的是!=) != <> ^=
16.註意:
   1.限制查詢條件,使用where子句
   2.條件可以多個,使用邏輯操作符和()進行條件的邏輯整合
   3.where子句的優先順序別最高
   4.比較操作表達式由操作符和值組成

sql比較操作符:

17.between and:在什麼範圍之內
需求:查看員工工資在700 到 1500之間的員工id,和名字

select id,last_name,salary
from s_emp
where salary between 700 and 1500;

18.in(list):在一個列表中
需求:查看員工號1,3,5,7,9員工的工資

select id,last_name,salary
from s_emp
where id in (1,3,5,7,9);

19.like:模糊查詢,即值不是精確的值的時候使用
    通配符,即可以代替任何內容的符號
    % :通配0到多個字元
    _ : 當且僅當通配一個字元
    轉義字元:預設為\,可以指定 指定的時候用escape 符號指明即可,轉義字元只能轉義後面的一個字元    

eg:查看員工名字中包換一個_的員工id和工資

select id,last_name,salary
from s_emp
where last_name like '%\_%' escape '\';

20.is null:對null值操作特定義的操作符,不能使用=
eg:查看員工提成為為空的員工的id和名字

select id,last_name,commission_pct
from s_emp
where commission_pct is null

21.邏輯操作符,當條件有多個的時候使用
  and:且邏輯
  or:或邏輯
  註意:and邏輯比or邏輯要高
  not:非邏輯

函數:
單值函數
   1.字元函數
   2.日期函數
   3.轉換函數
   4.數字函數
分組函數
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22.字元函數
  LOWER 把字元轉為小寫
  UPPER 把字元轉換為大寫
  INITCAP 把字元串首字母轉換為大寫
  CONCAT 把倆個字元串連接在一起(類似之前的||的作用)
    select concat('hello','world') msg from dual;
    select 'hello'||'world' msg from dual;
  SUBSTR 截取字元串
    select last_name,substr(last_name,3) from s_emp;第二個參數從1開始為正;(從前往後)
    select last_name,substr(last_name,-1) from s_emp;第二個參數從-1開始為負;(從後往前)
   第三個字元表示截取多少個:
     select last_name,substr(last_name,-3,2) from s_emp;
     select last_name,substr(last_name,3,2) from s_emp;
  LENGTH 獲得字元串長度
    select length('world')from dual;
  NVL 替換列中為null的值
    select last_name,nvl(commission_pct,0)from s_emp;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23.數字函數
  ROUND 四捨五入
    select round(45.923,2) from dual;保留到小數點後面2位
    select round(45.923,0) from dual;保留到個位 (個十百千萬...)
    select round(45.923,-1) from dual;保留到十位 (個十百千萬...)
  TRUNC 截取到某一位
    select trunc(45.929,2) from dual;截取到小數點後面2位
    select trunc(45.923,0) from dual;截取到個位 (個十百千萬...)
    select trunc(45.923,-1) from dual;截取到十位 (個十百千萬...)
  MOD 取餘
    select mod(10,3) from dual;把10和3進行取餘 (10除以3然後獲取餘數)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.日期函數(sysdate關鍵字,表示系統的當前時間

   例如:顯示時間:當前時間
   select sysdate from dual;
   註意:sysdate進行加減操作的時候,單位是天)

  MONTHS_BETWEEN 倆個日期之間相差多少個月(單位是月)
    select months_between(sysdate+30,sysdate) from dual;
    select months_between('01-2月-2019','01-2月-2019') from dual;
  ADD_MONTHS 返回一個日期數據:表示一個時間點,往後推x月的日期
    select add_months('01-2月-2019',2) from dual;
    select add_months(sysdate,4) from dual;
    註意:這個數字也可以是負數,表示往前推x月
  NEXT_DAY 返回一個日期數據:表示一個時間點後的下一個星期幾在哪一天
    select next_day(sysdate,'星期五') from dual;
    select next_day('01-2月-2019','星期五') from dual;
    如果要使用'FRIDAY',那麼需要把當前會話的語言環境修改為英文
    alter session set nls_language=english;
    alter session set nls_language='simplified chinese';
  LAST_DAY 返回一個日期數據:表示一個日期所在月份的最後一天
    select last_day(sysdate) from dual;當前日期所在月份的最後一天(月底) 15.16?
  ROUND 對日期進四捨五入,返回操作後的日期數據
    select round(sysdate,'MONTH') from dual;
    //這個寫法是錯誤的
    //數字函數也有一個round
    //倆個ronnd函數有衝突
    //所以這裡不能使用預設的日期格式
    select round('01-2月-2019','MONTH')
    from dual;
  TRUNC 對日期進行截取 和round類似,但是只捨棄不進位
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25.四.類型轉換函數
  TO_CHAR 把日期或數字轉換為字元
  TO_NUMBER 把字元轉換為數字
  TO_DATE 把字元轉換為日期
所以在日常的編程中若要向資料庫中存一個日期,我們可以使用to_date函數
若要將一個日期數據以字元串形式從資料庫中取出,我們可以使用to_char函數。
使用形式:fx(value,changed model);

附:建表語句

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

alter session set nls_language=english;

CREATE TABLE s_dept(
  id    NUMBER(7) CONSTRAINT s_dept_id_nn NOT NULL,
  name    VARCHAR2(25)    CONSTRAINT s_dept_name_nn NOT NULL,
  region_id    NUMBER(7),
  CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
  CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
);

CREATE TABLE s_emp(
  id    NUMBER(7)    CONSTRAINT s_emp_id_nn NOT NULL,
  last_name    VARCHAR2(25)    CONSTRAINT s_emp_last_name_nn NOT NULL,
  first_name    VARCHAR2(25),
  userid    VARCHAR2(8),
  start_date    DATE,
  comments    VARCHAR2(255),
  manager_id    NUMBER(7),
  title    VARCHAR2(25),
  dept_id    NUMBER(7),
  salary    NUMBER(11, 2),
  commission_pct    NUMBER(4, 2),
  CONSTRAINT s_emp_id_pk PRIMARY KEY (id),
  CONSTRAINT s_emp_userid_uk UNIQUE (userid),
  CONSTRAINT s_emp_commission_pct_ck
  CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20))
);

CREATE TABLE s_region(
  id    NUMBER(7)    CONSTRAINT s_region_id_nn NOT NULL,
  name    VARCHAR2(50)    CONSTRAINT s_region_name_nn NOT NULL,
  CONSTRAINT s_region_id_pk PRIMARY KEY (id),
  CONSTRAINT s_region_name_uk UNIQUE (name)
);

INSERT INTO s_dept VALUES (10, 'Finance', 1);
INSERT INTO s_dept VALUES (31, 'Sales', 1);
INSERT INTO s_dept VALUES (32, 'Sales', 2);
INSERT INTO s_dept VALUES (33, 'Sales', 3);
INSERT INTO s_dept VALUES (34, 'Sales', 4);
INSERT INTO s_dept VALUES (35, 'Sales', 5);
INSERT INTO s_dept VALUES (41, 'Operations', 1);
INSERT INTO s_dept VALUES (42, 'Operations', 2);
INSERT INTO s_dept VALUES (43, 'Operations', 3);
INSERT INTO s_dept VALUES (44, 'Operations', 4);
INSERT INTO s_dept VALUES (45, 'Operations', 5);
INSERT INTO s_dept VALUES (50, 'Administration', 1);

INSERT INTO s_emp VALUES (1, 'Velasquez', 'Carmen', 'cvelasqu',to_date('03-MAR-90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',50, 2500, NULL);
INSERT INTO s_emp VALUES (2, 'Ngao', 'LaDoris', 'lngao','08-MAR-90', NULL, 1, 'VP, Operations',41, 1450, NULL);
INSERT INTO s_emp VALUES (3, 'Nagayama', 'Midori', 'mnagayam','17-JUN-91', NULL, 1, 'VP, Sales',31, 1400, NULL);
INSERT INTO s_emp VALUES (4, 'Quick-To-See', 'Mark', 'mquickto','07-APR-90', NULL, 1, 'VP, Finance',10, 1450, NULL);
INSERT INTO s_emp VALUES (5, 'Ropeburn', 'Audry', 'aropebur','04-MAR-90', NULL, 1, 'VP, Administration',50, 1550, NULL);
INSERT INTO s_emp VALUES (6, 'Urguhart', 'Molly', 'murguhar','18-JAN-91', NULL, 2, 'Warehouse Manager',41, 1200, NULL);
INSERT INTO s_emp VALUES (7, 'Menchu', 'Roberta', 'rmenchu','14-MAY-90', NULL, 2, 'Warehouse Manager',42, 1250, NULL);
INSERT INTO s_emp VALUES (8, 'Biri', 'Ben', 'bbiri','07-APR-90', NULL, 2, 'Warehouse Manager',43, 1100, NULL);
INSERT INTO s_emp VALUES (9, 'Catchpole', 'Antoinette', 'acatchpo','09-FEB-92', NULL, 2, 'Warehouse Manager',44, 1300, NULL);
INSERT INTO s_emp VALUES (10, 'Havel', 'Marta', 'mhavel','27-FEB-91', NULL, 2, 'Warehouse Manager',45, 1307, NULL);
INSERT INTO s_emp VALUES (11, 'Magee', 'Colin', 'cmagee','14-MAY-90', NULL, 3, 'Sales Representative',31, 1400, 10);
INSERT INTO s_emp VALUES (12, 'Giljum', 'Henry', 'hgiljum','18-JAN-92', NULL, 3, 'Sales Representative',32, 1490, 12.5);
INSERT INTO s_emp VALUES (13, 'Sedeghi', 'Yasmin', 'ysedeghi','18-FEB-91', NULL, 3, 'Sales Representative',33, 1515, 10);
INSERT INTO s_emp VALUES (14, 'Nguyen', 'Mai', 'mnguyen','22-JAN-92', NULL, 3, 'Sales Representative',34, 1525, 15);
INSERT INTO s_emp VALUES (15, 'Dumas', 'Andre', 'adumas','09-OCT-91', NULL, 3, 'Sales Representative',35, 1450, 17.5);
INSERT INTO s_emp VALUES (16, 'Maduro', 'Elena', 'emaduro','07-FEB-92', NULL, 6, 'Stock Clerk',41, 1400, NULL);
INSERT INTO s_emp VALUES (17, 'Smith', 'George', 'gsmith','08-MAR-90', NULL, 6, 'Stock Clerk',41, 940, NULL);
INSERT INTO s_emp VALUES (18, 'Nozaki', 'Akira', 'anozaki','09-FEB-91', NULL, 7, 'Stock Clerk',42, 1200, NULL);
INSERT INTO s_emp VALUES (19, 'Patel', 'Vikram', 'vpatel','06-AUG-91', NULL, 7, 'Stock Clerk',42, 795, NULL);
INSERT INTO s_emp VALUES (20, 'Newman', 'Chad', 'cnewman','21-JUL-91', NULL, 8, 'Stock Clerk',43, 750, NULL);
INSERT INTO s_emp VALUES (21, 'Markarian', 'Alexander', 'amarkari','26-MAY-91', NULL, 8, 'Stock Clerk',43, 850, NULL);
INSERT INTO s_emp VALUES (22, 'Chang', 'Eddie', 'echang','30-NOV-90', NULL, 9, 'Stock Clerk',44, 800, NULL);
INSERT INTO s_emp VALUES (23, 'Patel', 'Radha', 'rpatel','17-OCT-90', NULL, 9, 'Stock Clerk',34, 795, NULL);
INSERT INTO s_emp VALUES (24, 'Dancs', 'Bela', 'bdancs','17-MAR-91', NULL, 10, 'Stock Clerk',45, 860, NULL);
INSERT INTO s_emp VALUES (25, 'Schwartz', 'Sylvie', 'sschwart','09-MAY-91', NULL, 10, 'Stock Clerk',45, 1100, NULL);

INSERT INTO s_region VALUES (1, 'North America');
INSERT INTO s_region VALUES (2, 'South America');
INSERT INTO s_region VALUES (3, 'Africa / Middle East');
INSERT INTO s_region VALUES (4, 'Asia');
INSERT INTO s_region VALUES (5, '	   

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

-Advertisement-
Play Games
更多相關文章
  • [TOC] 1.環境規劃 | 主機名 | 角色 | IP地址 | | : : | : : | : : | | db01 | Redis master | 172.16.1.51 | | db02 | Redis slave | 172.16.1.52 | | db03 | Redis slave | ...
  • [TOC] 1.下載 2.解壓 3.安裝 4.添加環境變數 5.啟動和連接 ...
  • @ "TOC" 下載Oracle 官方下載地址: "Oracle下載" 網盤地址:鏈接:https://pan.baidu.com/s/1UcT5Xd0LWt 86Grl1wtvrA 提取碼:539f 安裝Oracle 1. 打開setup.exe 2. 點擊是 3. 去除安全更新 4. 選擇創建和 ...
  • with t as ( select '-' as col1 --isnumeric('-')這裡會判斷為數字,所以不能用 union all select '1' as col1 union all select '2' as col1 union all select '3.4' as col1 ...
  • --行轉列小實例 --創建測試表 if object_id(N'test', N'U') is not null drop table test go with PivotTable as ( select 'xxx' as czy, '點贊' as czlx, 2 as num union all ...
  • SQL列的數據類型分類: Unicode數據: 1.nchar 2.nvarchar 3.ntext 說明: Unicode支持的字元範圍更大。存儲 Unicode 字元所需要的空間更大。 傻瓜式教程(我初學者) ...
  • 在創建時間欄位的時候 表示當插入數據的時候,該欄位預設值為當前時間 表示每次更新這條數據的時候,該欄位都會更新成當前時間 這兩個操作是mysql資料庫本身在維護,所以可以根據這個特性來生成【創建時間】和【更新時間】兩個欄位,且不需要代碼來維護 如下: ~~~mysql CREATE TABLE ( ...
  • DM JDBC 介紹 DM JDBC 驅動程式是 DM資料庫的 JDBC 驅動程式,它是一個能夠支持基本 SQL 功能 的通用應用程式編程介面,支持一般的 SQL 資料庫訪問。 通過 JDBC 驅動程式,用戶可以在應用程式中實現對 DM 資料庫的連接與訪問,JDBC 驅動程式的主要功能包括: 1. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...