• 数据笔试题


    学生表:STUDENT(S#,SNAME,SAGE,SSEX)
    课程表:COURSE(C#,CNAME,T#)
    成绩表:SC(S#,C#,SCORE)
    教师表:TEACHER(T#,TNAME)
    其中,
    1)学生表里的字段含义:S#代表学号,SNAME代表学生姓名,SAGE代表学生年龄,SSEX代表学生性别
    2)课程表里的字段含义:C#代表课程编号,CNAME代表课程名字,T#代表教师编号,
    3)成绩表 S#代表学号,C#代表课程编号,SCORE代表成绩
    4)教师表的字段含义: T#代表教师编号,TNAME代表教师姓名
    1.查询课程编号为“001”的课程比“002”的课程成绩高的所有学生的学号
    select x.sno,x.score,y.score from sc x,sc y where x.cno=1001 and y.cno=1002 and x.sno=y.sno and x.score > y.score
    2.查询平均成绩大于60分的学生的学号和平均成绩
    select sno,avg(score) from sc group by sno having avg(score)>60
    3.查询所有学生的学号、姓名、选课数、总成绩
    select sc.sno,sname,count(cno),sum(score) from student join sc on student.sno=sc.sno group by sc.sno,sname
    4、查询姓“悟”的老师的个数
    select count(Tname) from teacher where Tname like '悟%'
    5、查询没学过“悟空”老师课的学生的学号、姓名(对原始SC表稍作修改,令1,2号学生没有学过悟空的课
    delete from sc where sno=1 and cno=1009
    delete from sc where sno=2 and cno=1009)
    select sno,sname from student where sno not in(select sno from SC where cno in(select cno from course where tno
    in(select tno from teacher where tname='悟空')))
    6、查询学过“悟空”老师所教的所有课的同学的学号、姓名(对原始表Course,SC稍作修改,让悟空交2门课
    insert into course values('1010','Exercise','TS04')insert into sc values('8','1010','75'),('9','1010','92'),('10','1010','80');)
    8、查询课程编号为“1002”的总成绩
    select sum(score) from sc where cno='1002'
    9、查询所有课程成绩小于60分的学生的学号、姓名
    select sno,sname from student where sno in(select sno from SC where score <60)


    1、触发器的作用?
    触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
    2、什么是存储过程?用什么来调用?
    存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。
    3、存储过程的优缺点?
    优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差
    4、存储过程与函数的区别
    存储过程 函数
    用于在数据库中完成特定的操作或者任务(如插入、删除等) 用于特定的数据(如选择)
    程序头部声明用procedure 程序头部声明用function
    程序头部声明时不需描述返回类型 程序头部声明时要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句
    可以使用in/out/in out 三种模式的参数 可以使用in/out/in out 三种模式的参数
    可作为一个独立的PL/SQL语句来执行 不能独立执行,必须作为表达式的一部分调用
    可以通过out/in out 返回零个或多个值 通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量
    SQL语句(DML 或SELECT)中不可调用存储过程 SQL语句(DML 或SELECT)中可以调用函数
    5、索引的作用?和它的优点缺点是什么?
    索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
    6、什么样的字段适合建索引
    唯一、不为空、经常被查询的字段
    7、索引类型有哪些?
    逻辑上:
    Single column 单行索引
    Concatenated 多行索引
    Unique 唯一索引
    NonUnique 非唯一索引
    Function-based 函数索引
    Domain 域索引 物理上:
    Partitioned 分区索引
    NonPartitioned 非分区索引
    B-tree :
    Normal 正常型B树
    Rever Key 反转型B树 Bitmap 位图索引
    8、什么是事务?什么是锁?
    事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
    9、什么叫视图?游标是什么?
    视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
    10、视图的优缺点
    优点: 1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2 )用户通过简单的查询可以从复杂查询中得到结果。 3 )维护数据的独立性,试图可从多个表检索数据。 4 )对于相同的数据可产生不同的视图。 缺点: 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据
    11、列举几种表连接方式,有什么区别?
    内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。
    12、主键和外键的区别?
    主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。
    13、在数据库中查询语句速度很慢,如何优化?
    1.建索引 2.减少表之间的关联 3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据 量大的表排在前面 4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据 5.尽量用PreparedStatement来查询,不要用Statement
    14、数据库三范式是什么?
    第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上
    15、union和union all有什么不同?
    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。 UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。
    16、Varchar2和varchar有什么区别?
    Char的长度是固定的,而varchar2的长度是可以变化的,比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,而同样的varchar2(20)只占了3个字节,20只是最大值,当你存储的字符小于20时,按实际长度存储。 char的效率要被varchar2的效率高。 目前varchar是varchar2的同义词,工业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能力,oracle建议使用varchar2而不是varchar
    17、Oracle和Mysql的区别?
    1)库函数不同。 2)Oracle是用表空间来管理的,Mysql不是。 3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。 4)分页查询时候时候,mysql用limit oracle用rownum
    mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. //如果只给定一个参数,它表示返回最大的记录行数目: mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 //换句话说,LIMIT n 等价于 LIMIT 0,n。 5)sql的语法的不同。

    18、Oracle语句有多少类型
    Oracle语句分三类:DDL、DML、DCL。 DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。 DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。 DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限
    19、oracle分页查询语句
    使用rownum,两种如下: 第一种: select * from (select t.*,rownum row_num from mytable t) b where b.row_num between 1 and 10 第二种: select * from ( select a.*, rownum rn from mytable a where rownum <= 10 ) where rn >= 1 使用rowid, 如下: select * from scott.emp where rowid in (select rd from (select rowid as rd ,rownum as rn from scott.emp ) where rn<=6 and rn>3)
    20、从数据库中随机取50条
    select * from (select * from t_example order by dbms_random.random) where rownum <= 50
    21、order by与group by的区别
    order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。
    22、commit在哪里会运用
    oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。 执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件。
    23、行转列、列换行怎么转
    1)使用decode函数 2)使用case when语句
    24、什么是PL/SQL?
    PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。
    25、序列的作用
    Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。
    26、表和视图的关系
    视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。 表就是关系数据库中实际存储数据用的。
    27、oracle基本数据类型
    1)字符串类型 char、nchar、varchar、varchar2、nvarchar2 2)数字类型 number、integer 3)浮点类型 binary_float、binary_double、float 4)日期类型 date、 timestamp 5)LOB类型 blob、clob、nclob、bfile
    28、truncate与 delete区别
    TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
    TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
    TRUNCATE TABLE :删除内容、释放空间但不删除定义。
    DELETE TABLE: 删除内容不删除定义,不释放空间。
    DROP TABLE :删除内容和定义,释放空间。
    29、oracle获取系统时间
    select to_char(sysdate, 'yyyy-MM-dd HH24:mi:ss') from dual;
    30、oracle怎么去除去重
    使用distinct关键字
    31、现在有表:
    A(id ,name,regdate) B(id,groupid) C(id,name2) 写出下面的SQL语句 A)统计A表中每个月注册用户数 select count(*),to_char(regdate,'yyyymm') from A group by to_char(regdate,'yyyymm'); B)统计A表中有姓名相同的用户数 select count(*) from (select name from A group by name having count(*) >1); C)如果表A中有姓名相同的用户,把相同的查出,写入表C中 nsert into C(name2) select name from A group by name having count(*) >1; D)A中ID有多个相同的数据,A中姓名相同的ID只保留注册时间最大的数据 delete from E where e.regdate < (select max(regdate) from a X where E.id = X.id);
    32、现有表:
    Student(S#,SN,SD)学生表 Course(C#,CN,T#)课程表 SC(S#,C#,score)成绩表 1.查询选了课程‘税收’的学生的学号和名字 答: select SN,SD from Student where S# in( select S# from Course C , SC where C.C#=SC.C# and CN= ’税收基础’); 2.查询选课数量大于5的学生的学号和名字 答: select SN,SD from Student where S# in ( select S# from SC group by S# having count(distinct C#) > 5); ) 3.建立一个学生表students,包括name,age,head_teacher,id,score(姓名,年龄,班主任,学号,成绩) Create table students ( Id number(9) not null primary key, Name varchar2(40) not null, Age int check(age between 0 and 100), Head_teacher vachar2(40), Score float ); 4.对上表插入一条记录,姓名:张三,年龄:18,班主任:李四,学号:22 Insert into student(id,name,age,head_teacher) values(‘22’,’张三’,’18’,’李四’); 5.对上表中的age+name创建一个索引,并说明它的作用和使用方法 Create index student_index on students(age,name);
    33、怎样把这样一个表(表名:tmp_table_201307)
    year month amount 2012 1 1.1 2012 2 1.2 2012 3 1.3 2012 4 1.4 2012 4 1.6 2013 1 2.1 2013 2 2.2 2013 2 2.2 2013 3 2.3  2013 4 2.4   查成这样一个结果   year m1 m2 m3 m4   2012 1.1 1.2 1.3 3   2013 2.1 4.4 2.3 2.4   Select   year,   Sum(case when month = 1 then amount else 0 end) as m1,   Sum(case when month = 2 then amount else 0 end) as m2,   Sum(case when month = 3 then amount else 0 end) as m3,   Sum(case when month = 4 then amount else 0 end) as m4   From tmp_table_201307 a   Group by year   Order by 1;
    34、数据库中有一张表ismg_icp_flow,结构如下
    SQL> desc ismg_icp_flow Name Null Type ———————————————————————————————— ICPNO NOT NULL VARCHAR2(6) SERVICE_ID NOT NULL VARCHAR2(10) STAT_MIN NOT NULL DATETIME MT_RECV_OK NOT NULL NUMBER(10) 请写出一条SQL语句同时满足以下3个条件: 计算MT_RECV_OK的总和(显示为total),并以此对结果集进行升序排序 以ICPNO和SERVICE_ID两个字段进行分组 所得出数据的STAT_MIN必须为大于2003年1月1号0时0分并且小于2003 年2月1号0时0分 期望的输出结果如下: ICPNO SERVICE_ID TOTAL ———— —————— ———————————— 901001 7700 271965 901001 7800 3857795 答: select ICPNO,SERVICE_ID,sum(MT_RECV_OK) TOTAL from ismg_icp_flow where STAT_MIN between to_date('2003-1-1','yyyy-mm-dd') and to_date('2003-2-1','yyyy-mm-dd') group by ICPNO,SERVICE_ID order by TOTAL;

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/dqh123/p/11179504.html
Copyright © 2020-2023  润新知