oracle SQL學習總結

1.候選鍵、主鍵和外鍵約束:

create table Employee(數據庫

id int primary key,express

name char(20),數據庫設計

birthday Date,ide

address varchar(30),性能

city varchar(10),設計

sex char(2),索引

salary numeric(10,2),ip

dno int,ci

pno int字符串

unique(name,birthday)

);

 

 

create table Employee(

id int,

name char(20),

birthday Date,

address varchar(30),

city varchar(10),

sex char(2),

salary numeric(10,2),

dno int Reference Department(deNumber),//外鍵約束

pno int

unique(name,birthday)//候選鍵

primary key(id)//員工表的主鍵

);

外部鍵約束增長了關係數據庫表的關聯完整性,能夠較好的保證數據庫表之間的關聯完整性。主鍵所在的表成爲父表,爲主控方,對應的外部鍵所在的表爲子表,爲被控方。

 

dno int Reference Department(deNumber)工做人員所屬的部門號(dno)是相對於Department部門表的外部鍵。這樣定義之後若想添加一個工做人員的記錄,添加的記錄中dno列的值必須在Department記錄中存在與其相同的值,不然就沒法添加記錄。

 

也能夠用另外一種方式添加外鍵,若對應的主鍵是多個列的組合,那麼外部鍵的定義只能放在全部列以後。只能是這種定義:

create table Employee(

id int,

name char(20),

birthday Date,

address varchar(30),

city varchar(10),

sex char(2),

salary numeric(10,2),

dno int,

pno int,

unique(name,birthday)//候選鍵

primary key(id)//員工表的主鍵

foreign key(dno) references Department(deNumber)

);

 

在對子表中的外部鍵或對父表的主鍵進行更新時(可能會產生的關聯完整性的問題的四種狀況)總結:

1.在子表中添加記錄:

在子表Employee中添加一個記錄,其dno列的值必須與Department表中dNumber列中的一個值相同。或者添加dno列值爲NULL,不然將破壞數據庫的完整性。可是向父表Department中添加新記錄不會產生這個問題。

2.更新子表外部鍵的值:用update更新後的值必須與父表中的一個主鍵相匹配,或者更新爲NULL,不然將產生錯誤。

3.刪除父表中的記錄:從父表中刪除一個記錄,子表中對應該值的外部鍵的記錄不在與父表中的任何一個主鍵值相匹配。例如從父表Department表中刪除dNumber列值爲3的記錄,那麼子表Employee表中全部dno列值爲3的記錄(即員工所在部門爲3號)的記錄都將產生沒有匹配主鍵值的問題。然而從子表中刪除記錄並不會產生這個問題。

4.更新父表中主鍵的值:父表Department中更新一個主鍵的值後,子表Employee中與原來值相對應的外部鍵的值也將再也不與父表中任一主鍵的值相匹配。

 

下面是解決上面問題的方法:

1.使用Restrict關鍵字:父表中的主鍵值在子表中有許多具備該值的外部鍵的記錄時,若在約束中指定Restrict關鍵字,則企圖刪除父表中的語句將被拒絕,企圖更新父表中記錄的主鍵值也將被拒絕。

2.CASCADE關鍵字:當父表中一個記錄被刪除時,cascade可使其子表中全部與該記錄的主鍵值對應的記錄的(例如父表Department中的dNumber爲3的值被刪除,在子表中外鍵dno爲3的記錄都將被刪除)都將從子表中刪除。而更新父表中一個主鍵值時,CASCADE可使其子表中對應外部鍵的值也自動被修改。

3.SET NULL:當父表中一個記錄被刪除時,SET NULL可使其子表中全部與該記錄的主鍵值對應的外部鍵的值將自動被賦值爲NULL。更新同理。

4.SET DEFAULT: 當父表中一個記錄被刪除時,SET DEFAULT可使其子表中的全部與該記錄的主鍵值對應的外部鍵的值都將被賦值爲缺省值。

2. NULL 和NOT NULL約束:

NULL值並不表示0值或空值,而是表示一個丟失、不知道,不可用的值。

舉例子說明該約束:例如,Employee表中,若是沒有name就沒法知道工做人員的名字,通常來講公司都要記錄工做人員的名字,所以name的值能夠規定爲NOT NULL,而工做人員的生日,地址,等並非必定要有的,也容許其丟失,這些列值容許爲NULL。

