数据库面试Word格式文档下载.docx
- 文档编号:17635134
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:11
- 大小:19.97KB
数据库面试Word格式文档下载.docx
《数据库面试Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库面试Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
最低限额;
hisal:
最高限额;
dual:
系统自带的一张空表;
可用于计算数据:
select2*3fromdual;
**sql_function1**********************************************************
selectlower(ename)fromemp;
取出的名字全部变成小写。
selectenamefromempwherelower(ename)like'
_a%'
;
取出的名字变成小写后
不含字母a
selectsubstr(ename,2,3)fromemp;
从第二个字符截,截取三个字符。
selectcha(65)fromdual;
将数字转化为字符(显示为a)。
selectascii('
A'
)fromdual;
将字符转化为数字。
selectround(23.652)fromdual;
(显示24)
selectround(23.652,2)fromdual;
(显示23.65)
selectround(23.652,-1)fromdual;
(显示20)
selectto_char(sal,'
$99,999.9999'
)fromemp;
强制转化为指定的格式。
L0000.0000'
同上。
selectto_char(hiredate,YYYY-MM-DDHH:
MI:
SS)fromemp;
对时间格式显示处
理。
selectto_char(sysdate,YYYY-MM-DDHH:
12进制。
selectto_char(sysdate,YYYY-MM-DDHH24:
24进制。
***********************************************************************
**sql_function2*******************************************************
selectename,hiredatefromempwherehiredate>
to_date('
1981-2-20'
12:
34:
52,'
YYYY-MM-DDHH24:
SS'
);
函数to_date将字符转化为时间格式。
selectsalfromempwheresal>
to_number('
$1,250.00'
'
$9,999.99'
函数to_number将字符转化为数字格式,以作比较。
selectenamesal*12+nvl(comm0)fromemp;
函数nvl作用为当comm为null的时候当作处理,避免了comm为null给结果带来的不便。
*************************************************************************
**group_function*******************************************************
selectmax(sal)fromemp;
输出薪水值最高的。
selectmin(sal)fromemp;
输出薪水值最低的。
selectavg(sal)fromemp;
输出平均薪水值。
selectto_char(avg(sal),'
99999999.99'
)fromemp;
按照指定格式输出平均薪水
值。
selectround(avg(sal),2)fromemp;
精确到小数点后面2位。
selectsum(sal)fromemp;
输出薪水值的总和。
selectcount(*)fromemp;
求出一共有多少条记录。
selectcount(*)fromempwheredeptno=10;
求部门为10号的记录条数。
selectcount(ename)fromemp;
求一共有几个名字。
selectcount(comm)fromemp;
求非空comm的记录条数。
selectcount(deptno)fromemp;
selectcount(distinctdeptno)fromemp;
**group_by*************************************************************
selectdeptno,avg(sal)fromempgroupbydeptno;
将部门薪水平均分组。
selectdeptno,job,max(sal)fromempgroupbydeptno;
按组合分组。
selectename,max(sal)fromempwheresal=(selectmax(sal)fromemp);
selectenamemax(sal)fromempgroupbydeptno;
这样是错误的。
selectdeptnomax(sal)fromempgroupbydeptno;
这样可行。
************************************************************************
**having****************************************************************
selectavg(sal),deptnofromempgroupbydeptno;
selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)>
2000;
having是对分组进行限制。
1selectavg(sal)
选择
2fromemp
表原
3wheresal>
1200
条件过滤
4groupbydeptno
分组
5havingavg(sal)>
1500对结果进行限制
6orderbyavg(sal)desc对产生的结果进行排序
**********************************************************************
**子查询**************************************************************
select语句里面套另外一个select语句。
selectename,salfromempwheresal>
(selectavg(sal)fromemp);
selectename,salfromempjoin(selectmax(sal)max_sal,deptnofromempgroupbydeptno)ton(emp.sal=t.max_salandemp.deptno=t.deptno);
**self_table**********************************************************
自连接:
selecte1.ename,e2.enamefromempe1,empe2wheree1.mgr=e2.empno;
把一个表当成两个来使用。
**sql1999_table_connections********************************************
1999年标准:
selectename,dnamefromempcrossjoindept;
旧:
新:
selectename,dnamefromempjoindepton(emp.deptno=deptno);
selectename,dnamefromempjoindeptusing(deptno);
(了解即可,不推荐使
用)
selectename,gradefromempejoinsalgradeson(e.salbetweens.losalands.hisal);
左外连接:
selecte1.ename,e2.enamefromempe1leftjoinempe2on(e1.mgr=e2.empno);
右外连接:
selectename,dnamefromemperightouterjoindeptd(e.deptno=d.deptno);
全外连接:
selectename,dnamefromempefulljoindeptd(e.deptno=d.deptno);
**求部门平均薪水等级****************************************************
selectdeptno,avg(grade)from(selectdeptno,ename,gradefromempjoinsalgradeson(t.avg_salbetweens.losalands.hisal))tgroupbydeptno;
**部门中那些人是经理人**************************************************
selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
**不用组函数求薪水的最高值(面试题)************************************
selectdistinctsalfromempwheresalnotin(selectdistincte1.salfromempe1joinempe2on(e1.sal<
e2.sal));
**平均薪水最高的部门的编号****************************************
selectdeptno,avg_salfrom
(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)
whereavg_sal=
(selectmax(avg_sal)from
(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)
)
*********************************************************************
**求平均薪水最高的部门的部门名称
selectdnamefromdeptwheredeptno=
(
selectdeptno,avg_salfrom
(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)
(selectmax(avg_sal)from
)
方法二:
whereavg_sal=
(selectmax(avg_sal)from
(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)
**求平均薪水的等级最低的部门的部门名称
**************************************
**creatnewuserandinsert****************************************
1--backupscott
2--createuser
createuserwpidentifiedbywpdefaulttablespaceusers
quota10Monusers;
(创建新用户)
grantcreatesession,createtable,createviewtowangpeng(赋予新用
户权限)
3--importthedata
insertintodeptvalues(50,'
game'
'
bj'
插入数据。
insertintodept(deptno,dname)values(60,'
同上。
insertintodept2select*fromdept;
数据又挨着插了一遍。
rollback;
回退命令。
createtabledept2asselect*fromdept;
备份数据。
**rownum***************************************************************
selectemp,enamefromempwhererownum<
=5;
取前四行。
rownum只能和<
和<
=使用,大于号和等于号不支持。
selectename,salfrom
(selectename,salfromemporderbysaldesc)whererownum<
selectename,salfrom
(
selectename,sal,rownumrfrom
(selectename,salfromemporderbysaldesc)
)wherer>
=6andr<
=10;
求薪水最高的第6到第10名雇员。
**update*******************************************************
updateemp2setsal=sal*2,ename=ename||'
-'
wheredeptno=10;
更改。
deletefromemp2;
删除。
****************************************************************
**创建新表与约束****************************************************
createtablestu
idnumber(6)primarykey,
//主键约束,主键非空且唯一,也可以写在后面
constraintstu_id_pkprimarykey(id),
namevarchar2(20)constraintstu_name_nnnotnull,
//notnull指定
必须为非空
sexnumber
(1),
agenumber(3),
sdatedate,
gradenumber
(2)default1,
classnumber(4),
emailvarchar2(50),
constraintstu_name_email_uniunique(email,name)
//email与name组合
唯一
外键参考的值段必须是主键,加上constraintstu_class_fkforeign(class)referenceclass(id),
**alter修改表结构***************************************************
altertablestuadd(addrvarchar2(100));
//添加字段
altertablestudrop(asddr);
altertablestumodify(asddrvarchar2(50));
altertablestudropconstraintstu_class_fk;
//删除约束条件
altertablestuaddconstraintstu_class_fkforeignkey(class)referenceclass(id);
//重新添加约束条件
**查询系统的表**********************************************
selecttable_namefromuser_tables;
//当前用户下所有的表
selectview_namefromuser_views;
//当前用户下的视图
selectconstraint_name,table_namefromuser_constraints;
descdictionary
//数据字典表
******************************************************************
**索引********************************************************
createindexidx_stu_emailonstu(email);
//创建索引
dropindexidx_stu_email;
//删除索引
selectindexidx_namefromuser_indexes;
desc(视图的名称)
createviewv$_stuasselectid,name,agefromstu;
只给予查看id,name,age的权力,保护私有数据。
**sequence序列*****************************************************
createsequenceseq;
//创建序列
selectseq.nextvalfromdual;
insertintoarticlevalues(seq.nextval,'
a'
b'
//添加数据*********************************************************************
**三范式**********************************************************
第一范式:
要有主键且列不可分。
第二范式:
不能存在部分依赖:
非主键的字段不能依赖于组合主键的一部分。
第三范式:
不能存在传递依赖。
*********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 面试
![提示](https://static.bdocx.com/images/bang_tan.gif)