嵌入式筆試題數(shù)據(jù)庫總結(jié)_第1頁
嵌入式筆試題數(shù)據(jù)庫總結(jié)_第2頁
嵌入式筆試題數(shù)據(jù)庫總結(jié)_第3頁
嵌入式筆試題數(shù)據(jù)庫總結(jié)_第4頁
嵌入式筆試題數(shù)據(jù)庫總結(jié)_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、oracle甲骨文oracle, db2 sqlserver數(shù)據(jù)庫開發(fā)SQL3-oracle-IBM-mic48.62215PLSQL1.5PROC/C+1.5DMS3:1T-1024G4G數(shù)據(jù)早期的數(shù)據(jù)-文件海量級查找速度程序幫你數(shù)據(jù)刪除 增加(管理)-數(shù)據(jù)庫管理系統(tǒng)-DBMS在文件DB數(shù)據(jù)庫文件的格式:名字 員工號-表頭tom00120nan行(row)-列(字段)(column)二維表關(guān)系型數(shù)據(jù)庫數(shù)據(jù)庫對應(yīng)的最小二維表對應(yīng)的最小是二維表單元row單元column一條的最小程序數(shù)據(jù)庫oracle 提供的 sqlplus登錄服務(wù)器netnet login:IP(172.1

2、8.9.6) 6openlabpasswd:open123bash$sqlplussqlplusopenlab/open123scott/tigerSQL!clear clearscreenSQLdesc SQLdescName表名s_empNull?TypeID (在表中數(shù)據(jù)的唯一)NOT NULLNUMBER(7)LAST_NAME(姓)_NAME(名)USERID(員工號) START_DATE (入職日期)COMMENTS (說明)NOTNULLVARCHAR2(25) VARCHAR2(25) VARCHAR2(8) DATE VARCHAR2(255) NUM

3、BER(7) VARCHAR2(60) NUMBER(7) NUMBER(11,2)NUMBER(4,2)MANAGER_ID(TITLE(職位) DEPT_ID(部門 SALARY(工資)(提成)id))SQLspool 文件名如果想繼續(xù)存入敲入-退出之后不在到文件令和結(jié)果SQLspool文件名number varchar2date-數(shù)字類型-字符串類型-日期類型sql 語句Aselect(查詢 選擇)select *,字段名,字段名,字段名 from選擇可選表名;select selectselect* from 表名; id from s_emp;id,last_name,salary

4、from s_emp;a/i/o/OZZ保存退出ppt summit2.sql搭建環(huán)境1.把 summit2.sql 傳到服務(wù)器 到服務(wù)器3.sqlplus 之后運(yùn)行文件 summit2.sqlselect distinct *,字段名alias,字段名,字段名 distinct排重把所有的職位查詢出來select title from s_emp;select distinct title from s_emp; alias別名select title zhiwei from s_emp;默認(rèn)顯示成大寫 -在別名上加雙引號小寫顯示select title zhiwei from s_emp;

5、from表名;c 中連接字符串?dāng)?shù)據(jù)庫中連接字符串|把所有人的拼接之后顯示select last_name,select last_name|_name from s_emp;-error_name from s_emp;+ - * /把每個人的年薪統(tǒng)計出來 select salary from s_emp; select salary*12 from s_emp;大家把每個人的提成查詢出來select COMMIS_PCT from s_emp;空值NULL-c (void*)0NULL-未知值 不同于空格 空字符串任何值和 NULL 做運(yùn)算得到的是 NULL把提成加入到年薪的計算select