做爲區分每一個表的主鍵的值,不能夠爲空值,而對於外部鍵來講,NULL值是容許存在的。

舉例來講明:在Company數據庫中,Employee表中pno列是相對於Project的外部鍵,並非公司的一個員工都參與一個工程項目的工做,如總裁等。所以Employee表中的pno容許有NULL值存在,(員工表Employee的總裁的外部鍵pno能夠爲NULL)。

3. 校驗約束

舉例來講明:在Employee增長校驗約束條件

Salary  NUMERIC(10,2)CHECK(Salary >1000.00 )後Employee表中拒絕小於等於1000的全部記錄。

用UPDATE Employee Set Salary=900.00 where id = 2002,該語句產生錯誤。

 

在員工表中sex列通常限制男和女兩個值,能夠增長一個檢驗約束來實現對sex列的限制。

create table Employee(

id int,

name char(20),

birthday Date,

address varchar(30),

city varchar(10),

sex char(2) check(sex in('男','女')),

salary numeric(10,2),

dno int Reference Department(deNumber),//外鍵約束

pno int

unique(name,birthday)//候選鍵

primary key(id)//員工表的主鍵

Constraint sex_check CHECK(sex in('男','女')),

Constraint salary_check CHECK(salary > 1000.00),

 

);

使用Constraint關鍵字進行檢驗約束的定義。這樣咱們能夠在之後必要的時候對定義的約束進行激活和撤銷。

5.默認值(default)

舉例:salary numeric(10,2) default 3000.00,當對錶添加記錄時,若對設有默認值的列沒有指定明確的值,系統自動會進行默認的添加。

Insert into Employee values ('peter','2012-02-20','','北京','男',1004,1,3);

6.Company數據庫表的建立

 

 

1.Employee 表:

create table Employee(

id int primary key,

name char(15) NOT NULL,                   /*員工名字*/

birthday Date,                              /*員工生日*/

address varchar(30),                         /*員工住址*/

city char(10),                                /*員工所在城市*/

sex char(2) check(sex in('男','女'))  default '男',

salary numeric(10,2) ,                        /*員工工資*/

dno int Reference Department(dnumber),       /*外鍵約束 部門號*/

pno int,                                 

foreign key(dno) references Department(pnumber),   /*外鍵約束 項目號*/

--unique(name,birthday)//候選鍵

--primary key(id)//員工表的主鍵

Constraint sex_check CHECK(sex in('男','女')),

Constraint salary_check CHECK(salary > 1000.00),

);

2.Department部門表

Create table Department(

dnumber int primary key,                 /*主鍵約束 部門號*/

dname char(20) unique,                   /*公司中每一個部門的名稱應該是不一樣的*/

mgrid int,                               /*部門負責人的id號*/

mgrdate DATE                           /*負責人上任日期*/

);

3.Project項目表的

Create table Project(

pnumber int primary key,                  /*項目號*/

pname varchar(20) unique,                /*項目名稱*/

pmgrid int,

budget NUMRIC(10,2),                  /*項目預算*/

Gross NUMRIC(10,2),                  /*預計總收入*/

pstartime Date,                       /*項目開始時間*/

pendtime Date                      /*項目結束時間*/

);

4.Paccpeter項目接收方表:

說明:因爲不一樣項目的接收方能夠相同,所以以pnumber列做爲表的主鍵。同時pnumber列是Paccpeter表相對於Project表的外部鍵。若父表Project不存在的項目號在子表Paccpeter也不能存在。

Create table Paccpeter(

pnumber int primary key,             /*項目號*/

accepter char(20) NOT NULL,        /*項目接收方不容許爲空*/

city char(10),

acceptdate Date,                    /*接收日期*/

pnumber reference Project(pnumber)  /*外鍵pnumber*/

);

 

5.Dep_Pro部門和項目鏈接表的建立:

說明:表中只包含兩列:記錄部門號的dnumber和記錄項目號的pnumber,該表中以兩者的組合做爲主鍵。同時dnumber是相對於Department表的外部鍵,而pnumber列是相對於Project表的外部鍵。

CREATE TABLE Dep_Pro(

dnumber INT , 

pnumber INT ,

PRIMARY KEY(dnumber,dnumber),

dnumber REFERENCES Department(dnumber),

pnumber REFERENCES Department(pnumber),

);

 

7建立索引:

1.在單列上建立索引:

