




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1 分頁怎么實現(xiàn)的分頁使用 limit :比如:select 列名 from 表名 limit 10,10;Oracle 分頁使用rownum :比如:selecta.* from( select rownum rw,列名 from表 where 條件 ) awhere a.rwx and a.rw=y;2 用沒用過索引,分類3 為什么索引會提高效率過程45游標會不會用1.有一個 user 表列有 name、province、age、city 以下 3 道題都是只能用一條 sql 語句查詢出問:(1)總共有多少人select count(0) 人數(shù) from user;(2)山東省各城市平均s
2、elect city , avg(age) from user where province=山東神 group by city ;(3)廣州平均大于 22 歲的城市select city from userwhere city like 廣州% group by city having avg(age)22;1.oracle、分頁?分頁使用 limit :比如:select 列名 from 表名 limit 10,10;Oracle 分頁使用rownum :比如:selecta.* from( select rownum rw,列名 from 表 where 條件 ) awhere a.rw
3、x and a.rw=y;2.oracle 的分析函數(shù)?分析函數(shù)1. 顧名思義,分析函數(shù)是在主查詢結果的基礎上進行一定的分析,如分部門匯總,分部門求均值等等。數(shù)據(jù)窗口1. Oracle 分析函數(shù)建立在所謂的數(shù)據(jù)窗口之上,數(shù)據(jù)窗口可以理解為一個數(shù)據(jù)集合。主查詢的數(shù)據(jù)可以按照不同的標準分割成不同的數(shù)據(jù)集。比如 partition BYmanager_id按照 manager_id 將主查詢的數(shù)據(jù)分成 N(N 代表有多少個不同的 Manager_id)個不同的數(shù)據(jù)窗口。分析函數(shù)和 GROUP BY 的區(qū)別和聯(lián)系1. 分析函數(shù)的功能大部分都可以通過 GROUP BY 來聚合完成2. 分析函數(shù)查詢出來的
4、行數(shù)是由主查詢決定的,GROUP BY 的行數(shù)結果是由GROUP BY后面的集合的唯一性組合決定的,通常比主查詢的結果行數(shù)少。常用的一些分析函數(shù)有:sum()avg()count()max()min()根據(jù)某列連續(xù)累計求和:SUM(列) ovARTITION BY 列)根據(jù)某列得到:列order by 列row_number() ovartition bydesc)3.分組排序降序 升序分組:group by排序:order by降序:desc升序:asc和 oracle 的區(qū)別? Oracle 使用 rownum 來實現(xiàn)分頁,使用 limit 實現(xiàn)分頁 Oracle 沒有主鍵自增特性,可以使
5、用調(diào)用序列的方式來實現(xiàn)主鍵自增;可以在主鍵列之后添加 auto_increment 設置自增特性 Oracle 有表空間的概念,沒有表空間 Oracle 的分組函數(shù)中 select 之后不能直接寫組的其他列;如果沒有聚組函數(shù)則可以寫其他列 Oracle 的表存放在用戶(其實是 schema 對象)所屬的表空間的數(shù)據(jù)文件中,的表存放在某個 database 中(一個 root 用戶下可以有很多 database) Oracle 中的一些函數(shù)和也不一樣 Oracle 中的字符類型可以使用 varchar2不能使用該類型1.數(shù)據(jù)庫分頁?分頁使用 limit :比如:select 列名 from 表名
6、 limit 10,10;Oracle 分頁使用rownum :比如:selecta.* from( select rownum rw,列名 from 表 where條件 ) awhere a.rwx and a.rw=y;2.給你 100 萬條數(shù)據(jù),你想查一條數(shù)據(jù)怎么查?可以在表中查詢的列上創(chuàng)建索引:其次可以使用分區(qū)表來存放數(shù)據(jù),按照數(shù)據(jù)量劃分,將每 10 萬條數(shù)據(jù)量放入不同的表空間中,這樣在查詢具體的某條數(shù)據(jù)時,內(nèi)容,可以使用 partition 關鍵字指定查詢哪個分區(qū)下的可以極大提高查詢效率。1.oracle 里面的 sql 語句優(yōu)化1 可以使用索引2 SQL 語句如果是多表關聯(lián)可以將關
7、聯(lián)條件寫在左側,過濾條件盡量寫在右側3 避免在子查詢語句中使用 in some any all 等關鍵字可以使用多表關聯(lián)替代4 避免使用 like % 寫法,這種寫法或造成全盤掃描like 之后是 字符%如果必須是 like %字符% 可以使用 instr 函數(shù)替代where ename like %E%;where instr(ename,E)0;5 復雜的業(yè)務功能可以使用過程(如果對過程熟悉的話回答)38.表 score: 用一條 SQL 語句 查詢每門課程都大于 80 分的學生name kecheng fenshu語文81數(shù)學75語文76.準備 SQL:createtablescore(
8、idprimarykeyauto_increment,namevarchar(20),subjectvarchar(20),score);直接分組求最小科目分數(shù)大于 80:select name from score group by name having min(fenshu)80 ;39.基于下面的表結構回答問題Table EMPLOYEES Structure:EMPLOYEE_ID NUMBrimary Key,_NAME VARCHAR2(25),LAST_NAME VARCHAR2(25),Salary number(8,2),HireDate DATE,Departmentid
9、 number(2)Table Departments Structure:Departmentid number(2) Primary Key,DepartmentName VARCHAR2(25)(1)基于上述 EMPLOYEES 表寫出查詢:寫出雇傭日期在今年的,或者工資在1000,3000之間的,或者員工以Obama打頭的(last_name)所有員工,寫出這些員工的全部個人信息。select EMPLOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,Departmentidfrom EMPLOYEESwhere to_char(HireDate,yyyy
10、 )=to_char(sysdate,yyyy)or (sal betn 1000 and 3000)or LAST_NAME like Obama%;(2)基于上述 EMPLOYEES 表寫出查詢:查詢部門平均工資大于 1800 元的部門的所有員工,列出這些員工的全部個人信息select EMPLOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,Departmentidfrom EMPLOYEESwhere Departmentid in(select Departmentidfrom EMPLOYEESgroup by Departmentidhaving a
11、vg(sal)1800);(3)基于上述 EMPLOYEES 表寫出查詢:查出個人工資高于其所在部門平均工資的員工,列出這些員工的全部個人信息及該員工高處部門平均工資百分比selectEMPLOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,Departmentid,Salary/avgDeptSal*100|% 百分比from (select e.*,(select avg(Salary ) from EMPLOYEES where Departmentide.Departmentid) avgDeptSal=from EMPLOYEES e) where Sa
12、laryavgDeptSal;select e.*from employees e,(select departmentid ,avg(salary) salfrom employees group by departmentid ) awhere e.departmentid = a.departmentid and e.sala.sal;40.根據(jù)題目信息回答問題設某工商業(yè)數(shù)據(jù)庫 3 個實體集:一是“商品”實體集,屬性有商品號、商品名、規(guī)格、單價等二是“商店”實體集,屬性有商店號、商店名、地址等三是“供應商”實體集,屬性有供應商、供應商名、地址等供應商與商品之間存在“供應”關系,每個供應商
13、可以供應多向多個供應商訂購,品,每種商品可每個供應商供應每種商品有個月供應量;商店與商品之間存在“銷售”聯(lián)系,每個商店可銷售多種商品,每種商品可在多個商店銷售,每個商店銷售每種商品有個月計劃數(shù)(1)試畫出 ER 圖,并在圖上注明屬性、聯(lián)系的類型(2)將 ER 圖轉(zhuǎn)換成關系模式集,并每個關系模式的主鍵和外鍵商品(商品號,商品名,規(guī)格,單價)供應商(供應商,供應商名,地址)供應關系(供應商,商品號,數(shù)量)商店(商店,商店名,地址)銷售關系(商品,商品號,計劃數(shù))* 關系模式集與 ER 實體圖之間的轉(zhuǎn)換,就是構建底層數(shù)據(jù)庫的基礎1.過程了解多少?寫過嗎?過程 procedure:在服務器端,能夠被多
14、個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。需要先用工具(Oracle 用PLSQLDeveloper儲過程,用 Navicat)寫好某個特定功能的存JDBC 可以使用 CallableSement 調(diào)用過程。2.貴公司的數(shù)據(jù)庫用的是什么?Oracle 和3.數(shù)據(jù)庫和 oracle 分頁分頁使用 limit :比如:select 列名 from 表名 limit 10,10;Oracle 分頁使用rownum :比如:selecta.* from( select rownum rw
15、,列名 from 表 where條件 ) awhere a.rwx and a.rw Oracle 使用 rownum 來實現(xiàn)分頁,使用 limit 實現(xiàn)分頁 Oracle 沒有主鍵自增特性,可以使用調(diào)用序列的方式來實現(xiàn)主鍵自增;可以在主鍵列之后添加 auto_increment 設置自增特性 Oracle 有表空間的概念,沒有表空間 Oracle 的分組函數(shù)中 select 之后不能直接寫組的其他列;如果沒有聚組函數(shù)則可以寫其他列 Oracle 的表存放在用戶(其實是 schema 對象)所屬的表空間的數(shù)據(jù)文件中,的表存放在某個 database 中(一個 root 用戶下可以有很多 dat
16、abase) Oracle 中的一些函數(shù)和也不一樣 Oracle 中的字符類型可以使用 varchar2不能使用該類型1:drop 和 truncate 的區(qū)別?drop 是刪除表,不會表原先占有的內(nèi)存空間;truncate 是截斷表,能夠表中數(shù)據(jù)所占有的內(nèi)存空間,保留表結構;如果使用 drop table 表名 purge;語句則能夠直接表占有的內(nèi)存空間。2:一條 SQL 怎么做 update or insert?Oracle 中,要實現(xiàn) update/insert 功能,要用到Merge能),其語法如下:o 來實現(xiàn)(Oracle 9i 引入的功O 表名 別名 1MERGEUSING (表|
17、視圖|查詢語句) 別名 2ON (關聯(lián)關系)WHEN MATCHED THENUPDATE 表名SET col1 = col_val1,col2 = col_val2WHEN NOT MATCHED THENINSERT (column_list) VALUES (column_values);有一個表 T,有兩個字段 a、b,想在表 T 中做 Insert/Update,如果條件滿足,則更新 T。中 b 的值,否則在 T 中一條MERGEO T T1USING (SELECT 1001 AS a,2 AS b FROM dual) T2ON ( T1.a=T2.a)WHEN MATCHED
18、THENUPDATE SET T1.b = T2.bWHEN NOT MATCHED THENINSERT (a,b) VALUES(T2.a,T2.b);3:說說數(shù)據(jù)庫三大范式是什么?第一范式:數(shù)據(jù)表中的字段不可再分假設有一三個字段。但是又可以拆分為 固users:,定,號,家庭住址等,如果按照之前的設計,填寫家庭住址登),這個列上的數(shù)據(jù)可能會很復雜(既可以填又可以這種表的設計就不符合第一范式的要求。第一范式是數(shù)據(jù)庫設計必須遵循的原則!第二范式:在第一范式的基礎上, 需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯(lián)合主鍵而言)假設有一張訂單表:訂單,商品,商品
19、名稱,單價,數(shù)量,下單時間.分析這,訂單和商品可以設計成一個聯(lián)合主鍵(一個訂單可以有多個商品),但是表中的商品名稱和單價跟訂單沒有任何關系,只跟商品有關,下單時間跟商品信息也沒有關系,而是跟訂單有關。則可以將商品的信息單獨設計成單獨的商品表,將訂單信息抽象成獨立的表,而訂單跟商品又可以是一個關聯(lián)的橋表。可以修改為:訂單表: 訂單,下單時間.商品表: 商品,商品名稱,單價.商品訂單表:訂單,商品,數(shù)量這樣在每個表中的字段跟主鍵都有唯一的關系(商品訂單表的數(shù)量依賴于訂單和商品!)第三范式: 確保每列都和主鍵列直接相關,而不是間接相關假設有員工表和部門表,員工表中有一個列為部門列對應,列,能夠跟部門
20、表中的部門那么就不能在員工表中再設計一些部門信息的列(比如在員工表中添加部門名部門地點登),這就是第三范式的要求!1.當 JDBC 執(zhí)行失敗時往往需要回滾操作,請以 user(id number(11),name varchar2(20)為例,包含 insert 語句的 Java 代碼用戶表示出現(xiàn)異常時的回滾動作publicaddUser(User us)Connection conn = null;Sement se = null;tryClass.forName(oracle.jdbc.driver.OracleDriver);conn = DriverManager.getConnect
21、ion(jdbc:oracle:thinlocalhost:1521:orcl,scott,tiger);mit(false);/ 開啟事務/需要 user_seq 系列對象i = se.executeUpdate(inserto user(id,name) values(user_seq.nextval,+us.getName()+);if(i=1)mit();return i;catch(Exception e)e.prStackTrace();tryif(conn!=null) conn.rollback();catch(Exception ec)finallytryif(se!=nul
22、l) se.close();catch(Exception ec)tryif(conn!=null) conn.close();catch(Exception ec)2.請分別寫出 Oracle 和限制返回十條的查詢語句Oracle:select 列名 from 表名 where rownum開始位置 and a.rw=(開始位置+10);*實際是分頁的用法:select 列名 from 表名 limit 10;3.寫出創(chuàng)建 Oracle JDBC 連接的過程public sic Connection getConnection()Class.forName(oracle.jdbc.drive
23、r.OracleDriver);conn = DriverManager.getConnection(jdbc:oracle:thinlocalhost:1521:orcl,scott,tiger);return conn;4.按部分分組,按創(chuàng)建時間反向排序 user(標識,部門,創(chuàng)建時間)查詢 SQL 的語句select 部門,wm_concat(時間) desc ;) 部門中員工from user group by 部門 order by min(創(chuàng)建6.oracle 的過程過程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一
24、段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。7. 如何調(diào)用過程?JDBC 中使用 CallableSement 執(zhí)行器對象,通過 execute(call過程名(?,?)的方式來調(diào)用;PL/SQL Developer 工具中可以通過declarebegin過程名(參數(shù));end;的方式調(diào)用;8. 游標對象怎么用?游標是過程體中用來指代一個 ResultSet 查詢結果的,JDBC 中可以用 ResultSet 表示一個結果集,但是過程用的是curso(r游標)對象來表示。過程如果需要遍歷/返回一個查詢結果,就需要使用游標對象。8.【數(shù)據(jù)庫】語文 10
25、0 ,數(shù)學 80,英語 88,語文 72.1.設計一,寫出創(chuàng)建表的 sql 語句create table sc(name varchar(16),subject varchar(16),score number(3);2.查詢出每科成績最高的學生select sc.* from sc ,(select subject,max(score) maxsc from sc group by subject ) awhere sc.subjeubject and sc.score = a.maxsc;*內(nèi)層嵌套按照學科分組查詢學科及對應學科最高的工資,外層級聯(lián) sc 表,如果學科和成績都跟內(nèi)存查詢相同
26、,則取出該同學信息3.查詢出平均分在 80 分以上的學生select name from scgroup by name having avg(score)80;jdbc 怎樣執(zhí)行 sql 語句?1 加載驅(qū)動2 通過驅(qū)動管理對象獲得連接3 獲得執(zhí)行器對象編寫 SQL 語句,JAVA 中用 String 類型表示 SQL4 通過執(zhí)行器執(zhí)行 SQL 語句常用的執(zhí)行 SQL 語句的方法有:(*執(zhí)行 select 語句時返回 true,因為 select 能夠返回一execute()個查詢結果其令開頭的語句返回false)executeUpdate()executeQuery()ResultSet資源
27、51.索過嗎 ? 在什么情況下會導致索引失效 ?用索引還需要注意哪些問題呢?索引分為幾種 ?用過;如果有索引的列空值比較多、重復數(shù)據(jù)比較多的話索引不起作用。通常索在查詢較多而增刪改較少的表,因為索引會降低增刪改的效率。常用的索引有普通索引、唯一性索引、位圖索引,如果某個列上經(jīng)常使用函數(shù),還可以建一個函數(shù)索引。2.like 用過嗎 ?怎么用的?用過;like 常用來實現(xiàn)模糊查詢,與%和_匹配使用,如果需要匹配特殊字符,則需要使用esc逃離符。3.union 用過嗎?能聯(lián)合字段嗎? 如果聯(lián)合的信息有空的會怎樣(對應的位置是 null)?union 表示聯(lián)合,將多個查詢結果聯(lián)為一個查詢結果,并且能夠
28、去除重復數(shù)據(jù)4.sql 語句中怎么判斷一個字段是不是空 ?與空判斷使用 is null或者 is not null5.左外連接,右外連接,說一下?left join 左外連接*from 原表 join 新表 on 關聯(lián)關系原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系關聯(lián)到原表的數(shù)據(jù)right join 右外連接原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系關聯(lián)到新表的數(shù)據(jù)6.樹形查詢是什么?用過嗎?樹形查詢相當于遞歸操作,需要使用 connect by 來實現(xiàn),簡單來說就是通過某個作為根節(jié)點,一次查找所屬的子節(jié)點。7.在數(shù)據(jù)庫中,例一個表,數(shù)據(jù)是 1000 萬條,怎樣將其中的 500 萬條放在另一個
29、表中,且剩下的那個表也是 500 萬條(實際意思就是怎樣把一個表中的數(shù)據(jù)的分為兩個表)分區(qū)表的使用:如果一中的數(shù)據(jù)量特別大,通常可以采用分區(qū)表的方式來存放數(shù)據(jù);首先建立不同的表空間 A 和 B(不同的表空間指向不同的數(shù)據(jù)文件),在創(chuàng)建表是使用 partition by range(范圍分區(qū)的意思),將前 500 萬條數(shù)據(jù)指定存放在表空間A 中,將后超出 500 萬條之后的數(shù)據(jù)存放在表空間B 中,以后查詢數(shù)據(jù)如果查詢的范圍500 萬條中,可以指定只查詢 A 中的內(nèi)容,反之則只查詢B 中的內(nèi)容。8.數(shù)據(jù)庫登錄時,一般用戶和管理員用戶的區(qū)別是?一般用戶剛開始創(chuàng)建沒限需要,管理員是一個 DBA 角色,
30、權限很大。9.怎樣對一個用戶?其關鍵字是什么?Oracle 權限分為系統(tǒng)權限和對象權限:系統(tǒng)權限使用grant 權限to 用戶;對象權限使用grant 權限on 資源 to 用戶;1.一句 sql 備份數(shù)據(jù)庫中的一(SQLServer,Oracle)備份某,再次理解為備份表中數(shù)據(jù),之前提到過如何備份數(shù)據(jù):創(chuàng)建表同時數(shù)據(jù):create table 新表名(列名) aect 列名 from 舊表where 條件;如果表已存在,可以向已存在的表中數(shù)據(jù):o 表名(列名) select 列名 from 舊表 where 條件;insert2.Oracle 怎么實現(xiàn)自動增長的Oracle 通過調(diào)用序列對象
31、來實現(xiàn)主鍵自增:在做新增操作時,主鍵列上的值可以使用序列.nextval 來得到一個新生成的值。3.group by 不能和誰連用問題出錯! 估計面試官是理解成 group by 不能和 order by 連用這個老問題。但事實是group by 和 order by 是可以連用的,只是要注意 order by 之后排序的列是有要求的,必須是分組列或者聚組函數(shù)計算后的其他列!4.左外接 右外接left join 左外連接*from 原表 join 新表 on 關聯(lián)關系原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系關聯(lián)到原表的數(shù)據(jù)right join 右外連接原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關
32、系關聯(lián)到新表的數(shù)據(jù)1.oracle 中分頁用的什么?Oracle 使用 rownum 來實現(xiàn)分頁2.rownum 是從 0 還是 1 開始的 ?從 1 開始3.一個主鍵自增的數(shù)據(jù)庫,怎么拿到想要的 id?JDBC:Sement 執(zhí)行器對象能夠通過 getGeneratedKeys()這個方法來獲得自增列的結果集(返回 ResultSet),定位到這個返回的結果集的第一條數(shù)據(jù)(調(diào)用 next() 方法),通過 get(1)這個方法能得到一個類型的自增主鍵值。過程用過嗎?過程 關鍵字是 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段
33、功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。2.sql 優(yōu)化1 可以使用索引2 SQL 語句如果是多表關聯(lián)可以將關聯(lián)條件寫在左側,過濾條件盡量寫在右側3 避免在子查詢語句中使用 in some any all 等關鍵字可以使用多表關聯(lián)替代4 避免使用 like % 寫法,這種寫法或造成全盤掃描like 之后是 字符%如果必須是 like %字符% 可以使用 instr 函數(shù)替代where ename like %E%;where instr(ename,E)0;5 復雜的業(yè)務功能可以使用過程(如果對過程熟悉的話回答)1: 數(shù)據(jù)量比較大的情況下,怎么提高
34、效率問題(其實他想知道 sql 優(yōu)化問題)1 可以使用索引2 SQL 語句如果是多表關聯(lián)可以將關聯(lián)條件寫在左側,過濾條件盡量寫在右側3 避免在子查詢語句中使用 in some any all 等關鍵字可以使用多表關聯(lián)替代4 避免使用 like % 寫法,這種寫法或造成全盤掃描like 之后是 字符%如果必須是 like %字符% 可以使用 instr 函數(shù)替代where ename like %E%;where instr(ename,E)0;5 復雜的業(yè)務功能可以使用過程(如果對過程熟悉的話回答)2: oracle 中用過哪些與時間有關的函數(shù)?怎么查詢每個月第一天的數(shù)據(jù)?add_months
35、(d1,i2)在 d1 時間上增減 i2 個月份months_betn(d1,d2) 計算兩個日期之間的月份last_day(d1) 得到給定日期所在月份的最后一天是幾號next_day(d1,周期)得到給定日期 d1 之后指定的周期是哪天 周期可以是:日一二.六查詢給定日期所在月份的第一天,可以使用trunc(d1,mm) 得到,trunc 能夠精確日期,第二個參數(shù)mm表示精確到當前的月份,天數(shù)默認為 1第一天也就是該月3: oracle 中還用過哪些函數(shù)?length()substr()upper()lower()initcap()to_char()to_date()max() min()
36、 sum()avg()count()wm_concat()過程會么?具體說一下4:過程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。5: 數(shù)據(jù)庫用過哪些?Oracle6: 怎么加載的驅(qū)動?JDBC 中有三種方式:/最常用1Class.forName(com.jdbc.Driver);2new com.jdbc.Driver();3System.setProperty(jdbc.drivers,com.jdbc.Driver);7: Oracl
37、e 分頁用什么?rownum 和查詢語句嵌套的形式比如:selecta.* from( select rownum rw,列名 from 表 where 條件 ) awhere a.rwx and a.rw=y;8: Oracle - 如果一有 id name age三個字段 怎么給他們用 age 分組,id 排序和計算人數(shù)?select count(id) 人數(shù) from 表名 group by age order by max(id);1.一個 table 如何得到第二行第三列的值?在 JDBC 中,可以通過 ResultSet 對象得到:ResultSet rs 對象中的方法 absol
38、ute(2)能夠定位到第二條數(shù)據(jù),rs.getObject(3)可以得到第 2 條第 3 列的值.1.oracle 和端oracle:1521: 33062.觸發(fā)器過程過程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用也沒有參數(shù),在滿足條件時觸發(fā):觸發(fā)條件:在對某個表做 insert 、 update 或 delete 操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行6.你在之前的項目中有寫過第調(diào)用的
39、接口嗎這個為什么在 CoreJava 里?這里的接口不是erface!強烈 BS!1.數(shù)據(jù)庫優(yōu)化對于 Oracle 數(shù)據(jù)庫可以使用表空間,將項目中的數(shù)據(jù)庫用戶所有的表存放在一個單獨的表空間對應的數(shù)據(jù)文件中,能夠避免多個用戶而且方便數(shù)據(jù)備份。同一數(shù)據(jù)文件帶來的資源爭用問題;可以使用為一些表創(chuàng)建適當?shù)囊晥D,在一些統(tǒng)計功能中 SQL 可能比較固定而且復雜,視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護隱私。使用執(zhí)行效率。過程完成復雜操作,能夠避免 JAVA 與數(shù)據(jù)庫之間的多次交互從而提高程序?qū)τ诮?jīng)常的表中的字段可以適當創(chuàng)建索引(適合用在查詢多增刪改少的表中)。2.過程 視圖過
40、程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。視圖 View : 將編譯后的 SQL 語句保存在數(shù)據(jù)庫中,這就是視圖。視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護隱私。3.oracle刪除第 5 條到第 10 條數(shù)據(jù)delect from 表 where id in(select id from(select rownum rw,id from 表 where 條件 ) awhere a.rw betn 5 and
41、 10 ) ;查詢 5-10 條會,刪除不就是加上個 delete from where 嗎!不同表空間的表?4.oracleOracle 中的表不是基于表空間的,而是基于用戶(這里的用戶實際上是一個跟用戶同名的“方案 schema”對象 最好強調(diào)一下表名 這種帶有前綴的寫法,不同表空間的表實際上是使用 schema.比如在etoak 用戶(默認表空間為 A)中要scott 用戶(默認表空間為 B) 中的表:select 列名 from scott.emp;只需要將用戶對象的默認表空間指向其他表空間即可,當前前提是 etoak 用戶必須限能夠到 scott 中的 emp 表,權限可以讓 eto
42、ak 是一個 dba 用戶,或者通過 scott 或管理員scott.emp to etoak;:grant select on5.mybatis 和 jdbcJDBC 是 JAVA數(shù)據(jù)庫的技術,代碼靈活但是代碼量較大;mybatis 底層封裝了 JDBC 是一個半自動的框架,相對于 JDBC 來講代碼量較少,效率不如 JDBC 快。怎么查詢所有表名;6.上數(shù)據(jù)庫后:第式: show tables;第二種查詢方式:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 數(shù)據(jù)庫名一個年級有多個班級,一個班級有若干
43、人,如果查高一年級班級人數(shù)最多的該怎7.么實現(xiàn)年級表gidname高一10高二20高三30班級表人數(shù)idnamegid一班11020二班21025一班32010三班41025第一種需求,查詢出符合條件的班級人數(shù)最多是多少,然后查詢出班級人數(shù)與之相等的班級select * from 班級表 where 人數(shù) in( select max(人數(shù)) from 班級表 where gid=(select gid from 年級表 where name=高一);第二種需求,只查詢班級人數(shù)最多是多少select max(人數(shù)) from 班級where gid=(select gid from 年級 wh
44、ere name=高一);* 第二種需求利用聚組函數(shù)直接過濾高一班級中最多的班級人數(shù),這兩種做法根據(jù)需求來8.CRUD 分別是什么意思CRUD 是指增加(Create)、幾個單詞的首字母簡寫(Retrieve)(重新得到數(shù)據(jù))、更新(Update)和刪除(Delete)1.往一個空表里面插 10 條數(shù)據(jù),插到第五條報出異常,問這時候表里了幾條數(shù)據(jù)?如果開啟事務,則表中沒有數(shù)據(jù)2.手寫一份 JDBC 查詢還記得如何使用 ResultSetMetaData 對象嗎?實現(xiàn)層與實體類的解耦!public List readEmpByMap() tryconn = MCF.getConnection(o
45、racle);se = conn.createSement();rs = se.executeQuery(select * from emp);ResultSetMetaData rsmd = rs.getMetaData();List list = new ArrayList(); /每一條就是一個 List 元素while(rs.next()Map map = new HashMap(); /將行中所有的列以及對應的值存放在鍵值對集合中eger: 用來主鍵 : 列索引/ Object : 對應列的值/進入 while()循環(huán)說明遍歷的是當前一條for(i =1;i=rsmd.getColu
46、mnCount();i+)/進入for 循環(huán) 說明得到的時當前行上當前列的數(shù)據(jù)map.put(i, rs.getObject(i);list.add(map);return list;catch(Exception e)e.prStackTrace();finally/MCF.close(conn,se,rs);return null;1: oracle 數(shù)據(jù)庫的工具如何導出表結構,菜單是哪個?PL/SQL Developer 工具:Tools - exports Tables .或者Tools - export User Objects .回答這個問題,可以跟他談談命令導出,命令導出的形式更
47、全面:在命令行中使用命令導出,(cmd 直接輸入無需進入 Oracle)Oracle:導出:exp 用戶名/口令數(shù)據(jù)庫標識 file=文件.dmp導入:用戶名/口令數(shù)據(jù)庫標識 file=文件.dmpfull=yimp:導出:數(shù)據(jù)源名 文件.sqldump -uroot -p導入:數(shù)據(jù)源名 select date_format(now(),%Y-%m-%d); select time_format(now(),%H-%i-%S);*to_date(str,format)STR_TO_DATE(str,format) 函數(shù)名稱不同:ORACLE: SELECT to_date(2009-3-6,y
48、yyy-mm-dd) VAULE FROM DUAL:SELECT STR_TO_DATE(2004-03-01, %Y-%m-%d) VAULE(這道題目主要羅列幾個函數(shù)即可,因為函數(shù)不同的太多.)#3: 表對象和表空間的區(qū)別首先要弄明白兩個概念:表對象指的是所有建立起來或者的數(shù)據(jù)表。表空間是個邏輯概念,本質(zhì)上是一個或者多個數(shù)據(jù)文件的集合。數(shù)據(jù)文件是一個物理概念,是具體數(shù)據(jù)的物理文件。一個數(shù)據(jù)文件只能屬于一個表空間.一個表空間可以包含一個或多個數(shù)據(jù)文件,一個數(shù)據(jù)庫由多個表空間組成,但是一個表空間只能屬于一個數(shù)據(jù)庫。oracle 中的 schema(可以叫它:方案)就是指一個用戶下所有對象的集
49、合,schema 本身不能理解成一個對象,oracle 并沒有提供創(chuàng)建 schema 的語法.那么表和表空間之間關系?schema 與表空間區(qū)別?在數(shù)據(jù)庫創(chuàng)建一個用戶后,并給以這個用戶創(chuàng)建表或者其他對象的權限,這時還沒有模式存在。只有當這個用戶利用這些權限創(chuàng)建了屬于自己的第一個對象時,oracle 為這個用戶創(chuàng)建一個 schema,來容納這個對象以及以后創(chuàng)建的對象。同一個 schema 的 objects(主要是表)可以在不同的 tablespace(表空間)中,同樣,tablespace 也可以不同 schema的 objects。schema 就是一個用戶和它下面的所有對象,而表空間邏輯上
50、用來放 objects,物理上對應磁盤上的數(shù)據(jù)文件或者 設備。4: 觸發(fā)器和過程過程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用,在滿足條件時觸發(fā):觸發(fā)條件:在對某個表做 insert 、 update 或 delete 操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行5: SQL 的順序1、from 子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù)2、where 子句基于指定的條件對行進行篩選3、group by 子
51、句將數(shù)據(jù)劃分為多個分組4、使用 having 子句篩選分組6、計算所有的表達式7、select 的字段8、使用 order by 對結果集進行排序。6: Oracle 和的端Oracle ;1521: 3306常用的還有:http: 80tomcat: 80807: 分區(qū)表數(shù)據(jù)庫中某些表數(shù)據(jù)量非常大(Oracle 對這個“大”的定義是超過 2GB),可以將表進行分區(qū),每個分區(qū)都是獨立的段,存放在不同的表空間中,這種數(shù)據(jù)存放在不同表空間中的表就是一種分區(qū)表。分區(qū)提供以下優(yōu)點:(這是朝著 DBA 方向發(fā)展的不歸路)(1)由于將數(shù)據(jù)分散到各個分區(qū)中,減少了數(shù)據(jù)損壞的可能性;(2)可以對單獨的分區(qū)進行
52、備份和恢復;(3)可以將分區(qū)到不同的物理磁盤上,來分散 IO;(4)提高可管理性、可用性和性能。8: 備份數(shù)據(jù)第使用式:通過導入導出命令備份數(shù)據(jù)庫中全部數(shù)據(jù)(Oracle 用exp 命令導出數(shù)據(jù),dump 命令備份數(shù)據(jù))第二種方式: 使用工具導出數(shù)據(jù)PL/SQL Developer 的菜單Tools=Export User Objects 中出來一個框界面,然后框選要到處的 Oracle 數(shù)據(jù)庫對象,包括表,序列,等,并指定導出的文件名稱過程,視圖,函數(shù)等9: 索引* 索引:類似于一個目錄,但是不只是目錄,能夠幫助提高查詢效率.語句:create index 索引名 on 表名(列名,列名);
53、unique index唯一性索引bitmap index位圖索引create index 索引名 on 表名(函數(shù)名(列名);函數(shù)索引* 適用?* 經(jīng)常被查詢的列* 如果該列上的值很少有空值 很少有重復的值可以使用索引01:過程、視圖、觸發(fā)器過程 procedure:在服務器端,能夠被多個程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回數(shù)據(jù)。視圖 View : 將編譯后的 SQL 語句保存在數(shù)據(jù)庫中,這就是視圖。一般來講視圖不能創(chuàng)建索引(因為視圖本身只是一個編譯后的查詢語句,索引只能創(chuàng)建在表
54、的列上),但是 Oracle 提供了一種物化視圖可以創(chuàng)建索引。(物化視圖:雖然叫視圖但是實際類似于表,將數(shù)據(jù)暫時并在基表刷新或者提交數(shù)據(jù)時刷新本視圖以便與基表數(shù)據(jù)保持一致。)觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用,在滿足條件時觸發(fā):觸發(fā)條件:在對某個表做 insert 、 update 或 delete 操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行02:oracle 數(shù)據(jù)庫啟動必須啟動哪些服務服務(Listener 結尾比如: OracleOraDb11g_home1TNSListener該服務允許第-比如 PL/SQL developer數(shù)據(jù)庫)實例服務(Servi才能使用相應的數(shù)據(jù)
55、庫實例)實例名 比如 : OracleServiceORCL 必須啟用該服務數(shù)據(jù)庫03:數(shù)據(jù)庫優(yōu)化對于 Oracle 數(shù)據(jù)庫可以使用表空間,將項目中的數(shù)據(jù)庫用戶所有的表存放在一個單獨的表空間對應的數(shù)據(jù)文件中,能夠避免多個用戶而且方便數(shù)據(jù)備份。同一數(shù)據(jù)文件帶來的資源爭用問題;可以使用為一些表創(chuàng)建適當?shù)囊晥D,在一些統(tǒng)計功能中 SQL 可能比較固定而且復雜,視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護隱私。使用執(zhí)行效率。過程完成復雜操作,能夠避免 JAVA 與數(shù)據(jù)庫之間的多次交互從而提高程序?qū)τ诮?jīng)常的表中的字段可以適當創(chuàng)建索引(適合用在查詢多增刪改少的表中)。04:數(shù)據(jù)庫類
56、型(引擎類型)在缺省情況下,支持三個引擎:ISAM、MYISAM 和 HEAP。另外兩種類型 INNODB 和 BERKLEY(BDB)05:如何獲取一個表第 5 條Oracle: rownum 重命名+嵌套的形式不支持Minus 可以使用連接的形式來實現(xiàn):t:tidtname112013小X24小 Y35小Z16肯定不能通過主鍵=5 的方式來獲得,但是可以通過兩個 SQL 語句獲得如下數(shù)據(jù):select tid,tname from t limit 5;select tid,tname from t limit 4;將這兩個結果做關聯(lián)并且將能夠關聯(lián)的數(shù)據(jù)篩選掉注意使用到了 not exists:select a.* from(select tid,tname from t limit 5) awhere not exists( select b.* from(select tid,tname from t limit 4) bwhere a.tid=b.tid);06 : 事務的特性事務四大特性(簡稱 ACID)原子性(A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 便宜門店轉(zhuǎn)讓合同范本
- 促銷返利合同范本
- 個體醫(yī)療機構年度工作總結報告
- 個人工作自我鑒定簡短
- 勞務公司派遣員工合同范本
- 單位對外投資合同范本
- 三八節(jié)教師演講稿
- 工業(yè)鍋爐司爐模考試題及答案
- 高壓電工(運行)習題+參考答案
- 供貨款合同范本
- 03D501-1 防雷與接地安裝
- IPQC入職崗位培訓
- 牛津自然拼讀
- 2023年福建三明市沙縣區(qū)園區(qū)建設發(fā)展集團有限公司招聘筆試題庫含答案解析
- 2023年醫(yī)學考研-同等學力考研西醫(yī)綜合歷年考試真題試卷摘選答案
- 王淑玲《做最好的自己》讀書分享
- TCADERM 5015-2023 救護直升機院際患者轉(zhuǎn)運規(guī)范
- 肺動脈瓣狹窄的超聲演示
- 部編版-九年級下冊語文第一單元測試卷-含答案
- 分布式光伏電站施工
- 水庫清淤工程可行性研究報告
評論
0/150
提交評論