部分常見ORACLE面試題以及SQL注意事項
一、表的建立: 一個通過單列外來鍵聯絡起父表和子表的簡單例子如下: CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id) ) CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) 建表時注意不要用關鍵字當表名或欄位名,如insert,use等。 CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id) ) TYPE=INNODB; InnoDB Tables 概述 InnoDB給MySQL提供了具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID
compliant))型表。 InnoDB 是 MySQL 上第一個提供外來鍵約束(FOREIGN KEY constraints)的表引擎。 InnoDB 從一個表中查詢出資料插入到另一個表中的方法: select * into destTbl from srcTbl ; 如果只想要結構而不要資料。 create table s_emp_42 as select * from s_emp where 1=2;//永假式 SQL查詢練習題 1. 表1:book表,欄位有id(主鍵),name (書名); 表2:bookEnrol表(圖書借出歸還登記),欄位有id,bookId(外來鍵),dependDate(變更時間),state(1.借出 2.歸還)。 id name 1 English 2 Math 3 JAVA
1 1 2009-01-02 1 2 1 2009-01-12 2 3 2 2009-01-14 1 4 1 2009-01-17 1 5 2 2009-02-14 2 6 2 2009-02-15 1 7 3 2009-02-18 1 8 3 2009-02-19 2 要求查詢結果應為:(被借出的書和被借出的日期) Id Name dependDate 1 English 2009-01-17 2 Math 2009-02-15 Select e.bookId,b.name,e.dependDate from book b,bookEnrol e where 第二個表是用來登記的,不管你是借還是還,都要新增一條記錄。 請寫一個SQL語句,獲取到現在狀態為已借出的所有圖書的相關資訊。 參考語句: select book.id,book.name,max(dependDate) from book inner join bookEnrol on book.id=bookEnrol.bookid AND booker.state=1 group by book.id ; 2 第(1)題練習使用group by /having 子句。類似的筆試題還有: 表一:各種產品年銷售量統計表 sale 年產品銷量 年產品銷量 即:每年銷量最多的產品的相關資訊。 參考答案: Select * from sale a where
not exists(select * from sale where 年=a.年 and 銷量>a.銷量); 3.查詢語句排名問題: 名次姓名月積分(char) 總積分(char) select * from tablename order by cast(總積分 as int) desc 表tb
select uid, sum(mark) as total from tab_name group by uid order by total desc; 4 表A欄位如下 1 a 1000 2 a 2000 3 a
3000 Select (Select Month From Table Where Month =
To_Char(Sysdate, 'mm')) 月份, 方法原理: SQL> select rowid,bm,mc from a; 查出重複記錄 其他組合函式 Group by 子句 使用TOP-N分析法TOP-N分析法基於條件顯示錶中最上面N條記錄或最下面N條記錄 //語法: 例1:查詢Employee表的頂部10條記錄 例2: 查詢Employee表的第1 到第10條記錄,可以用於分頁顯示 SQL注入 1=1永遠成立,相當於查詢所有記錄 select * from person_zdk where 1=1 or name like '%a%' and age=13; DECODE函式 是ORACLE PL/SQL是功能強大的函式之一,目前還只有ORACLE公司的SQL提供了此函式,其他資料庫廠商的SQL實現還沒有此功能。 decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值) 假設我們想給智星職員加工資,其標準是:工資在8000元以下的將加20%;工資在8000元以上的加15%,用DECODE函式,那麼我們就可以把這些流控制語句省略,通過SQL語句就可以直接完成。如下:select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee. SQL中的單記錄函式 1.CONCAT 2.LTRIM和RTRIM 3..SUBSTR(string,start,count) 4日期函式 如:LAST_DAY 返回本月日期的最後一天 具體參見oracle筆記. 其他主要函式:.TRUNC 按照指定的精度擷取一個數;SQRT 返回數字n的根;POWER(n1,n2)返回n1的n2次方根;MOD(n1,n2) 返回一個n1除以n2的餘數;FLOOR 對給定的數字取整數;REPLACE('string','s1','s2')
string 希望被替換的字元或變數
s1 被替換的字串
s2 要替換的字串;LOWER 返回字串,並將所有的字元小寫;UPPER返回字串,並將所有的字元大寫;LENGTH ORALCE常識及 SQL 基本語法 1,ORACLE安裝完成後的初始口令? 2,IBM的Codd (Edgar Frank Codd)博士提出《大型共享資料庫資料的關係模型》 3,ORACLE 9i 中的 i (internet)是因特網的意思 4,ORACLE的資料庫的物理結構:資料檔案、日誌檔案、控制檔案 5,ORACLE的資料庫的邏輯結構:表空間——表——段——區間——塊表空間類似於SQLSERVER中資料庫的概念 6,SYSDATE 返回當前系統日期(說明:當函式沒有引數時可以省略括號) 7,在SQL PLUS中執行緩衝區中的SQL命令的方式: 8,在SQL PLUS中修改當前會話的日期顯示格式 9,使用臨時變數,提高輸入效率 10,從其他表中複製資料並寫入表 11,修改表中的記錄 12,刪除表中的記錄 14,事務控制使用
savepoint,rollback,commit 關鍵字 15,查詢表中的資料 16,Number and Date 可以用於算術運算因為 Date 型別其實儲存為 Number 型別 17,用運算表示式產生新列 18,算術表示式中NULL值錯誤的處理因為任何數與NULL運算無意義,所以為避免錯誤,需要用其他值替換NULL值例如: 19,使用友好的列名,有下面三種形式 20,過濾重複行,使用關鍵字 distinct 22,where 子句中字元型是區分大小寫的,最好都轉成大寫因為在ORACLE庫中,字元會轉換成大寫來儲存 23,比較運算子:等於"=",不等於有兩種"<>"或者"!=" 24,複雜的比較運算子: 25,邏輯運算子,按優先順序從高到低排列 26,Order by 子句中( asc 表示升序,desc 表示降序) 27,ORACLE 函式,分為單行函式:每條記錄返回一個結果值多行函式:多條記錄返回一個結果值 28,字元函式——轉換函式 29,字元函式——操縱函式(注意:ORACLE以UNICODE儲存字元) 30,四捨五入函式 round(數值,小數位) ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1) 31,數值擷取函式 trunct TRUNC(45.923,2) TRUNC(45.923,0) TRUNC(45.923,-1) 32,求模函式 MOD(a,b) 返回a被b整除後的餘數 33,Oracle內部預設的日期格式: DD-MON-YY (24-9月 -06) 34,DUAL :啞元系統表,是名義表,只能範圍唯一值 35,Date型別的算術運算,以天為單位例如:部門編號為10的員工分別工作了多少年 ENAME YEARS 36,日期函式 37,資料型別轉換 —— Oracle 可隱式轉換的情況有: 38,資料型別轉換 —— Oracle 資料型別轉換函式 39,日期格式模型字元 另外還有 D,DD,DDD 等。。。 40,NVL(value,substitute) 41,Coalesce(exp_name1,exp_name2……exp_n) 42,Decode 函式:
Decode(exp,testvalue1,resultvalue1,testvalue2,resultvalue2) 國家名稱國家編號 結果,在DECODE中存在且成功匹配的值將會被顯示,否則顯示為NULL SQL語句書可以提高執行效率的方法 1、操作符號: NOT IN操作符此操作是強列推薦不使用的,因為它不能應用表的索引。推薦方案:用NOT EXISTS 或(外連線+判斷為空)方案代替 "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", "LIKE '%500'",因為他們不走索引全是表掃描。NOT IN會多次掃描表,使用EXISTS、NOT EXISTS、IN、LEFT OUTER JOIN來替代,特別是左連線,而Exists比IN更快,最慢的是NOT操作。
select max(id)
as max_id
oracle Certification Program (OCP認證)的題目(1) A 表中有100條記錄. |