在員工表id列上建立索引:

CREATE INDEX id_index ON Employee(id);

Select name,sex,id,salary from Employee;

查詢的結果會按照索引的順序進行排列。

2.在多列上建立索引:

CREATE INDEX name_salary_index ON Employee(name,salary);

在多列上建立索引時將按照列出的順序進行排列。先將按照name進行索引,而後在按照salary進行索引。

3.建立惟一索引:

惟一索引能夠在單列也能夠在多列上建立,惟一索引能夠避免相同值的多個記錄的出現,惟一索引是指兩個記錄中沒有同一個索引值。

CREATE UNIQUE INDEX id_index ON Employee(id);

8.修改數據庫:

1.向表中添加列:

ALTER TABLE Tablename 

ADD columnname datatype 

[DEFAULT expression] 

[REFERENCES Tablename(columnname)]

[CHECK constraint] 

 

例如:若是要在 Department 表中添加city 列,默認部門所在城市爲北京。

Alter table Department  add city char(10) default '北京';

也能夠添加新列的約束:例如,公司新規定每一個項目的預計總收入不得少於10000.00元,

則能夠爲Project表中添加一個約束:

ALTER TABLE Project CONSTRAINT  gross_check (gross > 10000.00);

2.修改已有列

 

ALTER TABLE Tablename 

MODIFY columnname [datatype] 

[DEFAULT expression] 

[REFERENCES Tablename(columnname)] 

[CHECK constraint] 

例如,將Employee表中的name列的長度變成30個字符長:

ALTER TABLE Employee MODIFY NAME CHAR(30) ;

不能修改數據類型,即不能從int改到 char,能夠減小字符串的長度,然而,

不能長度少於已有數據中長度最大的值。 

 

也能夠修改列所具備的約束:

例如,將 Employee表中sex列的默認值從「男」修改爲「女」:

 ALTER TABLE Employee MODIFY sex DEFAULT '女';

在SQL 中,也可使用 ALTER TABLE 語句刪除表中已有的列。

例如從Employee表中刪除birthday:

ALTER TABLE Employee DROP birthday;

9.刪除索引:

Drop index indexname;

使用索引的緣由總結:

使用索引是爲了提升檢索數據的速度,建立索引後,咱們就能夠經過索引來查找數據,而沒必要掃描每一個記錄。這比如書的目錄同樣,使咱們很快就會定位到咱們要找的那一頁。可是咱們不能對每一列進行索引。由於,建立和維護索引須要佔用數據庫的時間和空間的。

1.適合使用索引的狀況:

(1)大量值:表中的記錄在該列上含有大量不一樣的值時,爲表創建索引能夠起到很好的做用。

(2)常常在查詢中使用:某列在查詢中使用的越多,在該列上建立的索引所能起到的加快速度的做用越明顯。

(3)查詢返回記錄相對較少時:當返回的記錄大大少於表中的記錄總量的時候,索引能很好的加快查詢速度。若老是返回大量的記錄,因爲索引自己的開銷,索引並不能很好的提升檢索的速度。

(4)用於兩個錶鏈接的操做:因爲索引使每一個表中的記錄按順序排列,因此使用被索引的列進行鏈接操做,能夠提升鏈接速度。

2.不適和創建索引的狀況:

(1)小型表:對於小型表,因爲表中的記錄很少,而索引自身也會增長開銷,經過使用索引並不能提升性能,因此小型表不使用索引。

(2)只有不多值的列不適合創建索引。

(3)用戶查詢方式常常變化的表不適合創建索引。

(4) 在具備較多的NULL值的列不適合建立索引。

(5) 按期更新或者修改的列不斷的更新或者修改致使索引頁須要進行不斷的更新,額外的消耗過多。

10.多表鏈接查詢:

1.什麼是鏈接?

定義:鏈接是將多個表的數據結合到一塊兒的查詢,即鏈接操做能夠在一個select語句中完成從多個表中查找和處理數據。使用鏈接時可使用相同名字的列,例如可使用pnumber鏈接Project表與Paccpter表;也可使用不一樣名字的列進行鏈接,例如使用Employee表中的id列與Department的mgrid列進行鏈接。進行鏈接時用於鏈接的必須是可鏈接的列,即要求它們具備相同的數據類型。

通常來講,鏈接的語法能夠分爲二種:

(1) 傳統的鏈接語法:select from/where包含多個表的鏈接查詢

