數(shù)據(jù)庫相關內容_第1頁
數(shù)據(jù)庫相關內容_第2頁
數(shù)據(jù)庫相關內容_第3頁
數(shù)據(jù)庫相關內容_第4頁
數(shù)據(jù)庫相關內容_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

<!—2016/8/13—>

38.表score:用一條SQL語句查詢每門課程都大于80分的學生姓

namekechengfenshu

張三語文81

張三數(shù)學75

李四語文76

準備SQL:

createtablescore(idintprimarykey

auto_increment,namevarchar(20),subjectvarchar(20),score

int);

直接分組求最小科目分數(shù)大于80:

selectnamefromscoregroupbynamehaving

min(fenshu)>80;

39.基于下面的表結構回答問題

TableEMPLOYEESStructure:

EMPLOYEE_IDNUMBERPrimaryKey,

FIRST_NAMEVARCHAR2(25),

LAST_NAMEVARCHAR2(25),

Salarynumber(8,2),

HireDateDATE,

Departmentidnumber(2)

TableDepartmentsStructure:

Departmentidnumber(2)PrimaryKey,

DepartmentNameVARCHAR2(25)

(1)基于上述EMPLOYEES表寫出查詢:

寫出雇傭日期在今年的,或者工資在[1000,3000]之間的,或

者員工姓名(last_name)以'Obama'打頭的

所有員工,寫出這些員工的全部個人信息。

selectEMPLOYEE_ID,FIRST_NAME,LAST_NAME,Salary,Hi

reDate,Departmentid

fromEMPLOYEES

where

to_char(HireDate,Jyyyy')=to_char(sysdate,*yyyy,)

or(salbetween1000and3000)

orLAST_NAMElike'Obama%';

(2)基于上述EMPLOYEES表寫出查詢:

查詢部門平均工資大于1800元的部門的所有員工,列出這些

員工的全部個人信息

selectEMPLOYEE_ID,FIRST_NAME,LAST_NAME,Salary,

HireDate,Departmentid

fromEMPLOYEES

whereDepartmentidin(selectDepartmentid

fromEMPLOY

EES

groupby

Departmentid

having

avg(sal)>1800);

(3)基于上述EMPLOYEES表寫出查詢:

查出個人工資高于其所在部門平均工資的員工,列出這些員工

的全部個人信息及該員工高處部門平均工資百分比

selectEMPLOYEE_ID,FIRST_NAME,LAST_NAME,Salary,HireDa

te,Departmentid,Salary/avgDeptSal*1001「%’百分比

from(selecte.*,(selectavg(Salary)

fromEMPLOYEESwhereDepartmentid=

e.Departmentid)avgDeptSal

fromEMPLOYEESe);

40.根據(jù)題目信息回答問題

設某工商業(yè)集團數(shù)據(jù)庫3個實體集:

一是“商品”實體集,屬性有商品號、商品名、規(guī)格、單

價等

二是“商店”實體集,屬性有商店號、商店名、地址等

三是“供應商”實體集,屬性有供應商編號、供應商名、

地址等

供應商與商品之間存在“供應”關系,每個供應商可以

供應多中商品,每種商品可向多個供應商訂購,

每個供應商供應每種商品有個月供應量;商店與商品之間存在

“銷售”聯(lián)系,每個商店可銷售多種商品,

每種商品可在多個商店銷售,每個商店銷售每種商品有個月計

劃數(shù)

(1)試畫出ER圖,并在圖上注明屬性、聯(lián)系的類型

(2)將ER圖轉換成關系模式集,并指出每個關系模式的主鍵

和外鍵

商品(商品號,商品名,規(guī)格,單價)

供應商(供應商編號,供應商名,地址)

供應關系(供應商編號,商品號,數(shù)量)

商店(商店編號,商店名,地址)

銷售關系(商品編號,商品號,計劃數(shù))

**關系模式集與ER實體圖之間的轉換,就是構建底層數(shù)據(jù)庫

的基礎

<!—2016/8/11—>

1.存儲過程了解多少?寫過嗎?

存儲過程procedure:在服務器端,能夠被多個程序調用的一

段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

需要先用工具(Oracle用PLSQLDeveloperMySQL用

Navicat)寫好某個特定功能的存儲過程,

JDBC可以使用CallableStatement調用存儲過程。

2.貴公司的數(shù)據(jù)庫用的是什么?

Oracle和MySQL

3.數(shù)據(jù)庫mysql和oracle分頁

MySQL分頁使用limit:

比如:

select列名from表名limit10,10;

Oracle分頁使用rownum:

比如:

selecta.*from

(selectrownumrw,列名from表where條件)a

wherea.rw>xanda.rw<=y;

<!—2016/8/10—>

1.Oracle和MySQL的區(qū)別

>Oracle使用rownum來實現(xiàn)分頁,MySQL使用limit實現(xiàn)分

>Oracle沒有主鍵自增特性,可以使用調用序列的方式來實現(xiàn)

主鍵自增;

mySQL可以在主鍵列之后添加auto_increment設置自增特

>Oracle有表空間的概念,MySQL沒有表空間

>Oracle的分組函數(shù)中select之后不能直接寫非分組的其他

列;

mySQL如果沒有聚組函數(shù)則可以寫其他列

>Oracle的表存放在用戶(其實是schema對象)所屬的表空

間的數(shù)據(jù)文件中,

mySQL的表存放在某個database中(mysql一個root用戶

下可以有很多database)

>Oracle中的一些函數(shù)和MySQL也不一樣

>Oracle中的字符類型可以使用varchar2MySQL不能使用該

類型

<!—2016/8/9—>

1:drop和truncate的區(qū)別?

drop是刪除表,不會釋放表原先占有的內存空間;

truncate是截斷表,能夠釋放表中數(shù)據(jù)所占有的內存空間,

保留表結構;

如果使用droptable表名purge;語句則能夠直接釋放表占

有的內存空間。

2:一條SQL怎么做updateorinsert?

Oracle中,要實現(xiàn)update/insert功能,要用到Merge

into來實現(xiàn)(Oracle9i引入的功能),其語法如下:

MERGEINTO表名別名1

USING(表|視圖|查詢語句)別名2

ON(關聯(lián)關系)

WHENMATCHEDTHEN

UPDATE表名

SETcoll=col_vall,

col2=col_val2

WHENNOTMATCHEDTHEN

INSERT(column_list)VALUES

(column_values);

有一個表T,有兩個字段a、b,我們想在表T中做Insert/Update,

如果條件滿足,則更新T中b的值,否則在T中插入一條記錄。

MERGEINTOTT1

USING(SELECT'1001'ASa,2ASbFROMdual)T2

ON(Tl.a=T2.a)

WHENMATCHEDTHEN

UPDATESETTl.b=T2.b

WHENNOTMATCHEDTHEN

INSERT(a,b)VALUES(T2.azT2.b);

3:說說數(shù)據(jù)庫三大范式是什么?

第一范式:數(shù)據(jù)表中的字段不可再分

假設有一張表users:編號,姓名,聯(lián)系方式三個字段。但

是聯(lián)系方式又可以拆分為固定電話,手機號,家庭住址等,

如果按照之前的設計,聯(lián)系方式這個列上的數(shù)據(jù)可能會很

復雜(既可以填電話又可以填寫家庭住址登),

這種表的設計就不符合第一范式的要求。第一范式是數(shù)據(jù)

庫設計必須遵循的原則!

第二范式:在第一范式的基礎上,需要確保數(shù)據(jù)庫表中的每

一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯(lián)合

主鍵而言)

