版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、38.表 score : 用一條 SQL 語句查詢每門課程都大于 80 分的學(xué)生姓名name kechengfenshu語文81數(shù)學(xué)75語文76.準(zhǔn)備 SQL:create tablescore(idprimarykeyauto_increment,name varchar(20),subjectvarchar(20),score);直接分組求最小科目分?jǐn)?shù)大于 80:select name from score group byname havingmin(fenshu)80 ;39.基于下面的表結(jié)構(gòu)回答問題Table EMPLOYEES Structure:EMPLOYEE_ID NUMBr
2、imaryKey,_NAME VARCHAR2(25),LAST_NAME VARCHAR2(25),Salary number(8,2),HireDate DATE,Departmentid number(2)Table Departments Structure:Departmentid number(2) PrimaryKey,DepartmentName VARCHAR2(25)(1)基于上述 EMPLOYEES 表寫出查詢:寫出雇傭日期在今年的,或者工資在1000,3000之間的,或者員工(last_name)以O(shè)bama打頭的所有員工,寫出這些員工的全部個(gè)人信息。selectEMP
3、LOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,DepartmentidfromEMPLOYEESwhereto_char(HireDate,yyyy )=to_char(sysdate,yyyy)or (sal betn 1000 and 3000)orLAST_NAME like Obama%;(2)基于上述 EMPLOYEES 表寫出查詢:查詢部門平均工資大于 1800 元的部門的所有員工,列出這些員工的全部個(gè)人信息selectEMPLOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,Departmentidfrom EMP
4、LOYEESwhereDepartmentid in(select Departmentidfrom EMPLOYEESgroup byDepartmentidhavingavg(sal)1800);(3)基于上述 EMPLOYEES 表寫出查詢:查出個(gè)人工資高于其所在部門平均工資的員工,列出這些員工的全部個(gè)人信息及該員工高處部門平均工資百分比selectEMPLOYEE_ID,_NAME,LAST_NAME,Salary,HireDate,Departmentid,Salary /avgDeptSal*100|%百分比from(select e.*,(select avg(Salary )f
5、rom EMPLOYEES where Departmentid =e.Departmentid)avgDeptSalfrom EMPLOYEES e );40.根據(jù)題目信息回答問題設(shè)某工商業(yè)數(shù)據(jù)庫 3 個(gè)實(shí)體集:一是“商品”實(shí)體集,屬性有商品號、商品名、規(guī)格、單價(jià)等二是“商店”實(shí)體集,屬性有商店號、商店名、地址等三是“供應(yīng)商”實(shí)體集,屬性有供應(yīng)商、供應(yīng)商名、地址等供應(yīng)商與商品之間存在“供應(yīng)”關(guān)系,每個(gè)供應(yīng)商可以供應(yīng)多品,每種商品可向多個(gè)供應(yīng)商訂購,每個(gè)供應(yīng)商供應(yīng)每種商品有個(gè)月供應(yīng)量;商店與商品之間存在“銷售”聯(lián)系,每個(gè)商店可銷售多種商品,每種商品可在多個(gè)商店銷售,每個(gè)商店銷售每種商品有個(gè)月計(jì)
6、劃數(shù)(1)試畫出 ER 圖,并在圖上注明屬性、聯(lián)系的類型(2)將 ER 圖轉(zhuǎn)換成關(guān)系模式集,并每個(gè)關(guān)系模式的主鍵和外鍵商品(商品號,商品名,規(guī)格,單價(jià))供應(yīng)商(供應(yīng)商,供應(yīng)商名,地址)供應(yīng)關(guān)系(供應(yīng)商,商品號,數(shù)量)商店(商店,商店名,地址)銷售關(guān)系(商品,商品號,計(jì)劃數(shù))* 關(guān)系模式集與 ER 實(shí)體圖之間的轉(zhuǎn)換,就是構(gòu)建底層數(shù)據(jù)庫的基礎(chǔ)1.過程了解多少?寫過嗎?過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。需要先用工具(Oracle 用
7、 PLSQLDeveloper用Navicat)寫好某個(gè)特定功能的過程,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,列名 from 表 where 條件 ) awhere a.rwx and a.rw=y;1.Oracle 和的區(qū)別 Oracle 使用 rownum 來實(shí)現(xiàn)分頁,使用 limit 實(shí)現(xiàn)分頁
8、 Oracle 沒有主鍵自增特性,可以使用調(diào)用序列的方式來實(shí)現(xiàn)主鍵自增;可以在主鍵列之后添加 auto_increment 設(shè)置自增特性O(shè)racle 有表空間的概念,沒有表空間Oracle 的分組函數(shù)中 select 之后不能直接寫組的其他列;如果沒有聚組函數(shù)則可以寫其他列Oracle 的表存放在用戶(其實(shí)是 schema 對象)所屬的表空間的數(shù)據(jù)文件中,的表存放在某個(gè) database 中(一個(gè) root 用戶下可以有很多 database) Oracle 中的一些函數(shù)和也不一樣 Oracle 中的字符類型可以使用 varchar2不能使用該類型1:drop 和 truncate 的區(qū)別?d
9、rop 是刪除表,不會表原先占有的內(nèi)存空間;truncate 是截?cái)啾?,能夠表中?shù)據(jù)所占有的內(nèi)存空間,保留表結(jié)構(gòu);如果使用 drop table 表名 purge;語句則能夠直接表占有的內(nèi)存空間。2:一條 SQL 怎么做 update or insert? Oracle 中,要實(shí)現(xiàn)update/insert 功能,要用到Merge o 來實(shí)現(xiàn)(Oracle 9i 引入的功能),其語法如下:MERGEO 表名 別名 1USING (表|視圖|查詢語句) 別名 2ON (關(guān)聯(lián)關(guān)系)WHEN MATCHED THENUPDATE 表名SET col1 = col_val1,col2 = col_va
10、l2WHEN NOT MATCHED THENINSERT (column_list) VALUES(column_values);有一個(gè)表T,有兩個(gè)字段a、b,想在表T 中做Insert/Update,如果條件滿足,則更新T 中 b 的值,否則在 T 中一條。MERGE O T T1USING (SELECT 1001 AS a,2 AS b FROM dual) T2 ON ( T1.a=T2.a)WHEN MATCHED THENUPDATE SET T1.b = T2.bWHEN NOT MATCHED THENINSERT (a,b) VALUES(T2.a,T2.b);3:說說數(shù)據(jù)
11、庫三大范式是什么?第一范式: 數(shù)據(jù)表中的字段不可再分假設(shè)有一users:,三個(gè)字段。但是又可以拆分為 固定,號,家庭住址等,如果按照之前的設(shè)計(jì),這個(gè)列上的數(shù)據(jù)可能會很復(fù)雜(既可以填又可以填寫家庭住址登),這種表的設(shè)計(jì)就不符合第一范式的要求。第一范式是數(shù)據(jù)庫設(shè)計(jì)必須遵循的原則!第二范式:在第一范式的基礎(chǔ)上, 需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵而言)假設(shè)有一張訂單表:訂單,商品,商品名稱,單價(jià),數(shù)量,下單時(shí)間.鍵(一個(gè)訂單可以有多個(gè)商品),但是表中的商品名稱和單價(jià)跟訂單沒有任何關(guān)系,只跟商品有關(guān),下單時(shí)間跟商品信息也沒有關(guān)系,而是跟訂單有關(guān)。則可
12、以將商品的信息單獨(dú)設(shè)計(jì)成單獨(dú)的商品表,將訂單信息抽象成獨(dú)立的表,而訂單跟商品又可以是一個(gè)關(guān)聯(lián)的橋表??梢孕薷臑椋河唵伪恚?訂單,下單時(shí)間.商品表: 商品,商品名稱,單價(jià).商品訂單表:訂單,商品,數(shù)量這樣在每個(gè)表中的字段跟主鍵都有唯一的關(guān)系(商品訂單表的數(shù)量依賴于訂單和商品!)第三范式:確保每列都和主鍵列直接相關(guān),而不是間接相關(guān)假設(shè)有員工表和部門表,員工表中有一個(gè)列為部門列,能夠跟部門表中的部門列對應(yīng),分析這,訂單和商品可以設(shè)計(jì)成一個(gè)聯(lián)合主那么就不能在員工表中再設(shè)計(jì)一些部門信息的列(比如在員工表中添加部門名 部門地點(diǎn)登),這就是第三范式的要求!1.當(dāng) JDBC 執(zhí)行失敗時(shí)往往需要回滾操作,請以
13、user(idnumber(11),name varchar2(20)為例,包含 insert 語句的 Java 代碼用戶表示出現(xiàn)異常時(shí)的回滾動作publicaddUser(User us)Connection conn = null;Sement se = null;tryClass.forName(oracle.jdbc.driver.OracleDriver);conn = DriverManager.getConnection(jdbc:oracle:thinlocalhost:1521:orcl,scott,tiger);mit(false);/ 開啟事務(wù)/需要user_seq 系列
14、對象i = se.executeUpdate(insertouser(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!=null)se.close();catch(Exception ec)tryif(conn!=null)conn.close();catch(Exception ec)2.請分別
15、寫出 Oracle 和限制返回十條的查詢語句Oracle:select 列名 from 表名 where rownum開始位置 and a.rw=(開始位置+10);*實(shí)際是分頁的用法:select 列名 from 表名 limit 10;3.寫出創(chuàng)建 Oracle JDBC 連接的過程public sic Connection getConnection()Class.forName(oracle.jdbc.driver.OracleDriver);conn = DriverManager.getConnection(jdbc:oracle:thinlocalhost:1521:orcl,s
16、cott,tiger);return conn;4.按部分分組,按創(chuàng)建時(shí)間反向排序 user(標(biāo)識,部門,創(chuàng)建時(shí)間)查詢 SQL 的語句select 部門,wm_concat() 部門中員工 from usergroup by 部門 order by min(創(chuàng)建時(shí)間) desc ;6.oracle 的過程過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。7. 如何調(diào)用過程?JDBC 中使用 CallableSement 執(zhí)行器對象,通過 e
17、xecute(call過程名(?,?)的方式來調(diào)用;PL/SQL Developer 工具中可以通過declarebegin過程名(參數(shù));end;的方式調(diào)用;8. 游標(biāo)對象怎么用?游標(biāo)是過程體中用來指代一個(gè) ResultSet 查詢結(jié)果的,JDBC 中可以用 ResultSet 表示一個(gè)結(jié)果集,但是過程用的是 cursor(游標(biāo))對象來表示。過程如果需要遍歷/返回一個(gè)查詢結(jié)果,就需要使用游標(biāo)對象。8.【數(shù)據(jù)庫】語文 100 ,數(shù)學(xué) 80,英語 88,語文 72.1.設(shè)計(jì)一,寫出創(chuàng)建表的 sql 語句create table sc(name varchar(16),subject varcha
18、r(16),score number(3);2.查詢出每科成績最高的學(xué)生select sc.* from sc ,(selectsubject,max(score) maxscfrom sc group by subject ) awhere sc.subjeubject and sc.score =a.maxsc;*內(nèi)層嵌套按照學(xué)科分組查詢學(xué)科及對應(yīng)學(xué)科最高的工資,外層級聯(lián) sc 表,如果學(xué)科和成績都跟內(nèi)存查詢相同,則取出該同學(xué)信息3.查詢出平均分在 80 分以上的學(xué)生select name from scgroup by name havingavg(score)80;jdbc 怎樣執(zhí)行
19、sql 語句?1 加載驅(qū)動2 通過驅(qū)動管理對象獲得連接3 獲得執(zhí)行器對象編寫 SQL 語句,JAVA 中用 String 類型表示 SQL4 通過執(zhí)行器執(zhí)行 SQL 語句常用的執(zhí)行 SQL 語句的方法有:execute()(*執(zhí)行 select 語句時(shí)返回 true,因?yàn)?select 能夠返回一個(gè)查詢結(jié)果其令開頭的語句返回 false)executeUpdate()executeQuery()ResultSet5資源1.索過嗎 ? 在什么情況下會導(dǎo)致索引失效 ?用索引還需要注意哪些問題呢?索引分為幾種 ?用過;如果有索引的列空值比較多、重復(fù)數(shù)據(jù)比較多的話索引不起作用。通常索在查詢較多而增刪改
20、較少的表,因?yàn)樗饕龝档驮鰟h改的效率。常用的索引有普通索引、唯一性索引、位圖索引,如果某個(gè)列上經(jīng)常使用函數(shù),還可以建一個(gè)函數(shù)索引。2.like 用過嗎 ?怎么用的?用過;like 常用來實(shí)現(xiàn)模糊查詢,與%和_匹配使用,如果需要匹配特殊字符,則需要使用 esc逃離符。3.union 用過嗎?能聯(lián)合字段嗎? 如果聯(lián)合的信息有空的會怎樣(對應(yīng)的位置是 null)?union 表示聯(lián)合,將多個(gè)查詢結(jié)果聯(lián)為一個(gè)查詢結(jié)果,并且能夠去除重復(fù)數(shù)據(jù)4.sql 語句中怎么判斷一個(gè)字段是不是空 ?與空判斷使用is null或者 isnot null5.左外連接,右外連接,說一下?left join 左外連接*fro
21、m 原表join 新表on 關(guān)聯(lián)關(guān)系原表和新表能夠關(guān)聯(lián)的數(shù)據(jù)+無法通過關(guān)聯(lián)關(guān)系關(guān)聯(lián)到原表的數(shù)據(jù)right join 右外連接原表和新表能夠關(guān)聯(lián)的數(shù)據(jù)+無法通過關(guān)聯(lián)關(guān)系關(guān)聯(lián)到新表的數(shù)據(jù)6.樹形查詢是什么?用過嗎?樹形查詢相當(dāng)于遞歸操作,需要使用 connect by 來實(shí)現(xiàn),簡單來說就是通過某個(gè)作為根節(jié)點(diǎn),一次查找所屬的子節(jié)點(diǎn)。7.在數(shù)據(jù)庫中,例一個(gè)表,數(shù)據(jù)是 1000 萬條,怎樣將其中的 500 萬條放在另一個(gè)表中,且剩下的那個(gè)表也是 500 萬條(實(shí)際意思就是怎樣把一個(gè)表中的數(shù)據(jù)的分為兩個(gè)表)分區(qū)表的使用:如果一中的數(shù)據(jù)量特別大,通??梢圆捎梅謪^(qū)表的方式來存放數(shù)據(jù);首先建立不同的表空間 A
22、和 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ù)庫登錄時(shí),一般用戶和管理員用戶的區(qū)別是?一般用戶剛開始創(chuàng)建沒限需要,管理員是一個(gè) DBA角色,權(quán)限很大。9.怎樣對一個(gè)用戶?其關(guān)鍵字是什么?Oracle 權(quán)限分為系統(tǒng)權(quán)限和對象權(quán)限:系統(tǒng)權(quán)限使用 grant 權(quán)限 to 用戶;對象權(quán)限使用 grant 權(quán)限 on 資源 to
23、用戶;1.一句 sql 備份數(shù)據(jù)庫中的一(SQLServer,Oracle)備份某,再次理解為備份表中數(shù)據(jù),之前提到過如何備份數(shù)據(jù):創(chuàng)建表同時(shí)數(shù)據(jù):create table 新表名(列名) aect 列名 from 舊表where 條件;如果表已存在,可以向已存在的表中數(shù)據(jù):inserto 表名(列名) select 列名from 舊表 where條件;2.Oracle 怎么實(shí)現(xiàn)自動增長的Oracle 通過調(diào)用序列對象來實(shí)現(xiàn)主鍵自增:在做新增操作時(shí),主鍵列上的值可以使用序列.nextval 來得到一個(gè)新生成的值。3.group by 不能和誰連用問題出錯(cuò)! 估計(jì)面試官是理解成 group by
24、 不能和 orderby 連用這個(gè)老問題。但事實(shí)是 group by 和 order by 是可以連用的,只是要注意order by 之后排序的列是有要求的,必須是分組列或者聚組函數(shù)計(jì)算后的其他列!4.左外接 右外接left join 左外連接*from 原表join 新表on 關(guān)聯(lián)關(guān)系原表和新表能夠關(guān)聯(lián)的數(shù)據(jù)+無法通過關(guān)聯(lián)關(guān)系關(guān)聯(lián)到原表的數(shù)據(jù)right join 右外連接原表和新表能夠關(guān)聯(lián)的數(shù)據(jù)+無法通過關(guān)聯(lián)關(guān)系關(guān)聯(lián)到新表的數(shù)據(jù)1.oracle 中分頁用的什么?Oracle 使用 rownum 來實(shí)現(xiàn)分頁2.rownum 是從 0 還是 1 開始的 ?從 1 開始3.一個(gè)主鍵自增的數(shù)據(jù)庫,怎
25、么拿到想要的 id?JDBC:Sement 執(zhí)行器對象能夠通過 getGeneratedKeys()這個(gè)方法來獲得自增列的結(jié)果集(返回 ResultSet),定位到這個(gè)返回的結(jié)果集的第一條數(shù)據(jù)(調(diào)用next()方法),通過 get(1)這個(gè)方法能得到一個(gè)類型的自增主鍵值。過程用過嗎?1.過程 關(guān)鍵字是 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。2.sql 優(yōu)化1 可以使用索引2 SQL 語句如果是多表關(guān)聯(lián)可以將關(guān)聯(lián)條件寫在左側(cè),過濾條件盡量
26、寫在右側(cè)3避免在子查詢語句中使用 in some any all 等關(guān)鍵字可以使用多表關(guān)聯(lián)替代4避免使用 like % 寫法,這種寫法或造成全盤掃描like 之后是 字符%如果必須是 like %字符% 可以使用instr 函數(shù)替代where ename like %E%;where instr(ename,E)0;5復(fù)雜的業(yè)務(wù)功能可以使用過程(如果對過程熟悉的話回答)1: 數(shù)據(jù)量比較大的情況下,怎么提高效率問題(其實(shí)他想知道 sql優(yōu)化問題)1 可以使用索引2 SQL 語句如果是多表關(guān)聯(lián)可以將關(guān)聯(lián)條件寫在左側(cè),過濾條件盡量寫在右側(cè)3避免在子查詢語句中使用 in some any all 等關(guān)
27、鍵字可以使用多表關(guān)聯(lián)替代4避免使用 like % 寫法,這種寫法或造成全盤掃描like 之后是 字符%如果必須是 like %字符% 可以使用instr 函數(shù)替代where ename like %E%;where instr(ename,E)0;5復(fù)雜的業(yè)務(wù)功能可以使用過程(如果對過程熟悉的話回答)2: oracle 中用過哪些與時(shí)間有關(guān)的函數(shù)?怎么查詢每個(gè)月第一天的數(shù)據(jù)?add_months(d1,i2)在 d1 時(shí)間上增減 i2 個(gè)月份months_betn(d1,d2)計(jì)算兩個(gè)日期之間的月份last_day(d1)得到給定日期所在月份的最后一天是幾號next_day(d1,周期)得到給
28、定日期 d1 之后指定的周期是哪天周期可以是:日一二.六查詢給定日期所在月份的第一天,可以使用trunc(d1,mm)得到,trunc 能夠精確日期,第二個(gè)參數(shù)mm表示精確到當(dāng)前的月份,天數(shù)默認(rèn)為 1 也就是該月第一天3: oracle 中還用過哪些函數(shù)?length()substr()upper()lower()initcap()to_char()to_date()max()min()sum()avg()count()wm_concat()4:過程會么?具體說一下過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像
29、函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?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:Oracle 分頁用什么?rownum 和查詢語句嵌套的形式比如:selecta.* from( select rownum rw,列名 from表 where 條件 ) awhere a.rwx and a.rw=y;8:
30、Oracle - 如果一有 id name age三個(gè)字段 怎么給他們用age 分組,id 排序和計(jì)算人數(shù)?select count(id) 人數(shù) from 表名 group by age order bymax(id);1.一個(gè) table 如何得到第二行第三列的值?在 JDBC 中,可以通過 ResultSet 對象得到:ResultSet rs 對象中的方法 absolute(2)能夠定位到第二條數(shù)據(jù),rs.getObject(3)可以得到第 2 條第 3 列的值.1.oracle 和端oracle:1521: 33062.觸發(fā)器過程過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)
31、用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用也沒有參數(shù),在滿足條件時(shí)觸發(fā):觸發(fā)條件:在對某個(gè)表做 insert 、 update 或delete 操作之前或之后(取決于如何實(shí)現(xiàn))自動執(zhí)行6.你在之前的項(xiàng)目中有寫過第調(diào)用的接口嗎這個(gè)為什么在 CoreJava 里?這里的接口不是erface!強(qiáng)烈 BS!1.數(shù)據(jù)庫優(yōu)化對于 Oracle 數(shù)據(jù)庫可以使用表空間,將項(xiàng)目中的數(shù)據(jù)庫用戶所有的表存放在一個(gè)單獨(dú)的表空間對應(yīng)的數(shù)據(jù)文件中,能夠避免多個(gè)用戶同
32、一數(shù)據(jù)文件帶來的資源爭用問題;而且方便數(shù)據(jù)備份??梢允褂脼橐恍┍韯?chuàng)建適當(dāng)?shù)囊晥D,在一些統(tǒng)計(jì)功能中SQL 可能比較固定而且復(fù)雜,視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護(hù)隱私。使用過程完成復(fù)雜操作,能夠避免 JAVA 與數(shù)據(jù)庫之間的多次交互從而提高程序執(zhí)行效率。對于經(jīng)常的表中的字段可以適當(dāng)創(chuàng)建索引(適合用在查詢多增刪改少的表中)。2.過程視圖過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。視圖 View :將編譯后
33、的 SQL 語句保存在數(shù)據(jù)庫中,這就是視圖。視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護(hù)隱私。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 10 ) ;查詢 5-10 條會,刪除不就是加上個(gè) delete from where 嗎!4.oracle不同表空間的表?Oracle 中的表不是基于表空間的,而是基于用戶(這里的用戶實(shí)際上是一個(gè)跟用戶同名的“方案 schem
34、a”對象 最好強(qiáng)調(diào)一下)不同表空間的表實(shí)際上是使用schema.表名 這種帶有前綴的寫法,比如在 etoak 用戶(默認(rèn)表空間為 A)中要scott 用戶(默認(rèn)表空間為 B) 中的表:select 列名 from scott.emp;只需要將用戶對象的默認(rèn)表空間指向其他表空間即可,當(dāng)前前提是 etoak 用戶必須限能夠到 scott 中的 emp 表,權(quán)限可以讓 etoak 是一個(gè) dba 用戶,或者通過 scott 或管理員:grant select on scott.emp to etoak;5.mybatis 和 jdbcJDBC 是 JAVA數(shù)據(jù)庫的技術(shù),代碼靈活但是代碼量較大;myb
35、atis 底層封裝了 JDBC 是一個(gè)半自動的框架,相對于 JDBC來講代碼量較少,效率不如 JDBC 快。6.怎么查詢所有表名;上數(shù)據(jù)庫后:第式: show tables;第二種查詢方式:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 數(shù)據(jù)庫名7.一個(gè)年級有多個(gè)班級,一個(gè)班級有若干人,如果查高一年級班級人數(shù)最多的該怎么實(shí)現(xiàn)年級表gidname10高一20高二30高三班級表idnamegid人數(shù)1一班10202二班10253一班20104三班1025第一種需求,查詢出符合條件的班級人數(shù)最多是多少,然后查
36、詢出班級人數(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 年級 where name=高一);* 第二種需求利用聚組函數(shù)直接過濾高一班級中最多的班級人數(shù),這兩種做法根據(jù)需求來8.CRUD 分別是什么意思CRUD 是指增加(Create)、(Retrieve)(重新得到數(shù)據(jù))、更新(Update)和
37、刪除(Delete)幾個(gè)單詞的首字母簡寫1.往一個(gè)空表里面插 10 條數(shù)據(jù),插到第五條報(bào)出異常,問這時(shí)候表里了幾條數(shù)據(jù)?如果開啟事務(wù),則表中沒有數(shù)據(jù)2.手寫一份 JDBC 查詢還記得如何使用ResultSetMetaData 對象嗎?實(shí)現(xiàn)層與實(shí)體類的解耦!public List readEmpByMap() tryconn = MCF.getConnection(oracle);se = conn.createSement();rs = se.executeQuery(select * from emp);ResultSetMetaData rsmd = rs.getMetaData();Li
38、st list = new ArrayList(); /每一條就是一個(gè) List 元素while(rs.next()Map map = new HashMap(); /將行中所有的列以及對應(yīng)的值存放在鍵值對集合中/eger: 用來主鍵 : 列索引/ Object : 對應(yīng)列的值/進(jìn)入 while()循環(huán)說明遍歷的是當(dāng)前一條for(i =1;i=rsmd.getColumnCount();i+)/進(jìn)入 for 循環(huán) 說明得到的時(shí)當(dāng)前行上當(dāng)前列的數(shù)據(jù)map.put(i, rs.getObject(i);list.add(map);return list;catch(Exception e)e.pr
39、StackTrace();finally/MCF.close(conn,se,rs);return null;1: oracle 數(shù)據(jù)庫的工具如何導(dǎo)出表結(jié)構(gòu),菜單是哪個(gè)?PL/SQL Developer 工具:Tools - exports Tables .或者Tools - export User Objects .回答這個(gè)問題,可以跟他談?wù)劽顚?dǎo)出,命令導(dǎo)出的形式更全面:在命令行中使用命令導(dǎo)出,Oracle:(cmd 直接輸入無需進(jìn)入 Oracle)導(dǎo)出:exp 用戶名/口令數(shù)據(jù)庫標(biāo)識 file=文件.dmp導(dǎo)入:imp用戶名/口令數(shù)據(jù)庫標(biāo)識 file=文件.dmpfull=y:導(dǎo)出:du
40、mp -uroot -p數(shù)據(jù)源名 文件.sql導(dǎo)入:dump -uroot -p數(shù)據(jù)源名 文件.sql#2:和 oracle 有哪些自己特有的函數(shù),有沒有用過,sql 有什么區(qū)別*SUBSTR(abcd,2,2)substring(abcd,2,2) 函數(shù)名稱不同:ORACLE: select substr(abcd,2,2) value fromdual: select substring(abcd,2,2) value* nvl(u._address, 10)IFNULL(u._address, 10)或ISNULL(u._address)函數(shù)名稱不同(根據(jù)不同的作用進(jìn)行選擇):ORACL
41、E: select u._address, nvl(u._address, 10)value from sd_usr u(如果 u._address 是 NULL,就在 DB 中用 10 替換其值): select u._address, IFNULL(u._address, 10)value from sd_usr u(如果 u._address 是 NULL,顯示結(jié)果中是 10,而不是在 DB 中用 10 替換其值)select u._address, ISNULL(u._address) value fromsd_usr u(如果 u._address 是 NULL, 就顯示 1,否則就
42、顯示 0)* ADD_MONTHS(sysdate, 2) DATE_ADD(sysdate(),erval2 month) 函數(shù)名稱不同:ORACLE: SELECT ADD_MONTHS(sysdate, 2) as valuefrom DUAL;: SELECT DATE_ADD(sysdate(),erval2month) as value from DUAL;語法DATE_ADD(date,ERVAL expr type)date 參數(shù)是合法的日期表達(dá)式。expr 參數(shù)是您希望添加的時(shí)間間隔。 type 類型: dayk month year 等* 類型轉(zhuǎn)換函數(shù) TO_CHAR(SQ
43、LCODE) date_format/time_format 函數(shù)名稱不同Oracle:select to_char(sysdate,yyyy-mm-dd)from dual;Oracle:select to_char(sysdate,hh24-mi-ss)from dual;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,yyyy-mm-
44、dd)VAULE FROM DUAL:SELECT STR_TO_DATE(2004-03-01,%Y-%m-%d) VAULE(這道題目主要羅列幾個(gè)函數(shù)即可,因?yàn)楹瘮?shù)不同的太多.)#3: 表對象和表空間的區(qū)別首先要弄明白兩個(gè)概念:表對象指的是所有建立起來或者的數(shù)據(jù)表。表空間是個(gè)邏輯概念,本質(zhì)上是一個(gè)或者多個(gè)數(shù)據(jù)文件的集合。數(shù)據(jù)文件是一個(gè)物理概念,是具體數(shù)據(jù)的物理文件。一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間.一個(gè)表空間可以包含一個(gè)或多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)庫由多個(gè)表空間組成,但是一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫。oracle 中的 schema(可以叫它:方案)就是指一個(gè)用戶下所有對象的集合,schema
45、本身不能理解成一個(gè)對象,oracle 并沒有提供創(chuàng)建 schema 的語法.那么表和表空間之間關(guān)系?schema 與表空間有什么區(qū)別?在數(shù)據(jù)庫創(chuàng)建一個(gè)用戶后,并給以這個(gè)用戶創(chuàng)建表或者其他對象的權(quán)限,這時(shí)還沒有模式存在。只有當(dāng)這個(gè)用戶利用這些權(quán)限創(chuàng)建了屬于自己的第一個(gè)對象時(shí),oracle 為這個(gè)用戶創(chuàng)建一個(gè)schema,來容納這個(gè)對象以及以后創(chuàng)建的對象。同一個(gè) schema 的objects(主要是表)可以在不同的 tablespace(表空間)中,同樣,tablespace 也可以不同 schema 的 objects。schema 就是一個(gè)用戶和它下面的所有對象,而表空間邏輯上用來放 obj
46、ects,物理上對應(yīng)磁盤上的數(shù)據(jù)文件或者設(shè)備。4: 觸發(fā)器和過程過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用,在滿足條件時(shí)觸發(fā):觸發(fā)條件:在對某個(gè)表做 insert 、 update或delete 操作之前或之后(取決于如何實(shí)現(xiàn))自動執(zhí)行5: SQL 的順序1、from 子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù)2、where 子句基于指定的條件對行進(jìn)行篩選3、group by 子句將數(shù)據(jù)劃分為多個(gè)分
47、組4、使用 having 子句篩選分組6、計(jì)算所有的表達(dá)式7、select 的字段8、使用 order by 對結(jié)果集進(jìn)行排序。6:Oracle 和的端Oracle;1521:3306常用的還有:http: 80tomcat: 80807:分區(qū)表數(shù)據(jù)庫中某些表數(shù)據(jù)量非常大(Oracle 對這個(gè)“大”的定義是超過 2GB),可以將表進(jìn)行分區(qū),每個(gè)分區(qū)都是獨(dú)立的段,存放在不同的表空間中,這種數(shù)據(jù)存放在不同表空間中的表就是一種分區(qū)表。分區(qū)提供以下優(yōu)點(diǎn):(這是朝著 DBA 方向發(fā)展的不歸路)8: 備份數(shù)據(jù)第式: 通過導(dǎo)入導(dǎo)出命令備份數(shù)據(jù)庫中全部數(shù)據(jù)(Oracle 用exp 命令導(dǎo)出數(shù)據(jù)使用dump 命
48、令備份數(shù)據(jù))第二種方式: 使用工具導(dǎo)出數(shù)據(jù)PL/SQL Developer 的菜單Tools=Export User Objects 中出來一個(gè)框界面,然后框選要到處的 Oracle 數(shù)據(jù)庫對象,包括表,序列,過程,視圖,函數(shù)等等,并指定導(dǎo)出的文件名稱9: 索引* 索引: 類似于一個(gè)目錄,但是不只是目錄,能夠幫助提高查詢效率.由于將數(shù)據(jù)分散到各個(gè)分區(qū)中,減少了數(shù)據(jù)損壞的可能性;可以對單獨(dú)的分區(qū)進(jìn)行備份和恢復(fù);可以將分區(qū)到不同的物理磁盤上,來分散 IO;提高可管理性、可用性和性能。語句:create index 索引名on 表名(列名,列名);uniqueindex唯一性索引bitmapinde
49、x位圖索引create index索引名on 表名(函數(shù)名(列名);函數(shù)索引* 適用?* 經(jīng)常被查詢的列* 如果該列上的值很少有空值很少有重復(fù)的值可以使用索引01:過程、視圖、觸發(fā)器過程 procedure:在服務(wù)器端,能夠被多個(gè)程序調(diào)用的一段 SQL 語句塊。簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段功能,能夠像函數(shù)一樣被程序調(diào)用,但是過程本身沒有返回值,是通過返回參數(shù)的形式返回?cái)?shù)據(jù)。視圖 View :將編譯后的 SQL 語句保存在數(shù)據(jù)庫中,這就是視圖。一般來講視圖不能創(chuàng)建索引(因?yàn)橐晥D本身只是一個(gè)編譯后的查詢語句,索引只能創(chuàng)建在表的列上),但是 Oracle 提供了一種物化視圖可以創(chuàng)建索引。(
50、物化視圖:雖然叫視圖但是實(shí)際類似于表,將數(shù)據(jù)暫時(shí)并在基表刷新或者提交數(shù)據(jù)時(shí)刷新本視圖以便與基表數(shù)據(jù)保持一致。)觸發(fā)器 trigger:一種特殊的過程,不需要調(diào)用,在滿足條件時(shí)觸發(fā):觸發(fā)條件:在對某個(gè)表做 insert 、 update 或delete 操作之前或之后(取決于如何實(shí)現(xiàn))自動執(zhí)行02:oracle 數(shù)據(jù)庫啟動必須啟動哪些服務(wù)服務(wù)(Listener 結(jié)尾比如: OracleOraDb11g_home1TNSListener該服務(wù)允許第-比如 PL/SQL developer數(shù)據(jù)庫)實(shí)例服務(wù)(Servi實(shí)例名比如 :)03:數(shù)據(jù)庫優(yōu)化對于 Oracle 數(shù)據(jù)庫可以使用表空間,將項(xiàng)目中的
51、數(shù)據(jù)庫用戶所有的表存放在一個(gè)單獨(dú)的表空間對應(yīng)的數(shù)據(jù)文件中,能夠避免多個(gè)用戶同一數(shù)據(jù)文件帶來的資源爭用問題;而且方便數(shù)據(jù)備份??梢允褂脼橐恍┍韯?chuàng)建適當(dāng)?shù)囊晥D,在一些統(tǒng)計(jì)功能中SQL 可能比較固定而且復(fù)雜,視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能某些敏感字段保護(hù)隱私。使用過程完成復(fù)雜操作,能夠避免 JAVA 與數(shù)據(jù)庫之間的多次交互從而提高程序執(zhí)行效率。對于經(jīng)常的表中的字段可以適當(dāng)創(chuàng)建索引(適合用在查詢多增刪改少的表中)。04:數(shù)據(jù)庫類型(引擎類型)在缺省情況下,支持三個(gè)引擎:ISAM、MYISAM和 HEAP。另外兩種類型 INNODB 和 BERKLEY(BDB)OracleSer
52、viceORCL 必須啟用該服務(wù)數(shù)據(jù)庫才能使用相應(yīng)的數(shù)據(jù)庫實(shí)例05:如何獲取一個(gè)表第 5 條Oracle: rownum 重命名+嵌套的形式不支持 Minus可以使用連接的形式來實(shí)現(xiàn):t:tidtname11201324小 X35小 Y16小 Z肯定不能通過主鍵=5 的方式來獲得,但是可以通過兩個(gè)SQL 語句獲得如下數(shù)據(jù):select tid,tname from t limit 5;select tid,tname from t limit 4;將這兩個(gè)結(jié)果做關(guān)聯(lián)并且將能夠關(guān)聯(lián)的數(shù)據(jù)篩選掉 注意使用到了 not exists:select a.* from(select tid,tname from t limit 5) awherenotexists(select b.* from(selecttid,tname fromtlimit 4) bwherea.tid=b.tid);06 : 事務(wù)的特性事務(wù)四大特性(簡稱 ACID) 一致性(Consistency):事務(wù)必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性與原子性是密切相關(guān)的。分割的,要么全部完成,要么均不執(zhí)行。原子性(Atomicity):事務(wù)中的全部操作在數(shù)據(jù)庫中是不可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西省2024-2025學(xué)年高三上學(xué)期1月期末化學(xué)試題(含答案)
- 江蘇省揚(yáng)州市2024-2025學(xué)年高二上學(xué)期期末調(diào)研測試歷史試卷(含答案)
- 河北省張家口市橋西區(qū)2024-2025學(xué)年八年級上學(xué)期1月期末英語試卷(含答案無聽力原文及音頻)
- 福建省南平市巨口中學(xué)2020-2021學(xué)年高一語文聯(lián)考試題含解析
- 福建省南平市將口鎮(zhèn)中學(xué)2020年高三語文下學(xué)期期末試題含解析
- 2024高端轎車租賃合規(guī)協(xié)議模板版
- 2024版建筑工程用材租賃合同
- 2024軟件項(xiàng)目聯(lián)合研發(fā)及技術(shù)轉(zhuǎn)讓協(xié)議2篇
- 2024版貨品分期付款買賣合同
- 2025年度KTV場地裝修設(shè)計(jì)與施工合同6篇
- 邁瑞天地人血培養(yǎng)基礎(chǔ)介紹
- 暫態(tài)地電壓局部放電檢測技術(shù)課件
- 220kV變壓器監(jiān)造細(xì)則
- 九宮數(shù)獨(dú)題目200題(附答案)
- 《普通動物學(xué)》課件P脊索動物門(5)鳥綱
- 《色彩基礎(chǔ)知識》PPT課件(詳解)
- 污水管道工程監(jiān)理控制要點(diǎn)
- 潮流能發(fā)電及潮流能發(fā)電裝置匯總
- 課堂教學(xué)能力提升(課堂PPT)
- vienna整流器交錯(cuò)并聯(lián)三相pfc電路
- 哈爾濱師范大學(xué)與堪培拉大學(xué)合作培養(yǎng)
評論
0/150
提交評論