傳統的FROM/WHERE 鏈接語法基本格式以下: 

SELECT select_list 

FROM Table1name, [ Table2name, ...] 

WHERE [Table1name.]column operator [Table2name.]column 

用上面的表:

例如:查詢部門負責人的負責的部門號、負責人名字、id 號、性別及工資。

分析:須要鏈接連個表:Employee表和Department表

緣由:在Employee表中並無存儲誰是什麼部門的負責人,負責人的id 號存儲在Department 表中。(參照上面的表)

Select dnumber,name,id,sex,salary from Employee, Department where id=mgrid;

(2) SQL鏈接語法:join關鍵字來實現鏈接的操做JOIN CROSS JOIN及NATURAL

SELECT select_list 

FROM Table1name [CROSS | NATURAL] JOIN Table2name 

[ON [Table1name.]column operator [Table2name.]column] 

[WHERE conditions]

 

●   第一行中的select_list仍然是選擇的列的名稱,可是須要注意的是,若是使用兩

個表中有相同名稱的列,則必須限定是哪一個表中的列; 

●   第二行中關鍵字CROSS與NATURAL 是可選項,可使用也能夠不使用。若是

選擇了CROSS或NATURAL 關鍵字,那麼就不能使用ON關鍵字; 

●   單獨使用JOIN 關鍵字時,須要使用ON關鍵字來設定鏈接的條件; 

●   使用CROSS JOIN 時,不能使用關鍵字ON,所以必須使用WHERE子句設定連

接的條件。由於若是不設定鏈接條件,將返回表之間的每一種可能組合(即笛卡

爾積),鏈接結果將很是龐大; 

●   NATURAL JOIN 只 有在兩個表有相同名稱的列時才能使用,將在同名列上進行連

接。所以,沒必要使用關鍵字 ON 或 WHERE 子句設定鏈接條件。固然,使用 WHERE

子句限制查找的行仍然是能夠的。

 

例如查詢:部門負責人的負責的部門號、負責人名字、id 號、性別及工資。

用join鏈接:

Select dnumber,name,sex,id,salary from Employee join Department on mgrid = id;

Results 

dnumber      name         sex      id     salary 

————   —————    ———   ——   ———— 

6          魏成          男     6001    5000.00 

1          林志千        男     1001    6000.00 

2          陳廣海        男     2001    5000.00 

3          張宇          男     3001    5000.00 

4          張峯          男     4001    7000.00 

5          李志深        男     5001    5000.00

用cross join鏈接:

SELECT dnumber, name, sex, id, salary FROM Employee CROSS JOIN Department 

WHERE id = mgrid

結果是與上面相同的。

可是這裏不能用NATURAL JOIN鏈接。雖然Employee的id列和Department表mgrid列的數據類型和存儲的內容相同,可是名稱不相同,因此不能用天然鏈接。

Project的表和Paccpter表中有兩個相同的列pnumber,則能夠對這兩個表進行NATURAL JOIN鏈接。

Select pnumber,accepter,budget from Project NATURAL JOIN Paccpter;

Results 

  pnumber    accepter          budget 

 ————   ————————  —————  

 101      藍科通信公司       110000.00 

 102      華夏技術有限公司   140000.00 

 103      漢升諮詢公司       150000.00 

 104      神州發展有限公司   120000.00 

 105      四海貿易有限公司   100000.00 

201      化天通信公司       200000.00 

202      日勝公司           220000.00 

203      華田汽修公司       250000.00 

204      東勝有限公司       240000.00 

301      科華貿易公司       300000.00 

302      新安有限公司       320000.00 

303      華田汽修公司       360000.00

也能夠用傳統的from/where循環代替:

Select pnumber,accepter,budget from Project,Paccpter where Project.pnumber = Paccpter.pnumber;

用join on代替:

Select pnumber,accepter,budget from Project join Paccpter on Project.pnumber = Paccpter.pnumber;

2處理鏈接:

兩個表有意義的鏈接到一塊兒,必須有公共數據。

Project表:

SELECT pnumber, budget FROM Project;

 

Results 

pnumber      budget   

————   ————— 

    101       110000.00 

    102       140000.00 

    103       150000.00 

    104       120000.00 

    105       100000.00 

    201       200000.00 

    202       220000.00 

    203       250000.00 

    204       240000.00 

    301       300000.00 

    302       320000.00 