6、_name,salary*12 from s_emp;/logicerrororacle 提供一個函數(shù) nvl空值處理函數(shù)nvl(p1,p2);要求 p1 和 p2 類型必須一致p1 是要處理的數(shù)據(jù) p2 是當(dāng) p1 是 NULL 函數(shù)返回 p2 的值如果 p1 非空 返回 p1結(jié)果出來之后再處理select_name,nvl(salary*12+salary*12*(COMMIS year salaryfrom s_emp;先處理后計算_PCT/100),0)select_name,salary*12+salary*12*(nvl(COMMIS year salaryfrom s_emp;_

7、PCT,0)/100)select_name,salary*12*(1+(nvl(COMMIS_PCT,0)/100) year salaryfrom s_emp;測試表-dual單行單列表sysdateoracle 當(dāng)前日期select select selectselectsysdate from dual;1sysdate from s_emp;25nvl(sysdate,01-AUG-11) from dual; nvl(NULL,01-AUG-11) from dual;Bwhere(條件 限制)選擇salaryselect大于 1000 的員工* from s_emp where

8、salary1000;selectlast_name,salary froms_emp;投影selectlast_name,salary froms_emp where salary1000;選擇+投影注意:* 能代表所有的列 慎用join 是當(dāng)你查詢的數(shù)據(jù)不在一時用字面值-1 2 abc-告訴 oracle 引擎轉(zhuǎn)義lastnamezhangsannameselect last_name|select last_name|123|_name from s_emp;_name from s_emp;注意:單引號的表達(dá)雙引號別名小寫 特殊字符 last_namemy nameselect las

9、t_name my name from s_emp;邏輯比較的 -和 c 中使用相同注意 等于號用一個=找出 id 等于 1 的人的名字注意等號select last_name| sql 的比較運(yùn)算符 select last_name|from s_emp where_namename from s_emp whereid=1;_namenameid in(1,3,5);like aa like aaa true aa like aab true%0 到 n 個任意字符_1 一個任意字符where name like wang% last_name 帶 a 的select last_name

10、from s_emp where last_name like %a%;表達(dá) NULL 時 是不是空 is null找出 manager_id 是空的人的名字select last_name,manager_id from s_emp where manager_id is null;betn a and ba,b閉區(qū)間工資 800 到 1500 的人select last_name,salary from s_empwhere salary betn 800 and 1500;注意:1.in 中的數(shù)據(jù)排放 1 90% 10% 把概率高的放前面null 的判斷用 isbetn a and b

11、是一個閉區(qū)間like 應(yīng)用于模糊查詢 % _表名帶有_ user_tables 的表 table_name表面select table_name from user_tables wheretable_name like %_% esc轉(zhuǎn)義為什么要轉(zhuǎn)義;補(bǔ)充-user_tables數(shù)據(jù)字典表的數(shù)據(jù)都是大寫的表名是 s_emp 表相關(guān)的信息select * from user_tables where table_name likeS_EMPesc;邏輯運(yùn)算符andor not工資 800 到 1500 的人select last_name,salary from s_emp where 800

12、=salary=800 and salary=1500;如何來表非null in(同理等于=!= select select-is null -is not null-in(list) -not inlike , betnand)=id from s_emp id from s_empwhere id!=1;where id=1;注意:not in-如果有 null 值 則不能用 not inselect COMMIS where COMMIS select COMMISwhere COMMIS_PCT from s_emp_PCT in(10);_PCT from s_emp_PCT not

13、 in(10);select COMMIS_PCT from s_empwhere nvl(COMMIS_PCT,0) not in(10);找出 41 部門的所有人 和 42 部門的并且 42 部門的員工工資大于 1000 的員工提示如果想表達(dá)的更清楚 可以使用小括號select last_name,salary from s_empwhere dept_id=41 or (dept_id=42 and salary1000);-這條選擇出來的數(shù)據(jù)可能一點(diǎn)?找出 要求工資大于 1000 的員工 并且 部門是 41 或者 42 部分的員工select last_name,salary from

14、 s_empwhere salary1000 and (dept_id=42 or dept_id=41); select salary*12+100 from s_emp;過節(jié)一年多發(fā) 100select (salary+100)*12 from s_emp;每個月多發(fā) 100Corder by(排序)按姓升序排序顯示 last_name,salary默認(rèn)的排序-自然順序 字典順序 升序 (asc)select last_name,salary from s_emp按工資升序 顯示 last_name salaryorder bylast_name;select降序selectlast_na

15、me,salaryfroms_emporderbysalary asc;last_name,salaryfroms_emporderbysalary desc;selectselectlast_name,salarylast_name,salaryfromfroms_emps_emporderorderbyby1;2 desc;(1,2 代表查詢字段的位置)排序可以按多列排序select title,salary from s_emp order by title,salary;先按第一個字段排序 如果第一個字select title,salary from s_emp order by ti

16、tle,salary desc;先按職位降序 職位相同再按工資升序select title,salary from s_emp order by title desc,salary;相同 再按第二個字段排序排序規(guī)則沒個字段都明清楚 如果不說明 就是默認(rèn)規(guī)則注意:1.order by 后出現(xiàn)的字段可以不出現(xiàn)在 select 后2.注意 NULL 在排序中是無窮大selectmis_pct from s_emp_pct;order by commis function 函數(shù)單行函數(shù)每一條D處理后產(chǎn)生一個返回值select nvl(manager_id,0) from s_emp;uppersele

17、ctupper(abc) from dual;select select等價于initcap(concat(orld one dream) from dual;o,world) from dual;select o|world from dual;select substr(o,1,4) from dual;注意 substr 的索引從 1 開始lengthselect length(last_name),last_name from s_emp;只顯示 last_name 開始的兩個字母select last_name,substr(last_name,1,2) from s_emp;只顯示

18、 last_name 最后的兩個字母select last_name,substr(last_name,length(last_name)-1,2)負(fù)數(shù)代表從后向前數(shù)select last_name,substr(last_name,-2,2) from s_emp;找出 last_name 長度是 5 的員工froms_emp;_name 是 Carmen 的sql 語句不區(qū)分大小寫SELECTSELECT_NAME FROM S_EMP where_NAME FROM S_EMP where_name=Carmen;lower(_name)=carmen;1.找出和 Carmen 職位相同

19、的人第一步先把 Carmen 的職位查出來再查詢和這個職位相同的人 select title from s_emp where_name=Carmen;where title=aselect title,and_name from s_emp_name!=Carmen;2.查詢工資大于 1000 的 員工按工資降序工資相同按名字降序select last_name,salary from s_emp where salary1000 order by salary desc,last_name desc;查詢出 id 是 1,3,5 的員工 不允許用 inselect last_name,id

20、 from s_emp where id=1 or id=3 or id=5;找出 last_name 長度是 4 并且工資大于 1500 的員工 按工資升序select last_name,salary from s_emp where length(last_name)=4 and salary1500 order by salary;多行函數(shù)對一組處理后產(chǎn)生一個返回值-組函數(shù)select count(nvl(manager_id,0) from s_emp;數(shù)字處理函數(shù):round 四舍五入 round(11.4,0)-11 round(11.5) -12trunc 截取trunc(11

21、.4,0)-11 trunc(11.5) -11第二參數(shù)可以省略 省略默認(rèn)是 0 to_char()select to_char(salary,fm$099,999,999.99) from s_emp;select to_char(salary,fmL099,999,999.99) from s_emp;改成中文貨幣符號環(huán)境變量NLS_LANG查看數(shù)據(jù)的本地語言select userenv(language) from dual;切換成中文bash$NLS_LANG=SIMPLIFIED CHI_CHINA.ZHS16GBKcsh%1.在 sh 下 setenv NLS_LANG SIMPL

22、IFIED CHI 2.sqlplus就可以看出to_numberoracle 的隱式數(shù)據(jù)類型轉(zhuǎn)換select last_name from s_emp where id=1; select last_name from s_emp where id=1;_CHINA.ZHS16GBKto_char 可以不跟后面的格式就是簡單的把對應(yīng)的類型加上單引號last_name Carmen steven 1.select 2.select3.selectmanager_id12S_name,manager_id from s_emp;_name,nvl(manager_id,S) from s_emp

23、;/error_name,nvl(to_char(manager_id),S) froms_emp;集s_dept-部門表desc s_dept名稱ID部門NAME部門名稱REGION_ID地區(qū)找出每個員工和他對應(yīng)的部門名稱造一select select出來last_name,dept_id,name from s_emp,s_dept;-300 last_name,dept_id,name from s_emp,s_dept-25where dept_id=s_dept.id;注意:先執(zhí)行 where 條件 不滿足的不去做匹配*E muti table select(多表查詢)內(nèi)連接完全符合

24、 where 的數(shù)據(jù)被選擇出來等值連接select last_name,dept_id,name from s_emp,s_dept25where dept_id=s_dept.id;select last_name,dept_id,name from s_emp e,s_dept d where dept_id=d.id;s_regionid地區(qū)name地區(qū)名稱要求把每個員工 last_name 對應(yīng)的部門名稱 和 地區(qū)名稱select e.last_name,, from s_emp e,s_dept d,s_region rwhere e.dept_id=d.id

25、 and d.region_id=r.id;col name for a20名字為 name 的這一列最多一行顯示 20col last_name for非等值連接salarysalarysalgradea16betn lowsal and hisalGRADELOSALHISAL12345700120114012001300112001400200030009999salary=800andsalary= = (select sum(salary)from s_emp where dept_id=42);補(bǔ)充:子查詢不但可以用在 where having 之后還可以用在 from 之后sel

26、ect sum(salary) s,dept_id from s_emp group by dept_id having dept_id=41order by s;select s,dept_id ,n from (select sum(salary) s,dept_id,max(name) from s_emp,s_deptgroup by dept_idorder by s) wherenwhere dept_id=s_dept.iddept_id=41;作業(yè)1.查詢每個員工對應(yīng)的地區(qū) (等值連接) 25 12 5 select last_name,from s_emp e,s

27、_dept d,s_region rwhere e.dept_id=d.id and d.region_id=r.id;2.查詢那些人是 select distinctfrom s_emp用外連接做和子查詢(oracle/sql99) m.last_name,m.id,e.manager_ide, s_emp mwhere m.id=e.manager_id(+) and e.manager_id查詢做哪些人是select last_name,id,manager_id from s_empis notnull;where id in(select distinct manager_id fr

28、om s_emp);查詢做哪些人不是select last_name,id,manager_id from s_empwhere id not in(select distinct manager_id from s_emp);/errorselect last_name,id,manager_id from s_empwhere id not in(select distinct manager_idfrom s_emp where manager_id is not null);注意:用 not in 時集合中不能有 null3.求工資總和大于等于 10 部門的部門名稱和工資總和selec

29、t dept_id,sum(salary),max() from s_empe,s_deptdwhere e.dept_id=d.idgroup by dept_idhaving sum(salary)=(select sum(salary) from s_empwhere dept_id=10) and dept_id!=10;4.select sum(salary) ss, dept_id from s_emp group by dept_idhaving ss(select sum(salary) from s_emp where dept_id=42);/why erorr

30、select 5from1where 2group by 3having 4order by 65.以 dept_id 分組顯示每個部門中工資最高的一個人的 last_name還要顯示出這個人的部門名稱。select max(salary),min(last_name),dept_id,min() s_emp e,s_dept dwhere e.dept_id=d.idgroup by dept_id;from注:3,5 參考select sum(salary) s, dept_id,max(name) nfrom s_emp,s_dept where group by dept_

31、idorder by s;9dept_id=s_dept.id11.數(shù)據(jù)庫的設(shè)計 E-R一個顧客 擁有多個 訂單一個訂單 只有一個 顧客 # 唯一的* 非空o沒有限制的可選的對象和對象的關(guān)系一對一一對多多對多丈夫顧客學(xué)生妻子訂單課程111n一個學(xué)生 可以選多門課程一個課程 可不可以被多學(xué)生選如果這兩個人的信息 成雙入對一你需要一個人信息的時 并不需另一個的-可以兩如何來表達(dá)一對多zhangsan employe lisizhao zhangwang1,2,3,4 是 Customer1111zhangsan zhangsan zhangsanzhangsan232323231234數(shù)據(jù)冗余 (

32、時間消除部分的冗余空間)-拆表1zhangsan 231234lisi zhao zhangwang1111思考一下多對多studentcourse123zhangsan lisiwangwu232425123456c c+ ucoracle plsqlproc/c+現(xiàn)在用一表達(dá)多對多1111112222223zhangsan zhangsan zhangsan zhangsan zhangsan zhangsan lisi lisi lisi lisi lisi lisiwangwu232323232323242424242424251234561234561c c+ ucoracle pl

33、sql proc/c+ cc+ ucoracleplsql proc/c+33333wangwu wangwu wangwu wangwuwangwu25252525252345c+ ucoracleplsql6 proc/c+先分出一張課程表123456c c+ ucoracle plsqlproc/c+再做一張學(xué)生表123zhangsan lisiwangwu232425下面的關(guān)系但放一叫關(guān)系表123三范式1,1,1,1232,2,2,1233,3,3,1234,4,4,1235,5,5,1236661第一范式所有的字段不可再分第二范式主屬性-非空 唯一面積(width/length)2所

34、有的非主屬性 完全依賴于主屬性第三范式在第二范式的基礎(chǔ)上消除傳遞依賴拆表312 ( 10sn001 zhangsan 0002 c sn001 zhangsan 0003 c+ 1-sn001)-0002-895 個字段空著保留字段8999id 12fk 1111zhangsan 23zhangsan 261234lisi zhao zhangwang主鍵唯一標(biāo)示一條-非空 唯一的字段 不要用業(yè)務(wù)相關(guān)的字段做主鍵-一個表可以用多個非空唯一的字段 但主鍵只有一個外鍵外鍵的值受限于-外鍵的值要么是的字段的字段所擁有的值 要么是 null可以保證數(shù)據(jù)的完整性E-R 到表和表的關(guān)系1.實(shí)體名表名屬性類

35、型主鍵-字段-字段類型外鍵的區(qū)分一個員工emp 1主鍵有多個顧客customer m外鍵學(xué)生m主鍵關(guān)系表中課程m主鍵外鍵 外鍵4.關(guān)系對應(yīng)(1:1 1:m m:m)寫成一個 sql數(shù)據(jù)類型varchar2(n)變長字符串char(n)-定長字符串-如果數(shù)據(jù)不夠長就補(bǔ)空格create table tablename (id fnamesnamenumber, varchar2(10),char(10);insert commit;o tablename values(1,abc,abc);selectlength(fname),length(sname) fromtablename;select

36、selectfrom tablename where fname=abcfrom tablename where sname=abc;定長就是比較長度范圍內(nèi)的值變長就是傳入什么值就比較什么值什么時候用定長當(dāng)這個字段的長度是不變的什么時候用變長號碼當(dāng)這個字段的長度是變化的name都做成定長的 -存 取 效率不高18 - 255 -237namechar(255)zhangsan 247zhangsan浪費(fèi)空間變長的-空間利用率高 255 存取效率低varchar2(255)a abcabcda abcabcdabcdtrim() select-去掉首尾空格* from tablename whe

37、re fname=trim(abc );numbernumb數(shù)字類型 10e-130 - 10 e127,s) -p 有效位 s 精度blob clobdate-大二進(jìn)制類型 4gb-大字符類型4gb英文環(huán)境下的日期默認(rèn)格式中文環(huán)境下的日期默認(rèn)格式dd-三個英文字母縮寫-yydd-1 月-yydrop table tablename;刪除表create table tablename ( id number,hirdate date);inserto tablename values(1,02-AUG-86);to_date(字段/字面值,格式);select to_date(2009-08-

38、08,yyyy-mm-dd) from yyyy四位年dual;mmdd-月-日hhmi ss-小時 默認(rèn)是 12-分鐘-秒hh24=day dy MONTHMON-幾三個字母的英文月幾縮寫三個字母的月的縮寫必須和 to_char 聯(lián)合使用select to_char(start_date,yyyy-mm-dd hh24:mi:ss day) from s_emp;select to_char(start_date,yyyy) from s_emp;查詢出三月入職的員工select last_name,start_datefrom s_emp %MAR%;from s_empwhere sta

39、rt_datelikeselect last_name,start_datewhere to_char(start_date,mm)=3; select last_name,start_date from s_empwhere to_char(start_date,mm)=03; sysdate -2011-08-29 15:25:50trunc(sysdate,dd)-2011-08-29 00:00:00 select to_char(trunc(sysdate,dd),yyyy-mm-ddfrom dual;round(sysdate,dd)-2011-08-30 00:00:00 se

40、lect to_char(round(sysdate,dd),yyyy-mm-ddfrom dual;select to_char(round(sysdate,yy),yyyy-mm-dd from dual;hh24:mi:ss)hh24:mi:ss)hh24:mi:ss)dd mmyy- 看過沒過 12 點(diǎn)-看過沒過這個月的一半-看過沒過這一年的一半trunc(sysdate+1,dd);trunc(sysdate,dd)+1;思考一下不同?trunc(sysdate+1/24,dd);這個數(shù)據(jù)不確定trunc(sysdate,dd)+1/24;當(dāng)前天的 1 點(diǎn)中如果在一個時間上加 1 代

41、表加了一天思考一下不同?add_months(sysdate,n);months_betn(d1,d2) 算兩個日期差幾個月 返回小數(shù)如果正好是整月 返回整數(shù)select months_betselect months_bet next_day(sysdate)n(sysdate,start_date) from s_emp; n(28-FEB-11,30-JUN-11) from dual;-某個日期的下一天 第二個參數(shù)是幾select to_char(next_day(sysdate,friday),yyyy-mm-dd hh24:mi:ss) from dual;如何得到一個時間的下一天

42、的這個時刻加 1 就 ok 了?select to_char(sysdate+1,yyyy-mm-dd hh24:mi:ss) from dual; last_day(sysdate)時分秒信息最后一天的這個時刻select to_char(last_day(sysdate),yyyy-mm-dd hh24:mi:ss) from dual;處理成最后一天的 9 月 1 號的 00:00:00給你一個日期得到這個日期的下一個月的開始add_months(trunc(sysdate,mm),1); trunc(last_day(sysdate)+1,dd);了時分秒信息 但默認(rèn)顯示只有 日-月的

43、縮寫-兩位年如何建表如何來表達(dá)關(guān)系 如何來設(shè)置約束create table 表名(字段名字段名類型 default 值,類型 default 值);約束:主鍵外鍵非空唯一檢查列級createid-primary key-foregin key-not null-unique-checktable test(number primary key,tid number);主鍵 非空insert表級createid唯一o test values(null,null);table test(number,tid number,primary key(id,);區(qū)別在于表級約束可以加聯(lián)合約束注意:not

44、 null 約束只有列級約束 沒有表級約束沒有聯(lián)合非空這一說建一id number 類型的主鍵name varchar2(30) 非空snochar(30) 唯一salary numbercreate table test(id namesnonumber constravarchar2(30)test_pk primary key,not null ,char(30) constratest_uk unique,salary number);回去把這個例子改成表級約束 注意 not nulluser_constras數(shù)據(jù)字典中查詢出一個表上的約束有哪些select constra_name,

45、constra_typefrom user_constras where table_name=TEST;根據(jù)約束名刪除約束的限制alter table test drop constra check 約束create table test(SYS_C0015696;idnumber constratest_pk primary key,salary numbercheck (salary1000);insert inserto testo testvalues(1,1100);values(2,900);大家回去改成表級create table test1(idnumber constrat

46、est1_pk primarykey,salary number,check (salary1000);外鍵約束外鍵某唯一性字段在子表中定義外鍵1主表(父表)顧客idcno -顧客 cnamem 子表訂單 idono訂單號fid代表誰的訂單建表先建父表后建子表父表create table customer(idnumbrimary key,cno varchar2(20),cname varchar2(30);insert子表 createido customer values(1,002,zhangsan);table corder(numbrimary key,onofidvarchar2

47、(20),number referencustomer(id);insert insert inserto oocorder cordercordervalues(1,001,null);values(2,001,1);values(3,001,1);大家回去把這個一對多的關(guān)系改成 1 對 1在理解了一對多關(guān)系的基礎(chǔ)上建兩完成一個多對多student idsno sname關(guān)系表 idsidcidcourse id cnocname查詢 id 為 1 的人的名字和訂單號select cname,o.onofrom customer c,corder owhere c.id=o.fid and

48、c.id=1;數(shù)據(jù)時 子表的外鍵要么是 null 要么是主表字段中的值事務(wù)原子性轉(zhuǎn)賬一致性性 持久性(AUCD)A200000B02000001500002000005000000/error/error/A updateupdateaccount set salary=salary-50000 where id=1;account set salary=salarywhere id=2;性inserto corder values(4,004,1);oracle 的事務(wù)是非自動提交的sqlserver 自動提交sql 的語言的分類:dql dml ddl dcltcl-select-upda

49、te-create-grantmit-沒有事務(wù)這一說insert delete非自動提交drop alter事務(wù)自動提交revokerollback savepocreate SQL SQL SQLSQLtablet(id numbrimary key,salary number);insert savepo insertrollbacko t values(1,1000); a;o t values(2,1000);to a;SQL commit;不 commit 數(shù)據(jù)在回滾段中你自己來控制主鍵?其它的數(shù)據(jù)對象補(bǔ)充序列:create sequence tests;nextvalcurrval

50、select tests.nextval fromdual;(-(10,26),(10,27)inserto customer values(tests.nextval,abc,123);create sequence 序列名increment by n ,步進(jìn) 默認(rèn)是 1 start with n,起始值 默認(rèn) 1maxvalue n/nomaxvalue,默認(rèn) nomaxvalue minvalue n/nominvalue, nocycle/cycle,默認(rèn) nocyclecache n/nocache 默認(rèn) 20注:如果 cycle 的序列到最大值后 回到默認(rèn)值 1 create se

51、quence testssincrement by 10start with 8cache 200;索引:index從頭找到尾 全表掃描有目錄-index索引查找每次查找的數(shù)據(jù)量 2%-4%索引占空間如果你的表經(jīng)常的變化 會造成索引很蜂窩實(shí)際是(10,27)B*樹rowid 18 為的物理磁盤oracle 公司培訓(xùn)資料主鍵 唯一約束 自動建立索引create indexcustomer_index on customer(cno);set autotraceon打開執(zhí)行計劃select selectselect*from fromfromcustomer; customercustomer全表

52、掃描where id=1; where cno=abc;兩個字段經(jīng)常同時出現(xiàn)在 where 之后create index customer_index1 on customer(ame);視圖,分頁? rowid 應(yīng)用視圖不占空間視圖限制數(shù)據(jù)庫的簡化查詢select max(s),max(dept_id)from(select sum(salary) s,dept_id from s_emp group by dept_id)select * from(select sum(salary) s,dept_id from s_emp group by dept_id) where s=(sele

53、ct max(ss) from (select sum(salary) ss from group by dept_id);保持?jǐn)?shù)據(jù)的獨(dú)立同一個數(shù)據(jù) 不同的表現(xiàn)create or replace view cview as select id, last_name from s_emp;select * from cview;s_emp簡單的視圖 和表的功能相同 可以在視圖上增刪改查view 有很多的限制復(fù)雜的 view分頁? 為什么?select rownum select select如果salary,last_name from s_emp order by salary;-偽列rown

54、um,salary,last_name from s_emp; rownum,salary,last_name from s_emp where rownum6;按工資排序后 取前 5 條select rownum,salary,last_name from s_emp where rownum6 order by salary; /error1 先排序select salary,last_name from s_emp order by salary;2.用 rownum 進(jìn)行where 條件過濾select rownum,salary,last_name from (select sala

55、ry,last_namefrom s_emp order by salary) where rownum11;取第 6 到第 10 條select rownum,salary,last_name from (select salary,last_name from s_emp order by salary)where rownum5;/ no rowectedselect * from (select rownum n,salary,last_name from from s_emp order by salary)where rownum5; /這個比較好(selectsalary,las

56、t_name按某個字段排序 并且取中間的幾條數(shù)據(jù) 必須三層嵌套select * from (select rownum n,salary,last_name from s_emp order by salary) where n5 and n11;from(selectsalary,last_name有一里面有重復(fù)的數(shù)據(jù)有主鍵時 nameid 12345name abc abc bcd bcdbcdage 2324232323把名字相同的只留一條id , rowid沒有主鍵id 1132222name ageabc abc bcd bcd bcd bcdbcd23242323232323把 i

57、d 和 name 相同的只留一條rowid文件名PlsqlSQL1.數(shù)據(jù)庫的技術(shù)plsql proc/c+ odbcoci-數(shù)據(jù)庫-針對 c C+-mic技術(shù)-oracle 底層的通口begindbms_output.put_line( end;o world);set serveroutput on打開輸出declare部分begin執(zhí)行部分exeception異常處理end;賦值 -比較 -:=變量的declarev_id v_namebeginnumber;varchar2(30);v_id:=10;select last_nameo where id=v_id;v_name froms

58、_empdbms_output.put_line(v_name);end;DECLAREv_idnumber; v_name varchar2(30);BEGINv_id:=10;select last_nameo v_name from s_emp where id=v_id;DBMS_OUTPUT.PUT_LINE(v_name);END;標(biāo)示符給變量-和 sql 中的規(guī)定相同游標(biāo) 子程序 類型 命名變量的語法Var_name CONSTANT typeNOT NULL :=value; const 代表常量如果你想 變量必須有初始值 可以加 not null 如果一個變量沒有初始值那變量

59、的默認(rèn)值是 null declarev_nu constant number :=10; beginv_nu:=100; -error dbms_output.put_line(v_nu);end;數(shù)據(jù)類型:數(shù)字類型(binary_組合類型:eger)字符類型date類型table 類型類型ref cursor%typedeclare-取表中某個字段的類型v_ids_em%type;v_name s_emp.last_name%type; v_count number;beginv_id:=10;select last_nameo v_name from s_emp where id=v_id

60、;dbms_output.put_line(v_name);end;record 類型declaretypetype_rec is record(idnumber,name varchar2(30);var_rec type_rec;- 用 type_rec 類型定義一個變量 var_rec var_rec2 type_rec;begin-select-select selectid,last_nameo var_rec from s_emp where id=1; from s_emp where id=1;/erroro var_rec.id,var_ fromido va

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論