JAVA 几道面试题
2013-03-05 17:20
106 查看
1.如何用一条语句把一张表的数据插入到另一张数据库表中?
2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?
3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?
A表:
B表:
4.有如下几个类,我先运行TestA,再运行TestB,那么:
class A:
Java代码
public class A {
public static int a = 6;
}
class TestA:
Java代码
public class TestA {
public static void main(String args[]) {
A a = new A();
a.a++;
System.out.println(a.a);
}
}
class TestB:
Java代码
public class TestB {
public static void main(String args[]) {
A b = new A();
System.out.println(b.a);
}
}
(1)运行TestA的时候输出的结果是什么?
(2)运行TestB的时候输出的结果是什么?
(3)运行TestA和TestB的结果为什么相同或不相同?
解答:
1.如何用一条语句把一张表的数据插入到另一张数据库表中?
Sql代码
insert into tableA select * from tableB
2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?
Sql代码
select * into tableB from tableA;
-------或者是下面这种写法
create table tableB as select * from tableA;
3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?
A表:
B表:
这里我们用一个t_student表来表示A表,其建表语句如下所示:
Sql代码
create table t_student(name varchar2(4), course varchar2(4), score int);
那么这个时候要用一条SQL语句把A表的数据查询出B表的结果,我们可以如下定义我们的SQL语句:
Sql代码
这条语句的总体思路是:
先用分组的形式查询出每个人的总成绩
用case when的形式把课程列分为多列,这样满足的那一列的成绩就是当前人当前课程的成绩,其他的成绩在当前行为空
姓名 语文 数学 英语
---- ---------- ---------- ----------
张三 60
张三 75
张三 70
李四 68
李四 80
李四 65
把上述两个结果按照相同的姓名连接起来并按照姓名和总分分组,这样我们查询出来的结果就可以显示姓名和总分,那么我们没有按照成绩进行分组,那么当我们用分组语句的时候该如何查询出我们的成绩呢?这个时候sum就起作用了,根据之前分析的,每个人每门成绩只有一个有效值,其他的为空,所以我们对它进行汇总的结果还是其当前课程的成绩,这就可以满足我们在分组的情况下查询出对应的成绩。(在进行分组查询的时候,只能查询出对应的分组字段和统计字段)
最后一步进行排序是为了按照“张三”,“李四”那样的顺序排列
上面查询出来的结果会如下所示:
姓名 语文 英语 数学 总分
------ ------ ------- ------- --------
张三 60 70 75 205
李四 80 68 65 213
4.有如下几个类,我先运行TestA,再运行TestB,那么:
class A:
Java代码
public class A {
public static int a = 6;
}
class TestA:
Java代码
public class TestA {
public static void main(String args[]) {
A a = new A();
a.a++;
System.out.println(a.a);
}
}
class TestB:
Java代码
public class TestB {
public static void main(String args[]) {
A b = new A();
System.out.println(b.a);
}
}
(1)运行TestA的时候输出的结果是什么?
7
(2)运行TestB的时候输出的结果是什么?
6
(3)运行TestA和TestB的结果为什么相同或不相同?
虽然变量a是类A的静态变量,但是TestA和TestB是两个不同的线程,TestA中改变的变量a的值不会影响到TestB中的结果。
2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?
3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?
A表:
姓名 | 科目 | 分数 |
张三 | 语文 | 60 |
李四 | 数学 | 65 |
张三 | 英语 | 70 |
张三 | 数学 | 75 |
李四 | 语文 | 80 |
李四 | 英语 | 68 |
姓名 | 语文 | 数学 | 英语 | 总分 |
张三 | ||||
李四 |
class A:
Java代码
public class A {
public static int a = 6;
}
class TestA:
Java代码
public class TestA {
public static void main(String args[]) {
A a = new A();
a.a++;
System.out.println(a.a);
}
}
class TestB:
Java代码
public class TestB {
public static void main(String args[]) {
A b = new A();
System.out.println(b.a);
}
}
(1)运行TestA的时候输出的结果是什么?
(2)运行TestB的时候输出的结果是什么?
(3)运行TestA和TestB的结果为什么相同或不相同?
解答:
1.如何用一条语句把一张表的数据插入到另一张数据库表中?
Sql代码
insert into tableA select * from tableB
2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?
Sql代码
select * into tableB from tableA;
-------或者是下面这种写法
create table tableB as select * from tableA;
3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?
A表:
姓名 | 科目 | 分数 |
张三 | 语文 | 60 |
李四 | 数学 | 65 |
张三 | 英语 | 70 |
张三 | 数学 | 75 |
李四 | 语文 | 80 |
李四 | 英语 | 68 |
姓名 | 语文 | 数学 | 英语 | 总分 |
张三 | ||||
李四 |
Sql代码
create table t_student(name varchar2(4), course varchar2(4), score int);
那么这个时候要用一条SQL语句把A表的数据查询出B表的结果,我们可以如下定义我们的SQL语句:
Sql代码
select a.name 姓名 ,sum(case when course='语文' then score end) 语文 ,sum(case when course='英语' then score end) 英语 ,sum(case when course='数学' then score end) 数学 ,b.total 总分 from t_student a ,(select name, sum(score) total from t_ student group by name) b where a.name=b.name group by a.name,b.total order by a.name desc;
这条语句的总体思路是:
先用分组的形式查询出每个人的总成绩
用case when的形式把课程列分为多列,这样满足的那一列的成绩就是当前人当前课程的成绩,其他的成绩在当前行为空
姓名 语文 数学 英语
---- ---------- ---------- ----------
张三 60
张三 75
张三 70
李四 68
李四 80
李四 65
把上述两个结果按照相同的姓名连接起来并按照姓名和总分分组,这样我们查询出来的结果就可以显示姓名和总分,那么我们没有按照成绩进行分组,那么当我们用分组语句的时候该如何查询出我们的成绩呢?这个时候sum就起作用了,根据之前分析的,每个人每门成绩只有一个有效值,其他的为空,所以我们对它进行汇总的结果还是其当前课程的成绩,这就可以满足我们在分组的情况下查询出对应的成绩。(在进行分组查询的时候,只能查询出对应的分组字段和统计字段)
最后一步进行排序是为了按照“张三”,“李四”那样的顺序排列
上面查询出来的结果会如下所示:
姓名 语文 英语 数学 总分
------ ------ ------- ------- --------
张三 60 70 75 205
李四 80 68 65 213
4.有如下几个类,我先运行TestA,再运行TestB,那么:
class A:
Java代码
public class A {
public static int a = 6;
}
class TestA:
Java代码
public class TestA {
public static void main(String args[]) {
A a = new A();
a.a++;
System.out.println(a.a);
}
}
class TestB:
Java代码
public class TestB {
public static void main(String args[]) {
A b = new A();
System.out.println(b.a);
}
}
(1)运行TestA的时候输出的结果是什么?
7
(2)运行TestB的时候输出的结果是什么?
6
(3)运行TestA和TestB的结果为什么相同或不相同?
虽然变量a是类A的静态变量,但是TestA和TestB是两个不同的线程,TestA中改变的变量a的值不会影响到TestB中的结果。
相关文章推荐
- 几道比较基础的Java面试题 .
- 为面试准备的超经典的Java面试题,总会碰到那几道
- Java程序员的几道数据库面试题
- Java继承中的几道面试题
- Java的几道面试题(2007-11-7)
- 几道比较基础的Java面试题
- Java 几道常见String面试题
- 【Java】几道常见的秋招面试题
- java几道面试题【转载】
- 自己想到的几道Java面试题
- 几道基本的java和Android面试题
- 几道Java和数据库的面试题
- 几道java面试题及答案
- 几道JAVA和分布式系统面试题总结
- 几道JAVA面试题
- 常见的几道关于递归的JAVA面试题
- Java面试题,你能做几道?
- 几道常见的面试题(Core Java)
- Java 几道常见String面试题
- 有关Java的几道面试题