303       360000.00

Paccepter 表:

SELECT pnumber, accepter FROM Paccepter;

 

Results 

pnumber        accepter     

————     ———————  

  101          藍科 通信公司 

  102          華夏 技術有限公司 

  103          漢升 諮詢公司 

  104          神州 發展有限公司 

  105          四海 貿易有限公司

201          化天通 訊公司 

202          日勝公司 

203          華田汽 修公司 

204          東勝有 限公司 

301          科華貿 易公司 

302          新安有 限公司 

303          華田汽 修公司

 

在理想的狀況下,對數據庫中的表進行鏈接時使用表的主鍵與相應外部鍵。由於,設計數據庫時,主鍵與外部鍵在邏輯上就是互相聯繫的,而且主鍵與外部鍵之間具備一致性,會保持主鍵列與外部鍵列在值上的一致。主鍵與外部鍵能夠很好的保持數據庫完整性。

 

 

較好的鏈接應該符合如下要求:

●   FROM 子句中必須包含用於鏈接的全部表,不能僅包含一部分用於鏈接的表; 

●   進行鏈接的列名稱能夠不一樣,除非要使用NATURAL JOIN,若是須要使用相同

名稱的列必須爲其加上表名做爲限制,否則會產生混淆; 

●   用於鏈接的列必須有相同的數據類型,或能夠自動進行類型轉換。不一樣類型的數

據是不能進行鏈接的。例如,不能使用Employee表中的birthday 列與Department

表中的dname 列進行鏈接; 

●   用於鏈接的列必須具備相同的意義,這是最重要的一點,沒有相贊成義的列的連

接是毫無用處的。例如,雖然Employee表中的name列與Department 表中的dname

列數據類型相同,可是這兩個列絕不相干,鏈接是沒有意義的。

查詢的時候必須指定查詢條件:

例如:查找正工做在與項目接收方所在城市相同的工做人員。

方法一:Select id,name,sex,city from Employee,Paccepter where Employee.city = Paccepter.city;

方法二: select id,name,sex,city from Employee join Paccepter where Employee.city = Paccepter.city;

若是沒有鏈接條件,查詢的結果將是兩個表的笛卡爾積。結果行數將大的驚人。

 

3.笛卡爾積

表一:

Results 

  A      B     C 

 ——   ——  —— 

  a      b     c 

  d      e     f 

  b      c     d

表二:

Results 

  D      E 

 ——   —— 

  d      e 

  e      f

則表一和表二的笛卡爾積爲:

Results 

  A      B     C     D     E 

 ——   ——  ——  ——  —— 

  a      b     c     d     e 

  a      b     c     e     f 

  d      e     f     d     e 

  d      e     f     e     f 

  b      c     d     d     e

  b      c     d     e     f

最後能夠有:3*2=6條記錄。

用於指定鏈接的表越多,其笛卡爾積的結果就越驚人,越須要很好的指定鏈接條件。

因爲鏈接過程當中使用了笛卡爾積,所以鏈接操做會致使性能的降低。

使用鏈接時應該遵循必定的原則:

●   用於鏈接的列已經建立了索引。由於索引會單獨保存在磁盤上,且將數據按照一

定順序進行了排列,索引的使用能夠加快訪問的速度; 

●   用於鏈接的列具備相同的數據類型,包括是否容許空值。若是須要系統自動進行

類型轉換是須要花費較多時間的,特別是在表中記錄不少時,類型轉換所花費的

時間將會不少.

 

4.鏈接中運算符號的使用:

例如:項目Project 表中的項目完成時間penddate 列的值大於Paccepter 表中的項目

預計接收時間acceptdate列的值。

Select pnumber, accepter, penddate, acceptdate from Project,Paccepter where penddate > acceptdate AND Project.pnumber = Paccepter.pnumber;

Results:

  pnumber    accepter       penddate      accedate 

 ————   ——————   ——————  —————— 

201     化天通信公司    2001-12-20    2001-12-15 

303     華田汽修公司    2002-04-25    2002-04-15 

[2rows]

例如:Project 表中的項目完成時間penddate 列的值不等於Paccepter 表中的項目預

計接收時間accedate 列的值。

Select pnumber, accepter, penddate, acceptdate from Project,Paccepter where penddate <> acceptdate AND Project.pnumber = Paccepter.pnumber;

 

