class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
A.ZYXX
B.ZYXY
C. YXYZ
D.XYZX
public interface IService {String NAME=“default”;}
默认类型等价表示是哪一项:
- A.public String NAME=“default”;
- B.public static String NAME=“default”;
- C .public static final String NAME=“default”;
- D.private String NAME=“default”;
String s1="abc"+"def";//1
String s2=new String(s1);//2
if(s1.equals(s2))//3
System.out.println(".equals succeeded");//4
if(s1==s2)//5
System.out.println("==succeeded");//6
A.行4,行6都不执行
B.行6执行,行4不执行
C. 行4执行,行6不执行
D.行4,行6都将执行
public class TestClass {
private static void testMethod(){
System.out.println("testMethod");
}
public static void main(String[] args) {
((TestClass)null).testMethod();
}
}
A.编译不通过
B.编译通过,运行异常,报NullPointerException
C.编译通过,运行异常,报IllegalArgumentException
D.编译通过,运行异常,报NoSuchMethodException
E.编译通过,运行异常,报Exception
F. 运行正常,输出testMethod
下面有关JAVA异常类的描述,说法错误的是?
- A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
- B.非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
- C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
- D. RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
.将一颗有 100 个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根节点编号为 1 ,则编号为 98 的节点的父节点编号为
- A.47
- B. 48
- C.49
- D.50
n 个节点的完全二叉树,最多可以有多少层?
- A.n/2
- B. log(n)+1(向下取整)
- C.n-1
- D.n
不属于关系数据库的是( )
- A.Oracle
- B. Essbase
- C.SQL Server
- D.DB2
关于关系型数据库,正确且全面的描述是:( )
- A.在关系模型中数据的逻辑结构是一张二维表
- B.DML是介于关系代数和关系演算之间的语言,它充分体现了关系数据库语言的特性和优点
- C.关系模型的完整性规则是对关系的某种约束,分为实体完整性和参照完整性约束
- D. 关系数据库中,关系也称为数据库,元组也称为行,属性也称为列
B选项应为“SQL是介于关系代数和关系演算之间的语言,它充分体现了关系数据库语言的特性和优点”,SQL包含了DDL、DCL和DML;C选项漏掉了用户定义完整性,应为“关系模型的完整性规则是对关系的某种约束,分为实体完整性、参照完整性约束和用户定义完整性”;D选项中,关系是一张表,而不是数据库。应为“关系数据库中,关系也称为表,元组也称为行,属性也称为列”;故选A。
一个关系数据库文件中的各条记录 ( ) 。
- A.前后顺序不能任意颠倒,一定要按照输入的顺序排列
- B. 前后顺序可以任意颠倒,不影响库中的数据关系
- C.前后顺序可以任意颠倒,但排列顺序不同,统计处理的结果就可能不同
- D.前后顺序不能任意颠倒,一定要按照关键字字段值的顺序排列
关系数据库规范化的目的是为了解决关系数据库中的( )
- A. 插入、删除异常及数据冗余问题
- B.查询速度低的问题
- C.数据操作复杂的问题
- D.数据安全性和完整性保障的问题
B选项中,查询只是展示数据的方法,数据库的核心肯定不是这里。C选项嘛,这个应该是数据结构更关心的问题,而不是数据库本身。至于D选项,抱歉文件系统表示你就是个弟弟。所以选A。数据库本身就是管理数据的,肯定着眼于数据本身,自然是为了解决数据本身相关的问题啦!
SQL中,下列涉及空值的操作,不正确的是?
- A.name IS NULL
- B. name= NULL
- C.namee IS NoT NULL
- D.NoT(name IS NULL)
在SQL中,NULL是一种特有的数据类型,其等价于没有任何值、是未知数。NULL与0、空字符串、空格都不同。SQL默认情况下对WHERE XX!=NULL和WHERE XX=NULL的判断会永远返回0行,却不会提示语法错误。
在满足实体完整性约束的条件下
- A. 一个关系中应该有一个或多个候选关键字
- B.一个关系中只能有一个候选关键字
- C.一个关系中必须有多关键字个候选
- D.一个关系中可以没有候选关键字
数据库完整性分为实体完整性、域完整性和参照完整性。实体完整性要求表中的主键字段不能为空且不能重复;域完整性要求表中数据都在有效范围内;参照完整性保证了相关联的表的数据一致性。
约束是保证表中数据完整性和一致性的手段,分为主键约束、外键约束、检查约束、唯一约束、非空约束五种。不管哪种约束,体现在表中都可以有1列或多列
若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是?
- A.一对一
- B. 一对多
- C.多对一
- D.多对多
SQL 查询语句中 WHERE 、 GROUP BY 、 HAVING 这些关键字区别和用法总结错误的是
- A.HAVING在查询语句中必须依赖于GROUP BY
- B.WHERE子句用来限制SELECT语句从表中指定选取的行
- C.GROUP BY子句用来分组WHERE子句的输出结果集
- D. HAVING子句用来从分组的结果中筛选列
HAVING是从分组结果中筛选数据的(行),而不是筛选列的
已知表T1中有2行数据,T2中有3行数据,执行SQL语句,“select a.* from T1 a,T2 b”后,返回的行数为
- A.2
- B.3
- C.5
- D. 6
关联查询没有任何条件时,是返回笛卡尔积的结果,行数为乘积,列数为两张表的列相加
Mysql查询时,只有满足联接条件的记录才包含在查询结果,这种联接是
- A.左联接
- B.右联接
- C. 内联接
- D.全联接
只有内联接始终会按照联接条件进行过滤,外联接当外表中的数据不满足联接条件时,也会返回结果
关于JDBC以下说法错误的是
- A. DriverManager可以获取数据库连接
- B.DataSource获取的数据库连接是可以重用的
- C.DataSource获取的数据库连接也需要关闭物理连接
- D.DataSource获取数据库连接也需要加载数据库驱动
下列说法错误的是
- A.使用JDBC拥有更好的可移植性
- B.JDBC制定了统一的数据库编程规范,需要由数据库厂商提供驱动包
- C. JDBC也可以使用来连接NoSQL数据库,比如Redis
- D.JDBC也可以执行DDL指令
关于PreparedStatement与Statement描述错误的是
- A.一般而言,PreparedStatement比Statement执行效率更高
- B.PreparedStatement会预编译SQL语句
- C.Statement每次都会解析/编译SQL,确立并优化数据获取路径
- D. Statement执行扫描的结果集比PreparedStatement大
1、查询男女员工的平均工资
2、查询各部门的总薪水
3、查询总薪水排名第二的部门
4、查询姓名重复的员工信息
5、查询各部门薪水大于10000的男性员工的平均薪水
select sex, avg(salary) from emp group by sex;
select depart, sum(salary) from emp group by depart;
select depart, sum(salary) form emp group by depart having order by (salary) desc limit 1;
select * from emp as e1, emp as e2 where s1.name = s2.name;
select depart, avg(salary) from emp where sex = 'male' and salary > 10000 group by depart;
1:select sex,avg(salary) from emp group by sex;
说明:平均值使用聚合函数avg,并且按照性别男女分组,group by 性别字段
2:select depart,sum(salary) from emp group by depart;
说明:总薪水使用聚合函数sum取薪水字段求和,并且按照部门字段分组,group by 部门字段
3:select depart,sum(salary) from emp group by depart order by sum(salary) desc limit 1,1;
说明:order by语句先按照总薪水排序,之后取第二条数据,可以使用分页,每一页1条数据,第二页就是该结果
4:select name from emp group by name having count(name)>1;
说明:名字重复,说明同一个名字有多条数据,可以先按照名字分组,分组之后再过滤行数大于1的,就表示同一个名字至少有2条记录,重复了
5:select depart,avg(salary) from emp where salary>10000 and sex=‘男’ group by depart;
说明:这里需要注意题目要求是查询薪水大于10000的男性员工,这个是在按部门分组前就过滤,在过滤后的结果集中再查询各个部门的平均薪水
现在有员工表、部门表和薪资表。部门表depart的字段有depart_id, name;员工表 staff 的字段有 staff_id, name, age, depart_id;薪资表salary 的字段有 salary_id,staff_id,salary,month。
(问题a):求每个部门’2016-09’月份的部门薪水总额
(问题b):求每个部门的部门人数,要求输出部门名称和人数
(问题c):求公司每个部门的月支出薪资数,要求输出月份和本月薪资总数
select depart, sum(salary) from salary, staff
where staff.staff_id = staff.staff_id
and month = '2016-09' group by depart_id;
select depart_name, count(staff_id) from depart, staff
where depart.depart_id = staff.depart_id
group by depart.depart_id;
select month, sum(salary) from salary, staff
where salary.staff_id = staff.staff_id
group by depart_id by month;
(问题a):求每个部门’2016-09’月份的部门薪水总额
答案:
SELECT
dep.NAME,
sum( sal.salary )
FROM
salary sal
JOIN staff sta ON sal.staff_id = sta.staff_id
JOIN depart dep ON sta.depart_id = dep.depart_id
WHERE
YEAR ( sal.MONTH ) = 2016
AND MONTH ( sal.MONTH ) = 9
GROUP BY
dep.depart_id
说明:
mysql中年和月的函数分别是year(字段),month(字段)
查询要求的是每个部门的信息,所以要按照部门进行分组,部门和员工为1:m,员工与薪水为1:m,查询要求有部门,有薪水,所以必须关联3张表查询
(问题b):求每个部门的部门人数,要求输出部门名称和人数
答案:
SELECT
dep.NAME,
count( sta.staff_id )
FROM
staff sta
JOIN depart dep ON dep.depart_id = sta.depart_id
GROUP BY
sta.depart_id
说明:查询要求的信息有部门,有人数,人数只能从员工表中获取,所以关联表为部门表/员工表。按照部门id分组查询员工id的行数
(问题c):求公司每个部门的月支出薪资数,要求输出月份和本月薪资总数
答案:
SELECT
dep.NAME,
sal.MONTH,
sum( sal.salary )
FROM
depart dep
JOIN staff sta ON dep.depart_id = sta.depart_id
JOIN salary sal ON sta.staff_id = sal.staff_id
GROUP BY
dep.depart_id,
sal.MONTH
说明:按照题目要求,查询信息有部门/月/每个部门每月薪资总额,其中薪水信息再薪水表中,每个员工可以有多条薪资记录(不同时间)。所以需要按照部门分组,再按照月份分组,查询分组的部门在不同月份下的总薪水
有两个表分别如下:
表A(varchar(32) name, int grade)
数据:zhangshan 80, lisi 60, wangwu 84
表B(varchar(32) name, int age)
数据:zhangshan 26, lisi 24, wangwu 26, wutian 26
写SQL语句得到如下查询结果:
| NAME | GRADE | AGE |
| --------- | ----- | ---- |
| zhangshan | 80 | 26 |
| lisi | 60 | 24 |
| wangwu | 84 | 26 |
| wutian | null | 26 |
select a.name, a.grade, b,age from B left join A where A.name = B.name;
SELECT
B.NAME,
A.grade,
B.age
FROM
B left join A
ON
A.NAME = B.NAME
说明:主要考察使用关联查询时需要使用内联还是外联,这里wutian再A表中没有记录,但还是需要返回结果,所以应该将B表作为外表进行外连接查询
编写一个SQL查询,获取Employee表中第二高的薪水(Salary)【陌陌科技2020届校招笔试题】
±----±------+
| Id | Salary|
±----±------+
| 1 | 100 |
±----±------+
| 2 | 200 |
±----±------+
| 3 | 300 |
±----±------+
例如上述Employee表,SQL查询应该返回200作为第二高的薪水。如果不存在第二高的薪水,那么查询应该返回null。
±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
select salary as SecondHighestSalary from employee order by salary asc limit 1;
SELECT
max( Salary ) AS SecondHighestSalary
FROM
Employee
WHERE
Salary < ( SELECT max( Salary ) FROM Employee );
说明:这里使用标准sql支持的语法,先查找到最大的薪水,再查询所有薪水薪资中,比最大薪水小的结果,再查询这个结果中的最大值。还可以考虑使用简单的分页操作,limit 1,1。注意limit是mysql独有的关键字,不是标准sql。
已知T1和T2的字段定义完全相同,T1有5条不同数据,T2有5条不同数据,其中T1有2条数据存在表T2中,使用UNION语句查询这些数据,要求重复数据不出现
select * from t1 union select * from t2;
SELECT * FROM T1 UNION SELECT * FROM T2
说明:union不能出现重复,union all会出现重复数据。根据题目要求使用union