假設有一張訂單表:訂單編號,商品編號,商品名稱,單

價,數(shù)量,下單時間...

分析這張表,訂單編號和商品編號可以設計成一個聯(lián)合主

鍵(一個訂單可以有多個商品),但是表中的商品名稱和單價跟

訂單編號沒有任何關系,只跟商品編號有關,下單時間跟

商品信息也沒有關系,而是跟訂單編號有關。

則我們可以將商品的信息單獨設計成單獨的商品表,將訂

單信息抽象成獨立的表,而訂單跟商品又可以是一個關聯(lián)的橋表。

可以修改為:

訂單表:訂單編號,下單時間....

商品表:商品編號,商品名稱,單價...

商品訂單表:訂單編號,商品編號,數(shù)量

這樣在每個表中的字段跟主鍵都有唯一的關系(商品訂

單表的數(shù)量依賴于訂單和商品?。?/p>

第三范式:確保每列都和主鍵列直接相關,而不是間接相關

假設有員工表和部門表,員工表中有一個列為部門編號

列,能夠跟部門表中的部門編號列對應,

那么我們就不能在員工表中再設計一些部門信息的列

(比如在員工表中添加部門名部門地點登),這就是第三范式的要

求!

<!—2016/8/4—>

1.當JDBC執(zhí)行失敗時往往需要回滾操作,請以user(id

number(11),namevarchar2(20))為例,

包含insert語句的Java代碼用戶表示出現(xiàn)異常時的回滾動作

publicbooleanaddUser(Userus){

Connectionconn=null;

Statementstate=null;

try{

Class.forName("oracle,jdbc.driver.Orac

leDriver");

conn=DriverManager.getConnection(

“jdbc:oracle:thin@localhost:1521:or

cl〃,

scott,tiger);

conn.setAutoCommit(false);//開啟事務

〃需要

user_seq系列對象

inti=state.executeUpdate(*insertinto

user(id,name)values(user_seq.nextval,

+us.getName()+"')");

if(i==l){

conn,commit();

)

returni;

}catch(Exceptione){

e.printStackTrace();

try{if(conn!=null)conn,rolIback();}cat

ch(Exceptionec){}

}finally{

try{if(state!=nul1)

state,close();}catch(Exceptionec){}

try{if(conn!=null)

conn,close();}catch(Exceptionec){}

}

)

2.請分別寫出Oracle和MySQL限制返回十條記錄的查詢語句

Oracle:

select列名from表名whererownum<=10;

或者指定位置:

selecta.*from

(selectrownumrw,e.歹!J名from表名e)a

wherea.rw>開始位置anda.rw<=(開始位置

+10);

*實際是分頁的用法

mysql:

select列名from表名limit10;

3.寫出創(chuàng)建OracleJDBC連接的過程

publicstaticConnectiongetConnection(){

Class.forName("oracle,jdbc.driver.OracleDriver

〃);

conn=DriverManager.getConnection(

,zjdbc:oracle:thin@localhost:15

21:orcl”,

scott","tiger");

returnconn;

)

4.按部分分組,按創(chuàng)建時間反向排序user(標識,姓名,部門,創(chuàng)建時

間)查詢SQL的語句

select部門,wm_concat(姓名)部門中員工fromuser

groupby部門orderbymin(創(chuàng)建時間)desc;

6.oracle的存儲過程

存儲過程procedure:在服務器端,能夠被多個程序調

用的一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

7.如何調用存儲過程?

JDBC中使用CallableStatement執(zhí)行器對象,通

過execute("{call過程名(?,?)}“)

的方式來調用;

PL/SQLDeveloper工具中可以通過

declare

begin

過程名(參數(shù));

end;

的方式調用;

8.游標對象怎么用?

游標是過程體中用來指代一個ResultSet查詢結

果的,

JDBC中可以用ResultSet表示一個結果集,但

是存儲過程用的是cursor(游標)對象來表示。

存儲過程如果需要遍歷/返回一個查詢結果,就需

要使用游標對象。

<!—2016/7/29—>

8.【數(shù)據(jù)庫】張三語文100,李四數(shù)學80,張三英語88,王五

語文72....

L設計一張表,寫出創(chuàng)建表的sql語句

createtablesc(

namevarchar(16),

subjectvarchar(16),

scorenumber(3)

);

2.查詢出每科成績最高的學生

selectsc.*fromsc,(selectsubject,max(score)maxsc

fromscgroupbysubject)a

wheresc.subject=a.subjectandsc.score=

a.maxsc;

*內層嵌套按照學科分組查詢學科及對應學科最

高的工資,

外層級聯(lián)SC表,如果學科和成績都跟內存查

詢相同,則取出該同學信息

3.查詢出平均分在80分以上的學生

selectnamefromsc

groupbynamehavingavg(score)>80;

<!—2016/7/26—>

jdbc怎樣執(zhí)行sql語句?

1加載驅動

2通過驅動管理對象獲得連接

3獲得執(zhí)行器對象

編寫SQL語句,JAVA中用String類型表示SQL

4通過執(zhí)行器執(zhí)行SQL語句

常用的執(zhí)行SQL語句的方法有:

execute()boolean(*執(zhí)行select語

句時返回true,因為select能夠返回一個查詢結果

其他命令開頭的語句返回false)

executeUpdate()int

executeQuery()ResultSet

5釋放資源

<!—2016/7/20—>

1.索引用過嗎?在什么情況下會導致索引失效?用索引還需要注

意哪些問題呢?索引分為幾種?

用過;

如果有索引的列空值比較多、重復數(shù)據(jù)比較多的話索引不起

作用。

通常索引用在查詢較多而增刪改較少的表,因為索引會降低

增刪改的效率。

常用的索引有普通索引、唯一性索引、位圖索引,如果某個

列上經常使用函數(shù),還可以建一個函數(shù)索引。

2.like用過嗎?怎么用的?

用過;

like常用來實現(xiàn)模糊查詢,與%和_匹配使用,如果需要匹

配特殊字符,則需要使用escape逃離符。

3.union用過嗎?能聯(lián)合字段嗎?如果聯(lián)合的信息有空的會怎樣

(對應的位置是null)?

union表示聯(lián)合,將多個查詢結果聯(lián)合成為一個查詢結果,

并且能夠去除重復數(shù)據(jù)

4.sql語句中怎么判斷一個字段是不是空?

與空判斷使用isnull或者isnotnull

5.左外連接,右外連接,說一下?

leftjoin左外連接

*from原表join新表on關聯(lián)關系

原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系

關聯(lián)到原表的數(shù)據(jù)

rightjoin右外連接

原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系

關聯(lián)到新表的數(shù)據(jù)

6.樹形查詢是什么?用過嗎?

樹形查詢相當于遞歸操作,需要使用connectby來實現(xiàn),

簡單來說就是通過某個記錄作為根節(jié)點,一次查找所屬的子節(jié)點。

7.在數(shù)據(jù)庫中,例如有一個表,存儲數(shù)據(jù)是1000萬條,怎樣將其中

的500萬條放在另一個表中,且剩下的那個表也是500萬條

(實際意思就是怎樣把一個表中的數(shù)據(jù)平等的分為兩個表)

分區(qū)表的使用:

如果一張表中的數(shù)據(jù)量特別大,通常我們可以采用分

區(qū)表的方式來存放數(shù)據(jù);

首先建立不同的表空間A和B(不同的表空間指向不

同的數(shù)據(jù)文件),在創(chuàng)建表是使用partitionbyrange(范圍分區(qū)

的意思),

將前500萬條數(shù)據(jù)指定存放在表空間A中將后超

出500萬條之后的數(shù)據(jù)存放在表空間B中,以后查詢數(shù)據(jù)如

果查詢的

編號范圍在前500萬條中,我們可以指定只查詢A中

的內容,反之則只查詢B中的內容。

8.數(shù)據(jù)庫登錄時,一般用戶和管理員用戶的區(qū)別是?

一般用戶剛開始創(chuàng)建沒有權限需要授權,管理員是一個DBA

角色,權限很大。

9.怎樣對一個用戶授權?其關鍵字是什么?

Oracle權限分為系統(tǒng)權限和對象權限:

系統(tǒng)權限授權使用grant權限to用戶;

對象權限授權使用grant權限on資源to用戶;

<!—2016/7/18—>

1.一句sql備份數(shù)據(jù)庫中的一張表(SQLServer,Oracle)

備份某張表,再次理解為備份表中數(shù)據(jù),之前我們提到過如何備

份數(shù)據(jù):

創(chuàng)建表同時復制數(shù)據(jù):

createtable新表名(列名)asselect列名from舊表

where條件;

如果表已存在,可以向已存在的表中插入數(shù)據(jù):

insertinto表名(列名)select列名from舊表where

條件;

2.Oracle怎么實現(xiàn)自動增長的

Oracle通過調用序列對象來實現(xiàn)主鍵自增:

在做新增操作時,主鍵列上的值可以使用序列.nextval來

得到一個新生成的值。

3.groupby不能和誰連用

問題出錯?。?!估計面試官是理解成groupby不能和order

by連用這個老問題。

但事實是groupby和orderby是可以連用的,只是要注意

orderby之后排序的列是有要求的,

必須是分組列或者聚組函數(shù)計算后的其他列!

4.左外接右外接

leftjoin左外連接

*from原表join新表on關聯(lián)關系

原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系

關聯(lián)到原表的數(shù)據(jù)

rightjoin右外連接

原表和新表能夠關聯(lián)的數(shù)據(jù)+無法通過關聯(lián)關系

關聯(lián)到新表的數(shù)據(jù)

<!--2016/7/13—>

1.oracle中分頁用的什么?

Orac1e使用rownum來實現(xiàn)分頁

2.rownum是從0還是1開始的?

從1開始

3.一個主鍵自增的數(shù)據(jù)庫,怎么拿到想要的id?

JDBC:

Statement執(zhí)行器對象能夠通過getGeneratedKeys()這個方

法來獲得自增列的結果集(返回ResultSet),

定位到這個返回的結果集的第一條數(shù)據(jù)(調用next。

方法),通過getlnt(l)這個方法能得到一個int類型的自增主鍵值。

<!"2016/7/12—>

1.存儲過程用過嗎?

存儲過程關鍵字是procedure:在服務器端,能夠

被多個程序調用的一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

2.sql優(yōu)化

1可以使用索引

2SQL語句如果是多表關聯(lián)可以將關聯(lián)條件寫在左側,過濾

條件盡量寫在右側

3避免在子查詢語句中使用insomeanyall等關鍵字

可以使用多表關聯(lián)替代

4避免使用like"對寫法,這種寫法或造成全盤掃描

like之后是‘字符%'

如果必須是like'%字符%'可以使用instr函數(shù)替

whereenamelike'%E%';

whereinstr(ename,,E))>0;

5復雜的業(yè)務功能可以使用存儲過程(如果對存儲過程熟

悉的話回答)

<!—2016/7/11—>

1:數(shù)據(jù)量比較大的情況下,怎么提高效率問題(其實他想知道sql

優(yōu)化問題)

1可以使用索引

2SQL語句如果是多表關聯(lián)可以將關聯(lián)條件寫在左側,過濾

條件盡量寫在右側

3避免在子查詢語句中使用insomeanyall等關鍵字

可以使用多表關聯(lián)替代

4避免使用like'%%'寫法,這種寫法或造成全盤掃描

like之后是‘字符%'

如果必須是like'%字符%'可以使用instr函數(shù)替

whereenamelike'%E%';

whereinstr(ename,'E')>0;

5復雜的業(yè)務功能可以使用存儲過程(如果對存儲過程熟

悉的話回答)

2:oracle中用過哪些與時間有關的函數(shù)?怎么查詢每個月第一天的

數(shù)據(jù)?

add_months(dl,i2)在dl時間上增減i2個月份

months_between(dl,d2)計算兩個日期之間的月份

last_day(dl)得到給定日期所在月份的最后一天是幾號

next_day(dl/周期')得到給定日期dl之后指定的周

期是哪天周期可以是:星期日星期一星期二....星期六

查詢給定日期所在月份的第一天,可以使用

trunc(dl,'mm')得到,

trunc能夠精確日期,第二個參數(shù)'mm'表示精確到當前的月

份,天數(shù)默認為1也就是該月第一天

3:oracle中還用過哪些函數(shù)?

length()substr()upper()lower()initcap(

)

to_char()to_date()

max()min()

sum()avg()count()wm_concat()

4:存儲過程會么?具體說一下

存儲過程procedure:在服務器端,能夠被多個程序調用的一

段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

5:數(shù)據(jù)庫用過哪些?

OracleMySQL

6:怎么加載mysql的驅動?

JDBC中有三種方式:

1>Class.forName("com.mysql.jdbc.Driver");//

最常用

2>newcom.mysql.jdbc.Driver();

3>System.setProperty("jdbc.drivers","com.mysql.jdb

c.Driver");

7:Oracle一分頁用什么?

rownum和查詢語句嵌套的形式

比如:

selecta.*from

(selectrownumrw,歹(J名from表where條件)a

wherea.rw>xanda.rw<=y;

8:Oracle-如果一張表有idnameage三個字段怎么給他們用

age分組,id排序和計算人數(shù)?

selectcount(id)人數(shù)from表名groupbyageorderby

max(id);

<!—2016/7/10—>

1.一個table如何得到第二行第三列的值?

在JDBC中,我們可以通過ResultSet對象得到:

ResultSetrs對象中的方法absolute(2)能夠定位到第二條數(shù)

據(jù),

rs.getObject(3)可以得到第2條第3列的值.

<!—2016/7/7—>

1.oracle和mysql端口號

oracle:1521

mysql:3306

2.觸發(fā)器存儲過程

存儲過程procedure:在服務器端,能夠被多個程序

調用的一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

觸發(fā)器trigger:一種特殊的存儲過程,不需要調用也沒有參

數(shù),在滿足條件時觸發(fā):

觸發(fā)條件:在對某個表做insert、update或

delete操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行

<!—2016/7/6—>

6.你在之前的項目中有寫過第三方調用的接口嗎

這個為什么在CoreJava里?這里的接口不是

interface!!!強烈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í)行而無需編譯,還能屏蔽某些敏感字段保護隱私。

使用存儲過程完成復雜操作,能夠避免JAVA與數(shù)據(jù)庫之

間的多次交互從而提高程序執(zhí)行效率。

對于經常訪問的表中的字段可以適當創(chuàng)建索引(適合用

在查詢多增刪改少的表中)。

2.存儲過程視圖

存儲過程procedure:在服務器端,能夠被多個程序調用

的一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

視圖View:將編譯后的SQL語句保存在數(shù)據(jù)庫中,這就是

視圖。視圖可以將查詢語句保存起來以供下次執(zhí)行而無需編譯,還能

屏蔽某些敏感字段保護隱私。

3.oracle刪除第5條到第10條數(shù)據(jù)

delectfrom表whereidin

(selectidfrom

(selectrownumrw,idfrom表where條件)a

wherea.rwbetween5and10);

查詢5To條會,刪除不就是加上個deletefromwhere嗎?。?/p>

4.oracle訪問不同表空間的表?

Oracle中的表不是基于表空間的,而是基于用戶(這里的

用戶實際上是一個跟用戶同名的“方案schema”對象最好強調一下)

存儲,訪問不同表空間的表實際上是使用schema.表名這種帶有前

綴的寫法,

比如在etoak用戶(默認表空間為A)中要訪問scott用戶(默認表

空間為B)中的表:

select歹!]名fromscott.emp;

只需要將用戶對象的默認表空間指向其他表空間即可,當前前

提是etoak用戶必須有權限能夠訪問到scott中的emp表,

權限可以讓etoak是一個dba用戶,或者通過scott或管理員

授權:grantselectonscott.emptoetoak;

5.mybatis和jdbc

JDBC是JAVA鏈接數(shù)據(jù)庫的技術,代碼靈活但是代碼量較大;

mybatis底層封裝了JDBC是一個半自動的框架,相對于JDBC

來講代碼量較少,效率不如JDBC快。

6.mysql怎么查詢所有表名;

鏈接上數(shù)據(jù)庫后:

第一種方式:showtables;

第二種查詢方式:

SELECTTABLE_NAMEFROMINFORMAT10N_SCHEMA.TABL

ESWHERETABLE_SCHEMA='數(shù)據(jù)庫名'

7.mysql一個年級有多個班級,一個班級有若干人,如果我想查高一

年級班級人數(shù)最多的該怎么實現(xiàn)

年級表

gidname

10高一

20圖二

—、----

30晨)二

班級表

idnamegid人數(shù)

1一班1020

2二班1025

3一班2010

4三班1025

第一種需求,查詢出符合條件的班級人數(shù)最多是多少,然后查詢出

班級人數(shù)與之相等的班級

select*from班級表where人數(shù)in

(selectmax(人數(shù))from班級表wheregid=(selectgidfrom

年級表wherename=,高一'));

第二種需求,只查詢班級人數(shù)最多是多少

selectmax(人數(shù))from班級

wheregid=(selectgidfrom年級wherename=,高一

');

**第二種需求利用聚組函數(shù)直接過濾高一班級中最多的班

級人數(shù),這兩種做法根據(jù)需求來

8.CRUD分別是什么意思

CRUD是指增加(Create)、讀取(Retrieve)(重新得到數(shù)據(jù))、更新(Update)

和刪除(Delete)幾個單詞的首字母簡寫

<!"2016/7/5—>

1.往一個空表里面插10條數(shù)據(jù),插到第五條報出異常,問這時候表

里插入了幾條數(shù)據(jù)?

如果開啟事務,則表中沒有插入數(shù)據(jù)

2.手寫一份JDBC查詢

還記得如何使用ResultSetMetaData對象嗎?實現(xiàn)Dao層與實體類

的解耦!

publicList<Map>readEmpByMap(){

try{

conn=MCF.getConnection("oracle");

state=conn.createStatement();

rs=state.executeQuery("select*fromemp");

ResultSetMetaDatarsmd=rs.getMetaData();

List<Map>list=newArrayListO();〃每一條記錄就

是一個List元素

while(rs.nextO){

Map<Integer,Object>map=newHashMap<>();//

將行中所有的列以及對應的值存放在鍵值對集合中

//Integer:用來記錄主鍵:列索引

//Object:對應列的值

〃進入while。循環(huán)說明遍歷的是當前一條記錄

for(inti=1;i<=rsmd.getColumnCount();i++){

〃進入for循環(huán)說明得到的時當前行上當前

列的數(shù)據(jù)

map.put(i,rs.getObject(i));

)

list.add(map);

)

returnlist;

}catch(Exceptione){

e.printStackTrace();

}finally{

//MCF.close(conn,state,rs);

)

returnnull;

)

<!—2016/7/4—>

1:oracle數(shù)據(jù)庫的工具如何導出表結構,菜單是哪個?

PL/SQLDeveloper工具:

Tools--->exportsTables…

或者

Tools--->exportUserObjects…

回答這個問題,可以跟他談談命令導此命令導出的形式更全

面:

我們在命令行中使用命令導出,

Orac1e:(cmd直接輸入無需進入Oracle)

導出:exp用戶名/口令@數(shù)據(jù)庫標識file="文

件.dmp”

導入:imp用戶名/口令@數(shù)據(jù)庫標識file=〃文

件.dmp“full=y

MySQL:

導出:mysqldump-uroot-p密碼數(shù)據(jù)源名>”文

件.sql”

導入:mysqldump-uroot-p密碼數(shù)據(jù)源名<“文

件.sql”

##########################################################

#######################

2:mysql和oracle有哪些自己特有的函數(shù),有沒有用過,sql有什

么區(qū)別

*SUBSTR('abed',2,2)substring('abed',2,2)函

數(shù)名稱不同:

ORACLE:selectsubstrCabcd,,2,2)valuefrom

dual

MYSQL:selectsubstring('abed),2,2)value

*nvl(u.email_address,10)

IFNULL(u.email_address,10)

或ISNULL(u.email_address)

函數(shù)名稱不同(根據(jù)不同的作用進行選擇):

ORACLE:selectu.email_address,nvl(u.email_address,10)

valuefromsd_usru

(如果u.email_address是NULL,就在DB中用10替換其

值)

MYSQL:selectu.email_address,IFNULL(u.email_address,10)

valuefromsd_usru

(如果u.email_address是NULL,顯示結果中是10,而不

是在DB中用10替換其值)

selectu.email_address,ISNULL(u.email_address)valuefrom

sd_usru

(如果u.email_address是NULL,就顯示l<true>,否則

就顯示0<false>)

*ADD_MONTHS(sysdate,2)DATE_ADD(sysdate(),interval

2month)函數(shù)名稱不同:

ORACLE:SELECTADDJIONTHS(sysdate,2)asvalue

fromDUAL;

MYSQL:SELECTDATE_ADD(sysdate(),interval2

month)asvaluefromDUAL;

語法

DATE_ADD(date,INTERVALexprtype)

date參數(shù)是合法的日期表達式。ea/■參數(shù)是您希望添加的時間間

隔。type類型:dayweekmonthyear等

*類型轉換函數(shù)TO_CHAR(SQLCODE)date_format/

time_format函數(shù)名稱不同

Orac1e:selectto_char(sysdate,(yyyy-mm-dd,)

fromdual;

Oracle:selectto_char(sysdate,(hh24-mi-ss,)

fromdual;

mysql>selectdate_format(now(),,%Y-%m-%d,);

mysql>selecttime_format(now(),,;

*to_date(str,format)STR_TO_DATE(str,format)函數(shù)名

稱不同:

ORACLE:SELECTto_date('2009-3-6','yyyy-mm-dd')

VAULEFROMDUAL

MYSQL:SELECTSTR_TO_DATE2004-03-01,,

J%Y-%m-%d,)VAULE

(這道題目主要羅列幾個函數(shù)即可,因為函數(shù)不同的太

多..)

##########################################################

####################

3:表對象和表空間的區(qū)別

首先要弄明白兩個概念:

表對象指的是所有建立起來或者鏈接的數(shù)據(jù)表。

表空間是個邏輯概念,本質上是一個或者多個數(shù)據(jù)文件

的集合。數(shù)據(jù)文件是一個物理概念,是具體存儲數(shù)據(jù)的物理文件。一

個數(shù)據(jù)文件只能屬于一個表空間.一個表空間可以包含一個或多個數(shù)

據(jù)文件,一個數(shù)據(jù)庫由多個表空間組成,但是一個表空間只能屬于一

個數(shù)據(jù)庫。

oracle中的schema(可以叫它:方案)就是指一個用戶下

所有對象的集合,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的objectSoschema就是一

個用戶和它下面的所有對象,而表空間邏輯上用來放。bjects,物理

上對應磁盤上的數(shù)據(jù)文件或者裸設備。

4:觸發(fā)器和存儲過程

存儲過程procedure:在服務器端,能夠被多個程序調用

的一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

觸發(fā)器trigger:一種特殊的存儲過程,不需要調用,在

滿足條件時觸發(fā):

觸發(fā)條件:在對某個表做insert、update或

delete操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行

5:SQL的順序

1、from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù)

2、where子句基于指定的條件對記錄行進行篩選

3、groupby子句將數(shù)據(jù)劃分為多個分組

4、使用having子句篩選分組

6、計算所有的表達式

7、select的字段

8、使用orderby對結果集進行排序。

6:Oracle和MySQL的端口號

Oracle;1521

MySQL:3306

常用的還有:

http:80

tomcat:8080

7:分區(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ū)進行備份和恢復;

(3)可以將分區(qū)映射到不同的物理磁盤上,來分散10;

(4)提高可管理性、可用性和性能。

8:備份數(shù)據(jù)

第一種方式:通過導入導出命令備份數(shù)據(jù)庫中全部數(shù)據(jù)

(Oracle用exp命令導出數(shù)據(jù),MySQL使用mysqldump命令備份數(shù)據(jù))

第二種方式:使用工具導出數(shù)據(jù)

PL/SQLDeveloper的菜單

Tools=>ExportUserObjects中出來一個對話框界面,然后框選要

到處的Oracle數(shù)據(jù)庫對象,包括表,序列,存儲過程,視圖,函數(shù)

等等,并指定導出的文件名稱

9:索引

*索引:類似于一個目錄,但是不只是目錄,能夠幫助

我們提高查詢效率.

語句:createindex索引名on表名(列名,列

名);

uniqueindex唯一性索引

bitmapindex位圖索引

createindex索引名on表名(函數(shù)名(列

名));函數(shù)索引

*適用?

*經常被查詢的列

*如果該列上的值很少有空值很少有重復的值可

以使用索引

<!—2016/7/3—>

01:存儲過程、視圖、觸發(fā)器

存儲過程procedure:在服務器端,能夠被多個程序調用的

一段SQL語句塊。

簡單來說就是事先用數(shù)據(jù)庫語言寫好的一段

功能,能夠像函數(shù)一樣被程序調用,

但是存儲過程本身沒有返回值,是通過返回參

數(shù)的形式返回數(shù)據(jù)。

視圖View:將編譯后的SQL語句保存在數(shù)據(jù)庫中,這就是

視圖。

一般來講視圖不能創(chuàng)建索引(因為視圖本身只是一個

編譯后的查詢語句,索引只能創(chuàng)建在表的列上),

但是Oracle提供了一種物化視圖可以創(chuàng)建索引。

(物化視圖:雖然叫視圖但是實際類似于表,

將數(shù)據(jù)暫時存儲并在基表刷新或者提交數(shù)據(jù)時

刷新本視圖以便與基表數(shù)據(jù)保持一致。)

觸發(fā)器trigger:一種特殊的存儲過程,不需要調用,在滿足

條件時觸發(fā):

觸發(fā)條件:在對某個表做insert、update或

delete操作之前或之后(取決于如何實現(xiàn))自動執(zhí)行

02:oracle數(shù)據(jù)庫啟動必須啟動哪些服務

監(jiān)聽服務(Listener結尾比

如:Orac1eOraDb11g_home1TNSListener該服務允許第三方軟件一比如PL/SQL

developer鏈接數(shù)據(jù)庫)

實例服務(Services實例名比

如:OracleServiceORCL必須啟用該服務數(shù)據(jù)庫才能使用相應的數(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í)行而無需編譯,還能屏蔽某些敏感字段保護隱私。

使用存儲過程完成復雜操作,能夠避免JAVA與數(shù)據(jù)庫之

間的多次交互從而提高程序執(zhí)行效率。

對于經常訪問的表中的字段可以適當創(chuàng)建索引(適合用

在查詢多增刪改少的表中)。

04:mysql數(shù)據(jù)庫類型(引擎類型)

在缺省情況下,MYSQL支持三個引擎:ISAM、MYISAM

和HEAPo

另外兩種類型INNODB和BERKLEY(BDB)

05:如何獲取一個表第5條記錄

Oracle:rownum重命名+嵌套的形式

MySQL不支持Minus可以使用連接的形式來實現(xiàn):

t:

tidtname

11小明

20小紅

13小剛

24小X

35小Y

16小Z

肯定不能通過主鍵=5的方式來獲得,但是我們可以通過兩個

SQL語句獲得如下數(shù)據(jù):

selecttid,tnamefromtlimit5;

selecttid,tnamefromtlimit4;

將這兩個結果做關聯(lián)并且將能夠關聯(lián)的數(shù)據(jù)篩選掉注意使用

至U了notexists:

selecta.*from

(selecttid,tnamefromtlimit5)a

wherenotexists(selectb.*from

(selecttid,tnamefromt

limit4)b

wherea.tid=b.tid);

06:事務的特性

事務四大特性(簡稱ACID)

原子性(Atomicity):事務中的全部操作在數(shù)據(jù)庫中是不可

分割的,要么全部完成,要么均不執(zhí)行。

一致性(Consistency):事務必須是使數(shù)據(jù)庫從一個一致

性狀態(tài)變到另一個一致性狀態(tài)。一致性與原子性是密切相關的。

隔離性(Isolation):事務的執(zhí)行不受其他事務的干擾。

持久性(Durability):能夠將提交的數(shù)據(jù)持久化到數(shù)據(jù)庫

中。

07:去除重復sql

分組后篩選條件完成刪除,比如:

deletefrom表whereidnotin(

selectmax(id)from表groupby重復列));

**將數(shù)據(jù)相同的記錄劃分為一個組,保留組內id最大的

記錄。

<!—2016/7/1—>

1:leftjoinrightjoi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論