Results 

  pnumber    accepter       penddate      accedate 

 ————   ——————   ——————  —————— 

201     化天通信公司    2001-12-20    2001-12-15 

204     東勝有限公司    2002-08-01    2002-08-06 

303     華田汽修公司    2002-04-25    2002-04-15 

[3rows]

在進行鏈接的時候還可使用where子句限制查找到的行。

例如,只須要查看項目號小於201 的全部項目的項目編號、接收方及項目成本。

方法一:

Select pnumber, accepter, budget from Project, Paccpeter where Project.pnumber = Paccpeter.pnumber AND Project.pnumber < 201;

方法二:

Select pnumber, accepter, budget from Project join Paccpeter on Project.pnumber = Paccpeter.pnumber where Project.pnumber < 201;

Results 

  pnumber    accepter          budget 

 ————   ——————      —————  

 101      科華貿易公司       110000.00 

 102      華夏技術有限公司   140000.00 

 103      科華貿易公司       150000.00 

 104      神州發展有限公司   120000.00 

 105      四海貿易有限公司   100000.00 

[5rows] 

5.多表的鏈接:

 

須要知道工做人員自己以及其所屬的部門和所參與的項目的詳細信息,

Employee表、Department 表、Project 表這三個表以獲得所需的信息。

可是多個錶鏈接或者多個錶鏈接時引發的性能降低更加嚴重。

例如:有三個表,每一個表都包含100行記錄,則三個錶鏈接將產生100*100*100行的組合表。處理這樣的組合表要花費的時間將會長的多。

例如:將返回工做人員自己以及其所屬的部門和所參與的項目的詳細信息:

 分析:須要鏈接三個表:Employee表,Department表,Project表。

Select id,name,dnumber,dname,mgrid,pnumber,pname,gross from Employee, Department, Project where dno = dnumber AND pno = pnumber;

數據庫設計時介紹了三種關係和數據庫鏈接的關係:

(1)一對一的關係:

例如:項目Project表和項目接收Paccepter表時一對一的關係:

能夠經過項目號pnumber進行鏈接:

方法一:Select pnumber,accepter,budget from Project join Paccepter on Project.pnumber = Paccepter.pnumber where Project.pnumber = 102;

 

方法二:Select pnumber,accepter,budget from Project,Paccepter where Project.pnumber = Paccepter.pnumber AND Project.pnumber = 102;

 

Result:

  pnumber    accepter         budget 

 ————   ——————      ————

102       華夏技術有限公司  140000.

[1row]

 

(2)一對多的關係:

一個表的一條記錄能夠對應另外一個表的若干條記錄:

查詢的時也能夠對兩個表進行鏈接:例如:部門和工做人員之間就是一對多的關係。

但願由工做人員記錄得出其所屬的部門的信息就須要進行鏈接:

Select id,name,dnumber, mgrid from Employee,Department where dno = dnumber AND name = ‘lipeng’;

Select id,name,dnumber,mgrid from Employee join Department on dno = dnumber where name = ‘lipeng’;

 

Results 

name       id     dnumber    mgrid  

—————  ——   ————    ——— 

李明      1002       1       1001 

[1row] 

(3) 多對多的關係:

沒法對多對多的兩個表進行鏈接,則必須使用建立數據庫時專門爲多對多的關係建立的鏈接表來實現。所以須要包含三個表的組合來鏈接數據。

例如:一個部門可能同時進行一個或者多個項目,一個項目可能由一個或者多個部門來配合才能很好的完成。

部門與項目間存在着多對多的關係。能夠經過鏈接表來實現部門與項目的鏈接。

 

SELECT dnumber, mgrid, pnumber FROM Department JOIN Dep_pro 

ON Department.dnumber = Dep_pro.dnumber Project JOIN Dep_pro ON Project.pnumber = Dep_pro.pnumber WHERE Project.pnumber = 301 

 

SELECT dnumber, mgrid, pnumber FROM Department,Project,Dep_pro 

WHERE Department.dnumber = Dep_pro.dnumber AND  

Project.pnumber = Dep_pro.pnumber AND  

Project.pnumber = 301 

 

 

Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear. 面對過去無怨無悔,把握如今充滿信心,備戰將來無所畏懼。保持信念,克服恐懼!一點一滴的積累,一點一滴的沉澱,學技術須要不斷的積澱!
相關文章
相關標籤/搜索