1. 程式人生 > >最後階段基礎知識點及Oracle各種知識點重點總結

最後階段基礎知識點及Oracle各種知識點重點總結

yi:Oracle中字串連線的實現方法

 

1.和其他資料庫系統類似,Oracle字串連線使用“||”進行字串拼接,其使用方式和MSSQLServer中的加號“+”一樣。

例如:

SELECT '工號為'||FNumber||'的員工姓名為'||FName FROM T_Employee 
WHERE FName IS NOT NULL 

2.除了“||”,Oracle還支援使用CONCAT()函式進行字串拼接,比如執行下面的SQL語句:

SELECT CONCAT('工號:',FNumber) FROM T_Employee 

如果CONCAT中連線的值不是字串,Oracle會嘗試將其轉換為字串,比如執行下面的SQL語句: 

SELECT CONCAT('年齡:',FAge) FROM T_Employee 

與MYSQL的CONCAT()函式不同,Oracle的CONCAT()函式只支援兩個引數,不支援兩個以上字串的拼接,比如下面的SQL語句在Oracle中是錯誤的: 

SELECT CONCAT('工號為',FNumber,'的員工姓名為',FName) FROM T_Employee 
WHERE FName IS NOT NULL 

執行以後Oracle會報出下面的錯誤資訊: 

引數個數無效 

3.如果要進行多個字串的拼接的話,可以使用多個CONCAT()函式巢狀使用,上面的SQL可以如下改寫:

SELECT CONCAT(CONCAT(CONCAT('工號為',FNumber),'的員工姓名為'),FName) FROM 
T_Employee 
WHERE FName IS NOT NULL 

 

er: 關於“limit” 的使用

limit:是MySQL內建函式,其作用是用於限制查詢結果的條數

 

1)其語法格式如下:

LIMIT[位置偏移量,]行數

其中,中括號裡面的引數是可選引數,位置偏移量是指MySQL查詢分析器要從哪一行開始顯示,索引值從0開始,即第一條記錄位置偏移量是0,第二條記錄的位置偏移量是1,依此類推...,第二個引數為“行數”即指示返回的記錄條數。

位置偏移量可以理解為跳過前xx條記錄(元組).

2)基本用法

/*當沒有指定位置偏移量時,只取4條時,可以這樣寫*/

SELECT * FROM YourTableName LIMIT 4;



/*當指定了位置偏移量時,從第3條起取4條時,可以這樣寫*/

/*因為索引是從0開始計數的,所以第3條對應的索引就是2*/

SELECT * FROM YourTableName LIMIT 2,4;

 

3)應用場合:分頁  ------------------------

 

san:    SQL union 與 union all操作符

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 SELECT 語句中的列的順序必須相同。

註釋:預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。

例:

Employees_China:

E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming

Employees_USA:

E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill

 

使用 UNION 命令

例項

列出所有在中國和美國的不同的僱員名:

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

結果

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill

註釋:這個命令無法列出在中國和美國的所有僱員。在上面的例子中,我們有兩個名字相同的僱員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。

UNION ALL

UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。

SQL Statement 1
UNION ALL
SQL Statement 2

使用 UNION ALL 命令

例項:

列出在中國和美國的所有的僱員:

SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA

結果

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill

SI:表空間 ----------SQL Server資料庫與Oracle資料庫之間最大的區別要屬表空間設計




1:表空間是資料庫的邏輯劃分,一個表空間只能屬於一個數據庫。所有的資料庫物件都存放在指定的表空間中。但主要存放的是表, 所以稱作表空間。

2:Oracle資料庫中至少存在一個表空間,即SYSTEM的表空間。

3:SQL Server資料庫與Oracle資料庫之間最大的區別要屬表空間設計。Oracle資料庫開創性地提出了表空間的設計理念,這為Oracle資料庫的高效能做出了不可磨滅的貢獻。可以這麼說,Oracle中很多優化都是基於表空間的設計理念而實現的。

4:重點:
我們可以在Oracle資料庫中,建立不同的表空間,為其設定最大的儲存容量,然後把使用者歸屬於這個表空間。如此的話,這個使用者的儲存容量,就受到這個表空間大小的限制。

