每日一刷与题解:Java基础知识+sql

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一刷与题解:Java基础知识+sql相关的知识,希望对你有一定的参考价值。

JAVA基础知识题

在这里插入图片描述
答案:C
题解:
在这里插入图片描述
在这里插入图片描述
答案:A
题解:可以直接用类名调用的是静态方法

在这里插入图片描述
答案:A
题解:面向对象三大特征:封装、继承、多态

在这里插入图片描述
答案:D
题解:这题大意了,知识点没记牢吧,因为前段时间在学mysql,mysql里面length方法是计算的字节数,而java的length是算的字符长度,而中文是一个字符,两个字节,所以答案选D

在这里插入图片描述
答案:B
题解:这题考得比较细。
B、synchronized关键字实并不属于方法签名的一部分,子类的同名方法可以覆盖父类的对应方法,只不过synchronized修饰符不会被继承,也就是说子类覆盖后子类的对应方法就不同步了,但是可以调用的。这个时候调用父类的对应方法还是可以同步的。

在这里插入图片描述
答案:B
题解:这里会进行自动拆箱和装箱。第一步会自动拆箱,第二个equals方法必须是对象,所以会进行装箱。

在这里插入图片描述
答案:C
题解:a是类中的成员变量,存放在堆区;b、c都是方法中的局部变量,存放在栈区

在这里插入图片描述
答案:AC
题解:B、抽象类可以定义普通成员变量而接口不可以,但是抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰
D、java支持单继承,却可以实现多个接口

SQL语句题

SQL15:查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息

//方法一:mod函数
select *
from employees
where mod(emp_no, 2) = 1
and last_name != "Mary"
order by hire_date desc;

//方法二:mod运算符
select *
from employees
where emp_n o% 2 = 1 
and last_name != 'Mary'
order by hire_date desc

//方法三:&位运算
SELECT *
FROM employees
WHERE emp_no & 1
AND last_name <> 'Mary'
ORDER BY hire_date DESC;

SQL16:统计出各个title类型对应的员工薪水对应的平均工资avg

//内连接+分组+排序
select t.title,avg(s.salary)
from salaries as s 
join titles as t
on s.emp_no = t.emp_no
where s.to_date = '9999-01-01'
AND t.to_date = '9999-01-01'
group by title
order by avg(s.salary);

SQL:17获取薪水第二多的员工的emp_no以及其对应的薪水salary

//先排序,再从第1条(下标从0开始,实际上是第一条之后)开始显示一条
select emp_no, salary
from salaries
order by salary desc
limit 1,1;

SQL18:查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成

//先查询出最大工资,然后筛选出除了最大工资外的最大工资(也就是第二大的工资)
select e.emp_no,s.salary,e.last_name,e.first_name
from employees e
join salaries s 
on e.emp_no = s.emp_no 
and  s.to_date = '9999-01-01'
and s.salary = (
    select max(salary)
    from salaries
    where salary < (
        select max(salary) 
        from salaries 
        where to_date = '9999-01-01'
    )
    and to_date = '9999-01-01'
)

//如果要求第n大的数,我们可以发现第一个方法不够通用,所以下面有个比较通用的方法,能够求出第n大的数
//先自连接,然后 当s1<=s2链接并以s1.salary分组时一个s1会对应多个s2,去重之后的数量就是对应的名次
//这个方法相对来说难理解一点,但是对于逻辑的锻炼和扩展还是有帮助的
select e.emp_no,s.salary,e.last_name,e.first_name
from employees e
join salaries s 
on e.emp_no = s.emp_no 
and s.to_date = '9999-01-01'
and s.salary = (
     select s1.salary
     from salaries s1
     join salaries s2 
     on s1.salary <= s2.salary 
     and s1.to_date = '9999-01-01' 
     and s2.to_date = '9999-01-01'
     group by s1.salary
     having count(distinct s2.salary) = 2
)

SQL19:查找所有员工的last_name和first_name以及对应的dept_name

//三表连接
select e.last_name, e.first_name, d.dept_name
from employees e 
left join dept_emp de 
on e.emp_no = de.emp_no
left join departments d 
on de.dept_no = d.dept_no;

以上是关于每日一刷与题解:Java基础知识+sql的主要内容,如果未能解决你的问题,请参考以下文章

每日一刷与题解:Java基础知识+sql

每日一刷与题解:Java基础知识+sql

每日一刷与题解:Java基础知识+sql

每日一刷与题解:Java基础知识+sql

每日一刷与题解:Java基础知识+sql

每日一刷与题解:Java基础知识+sql