數據庫基礎(Oracle)

前言:mysql

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:清空表格,該操做不須要提交事務sql

oracle數據庫環境準備(通常如今使用mysql數據庫的是一種趨勢):
   三種登陸方式:
    sqlplus "/as sysdba"
    sqlplus system/*******
    sqlplus username/password數據庫

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

      

                    建表語句附在文檔最後windows

 

6.去重
distinct關鍵詞只能放在select關鍵詞後面.
若是distinct關鍵詞後面若是出現多列,表示多列聯合去重,即多列的值都相同的時候纔會認爲是重複的記錄。緩存

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

8.加減乘除有優先級,加小括號能夠改變運算的順序oracle

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, 'Europe');

COMMIT;
相關文章
相關標籤/搜索