面試題:
下面關於表空間錯誤的說法是:(A)

A 表空間的大小憂他所包含的檔案大小所決定

B 使用者建立的表都必須儲存在某個表空間裡

C 如果某張表很大   可以把它放在兩個表空間裡

D 每個資料庫至少要有一個表空間

WU:   關係模型的三種完整性約束

在關係模型中,關係完整性主要是指以下三方面:

1、實體完整性:所謂的實體完整性就是指關係(所謂的關係就是表)的主碼不能取空值;
比如學生表的主碼通常是取學號為主碼

2、參照完整性:是指參照關係中每個元素的外碼要麼為空(NULL),要麼等於被參照關係中某個元素的主碼;
比如今天是9月2日是開學日,大學新生剛來報道,在學生表裡,有的學生可能還沒來得及分配具體的班,所以這些還未來得及分班的學生教務處可以在學生表裡的班級屬性取空值NULL(空值代表“不確定”),而哪些已分了班的學生就必須取班級表裡的某些屬性,比如班級類別,即學生屬於哪個班。比如取“軟體工程”,”計算機技術應用“等等。
參照關係也稱為外來鍵表,被參照關係也稱為主鍵表。

3、使用者定義的完整性:指對關係中每個屬性的取值作一個限制(或稱為約束)的具體定義。比如 性別屬性只能取”男“或”女“ ,再就是年齡的取值範圍,可以取值0-130 ,但不能取負數,因為年齡不可能是負數。

面試題:

關係模型有三類完整性約束: 實體完整性   參照完整性, 和使用者完整性 定義外來鍵實現的是__(B)___ 

A 實體完整性

B 參照完整性

C使用者定義的完整性

D 實體完整性  參照完整性 和使用者定義的完整性

Liu: "currVal" 與  "nextVal"

  1:CurrVal:返回 sequence的當前值 

  2: NextVal:增加sequence的值,然後返回 增加後sequence值 

 

Qi:常用ASCII數字對應表:

0~9數字對應十進位制48-57

a~z字母對應的十進位制97-122十六進位制61-7A

A~Z字母對應的十進位制65-90十六進位制41-5A

 

Ba:請自己實現兩個整數變數的交換,用不同的方式實現。

/*
   面試題:
       請自己實現兩個整數變數的交換,用不同的方式實現
*/
public class OperatorTest2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        System.out.println("a:"+a+",b:"+b);

        //方式1:使用第三方變數
        /*
           int c = a;
           a = b;
           b = c;
           System.out.println("a:"+a+",b:"+b);
           System.out.println("------------");
        */

        //方式2:用位異或實現
        //左邊:a,b,a
        //右邊:a ^ b
        /*
           a = a ^ b;
           b = a ^ b; //a ^ b ^ b = a
           a = a ^ b; //a ^ b ^ a = b
           System.out.println("a:"+a+",b:"+b);
        */

        //方式3:用變數相加的做法
        /*
           a = a + b; //a=30
           b = a - b; //b=10
           a = a - b; //a=20
           System.out.println("a:"+a+",b:"+b);
        */

        //方式4:
        b = (a+b) - (a=b); //b=30-20=10,a=20
        System.out.println("a:"+a+",b:"+b);
    }
}

 

三元運算子:

1、格式

   比較表示式?表示式1:表示式2;

2、執行流程:

   首先計算比較表示式的值,看是true還是false。

   如果是true,表示式1就是結果。

   如果是false,表示式2就是結果。
public class OperatorDemo9 {
    public static void main(String[] args) {
        int x = 100;
        int y = 200;

        int z = ((x > y)? x: y);

        //報錯
        //int z = ((x = y)? x : y);//比較表示式:結果是一個boolean型別。

        System.out.println("z:"+z);//z:200
    }
}

Jiu:   " modify" 與 “alter” 區別:

1、 
modidy是修改欄位的屬性 

只是alter的一個功能 

alter還能做add,set等操作 

修改資料表的名稱用rename 

欄位名以及屬性用modify 

欄位值用set 
這些全是alter