亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

幾道面試題

系統 1537 0

?

1.如何用一條語句把一張表的數據插入到另一張數據庫表中?

?

2.如何用一條語句把一張表的數據插入到另一張不存在的數據庫表中?

?

3.有如下A、B兩個表,如何將A表的數據查詢出來,結果如B所示?

???????? A表:

姓名

科目

分數

張三

語文

60

李四

數學

65

張三

英語

70

張三

數學

75

李四

語文

80

李四

英語

68

?

???????? B表:

姓名

語文

數學

英語

總分

張三

?

?

?

?

李四

?

?

?

?

?

4.有如下幾個類,我先運行TestA,再運行TestB,那么:

???????? class A:

      public class A {
    public static int a = 6;
}
    

?

class TestA:

      public class TestA {
    public static void main(String args[]) {
       A a = new A();
       a.a++;
       System.out.println(a.a);
    }
}
    

?

class TestB:

      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的結果為什么相同或不相同?

?

5.有一個employee表,其結構如下所示:

empNo

int

empName

varchar2(20)

age

int

salary

number(7,2)

假設這個表的數據量很大,有幾千萬,請你用一條你覺得最有效率的SQL語句統計出如下四種類型的人數:

  • age>30 and salary>10000
  • age>30 and salary<10000
  • age<30 and salary>10000
  • age<30 and salary<10000

?6.寫一個程序輸出類似于“ABC”這樣字符串的所有排列組合,如字符串“ABC”應當對應ABC、ACB、BAC、BCA、CBA和CAB。

?

?7.在try后面緊跟著一個return語句,那么之后的finally中包含的內容是否還會執行呢?如果執行是在return之前還是之后執行呢?


?解答:

?

1.如何用一條語句把一張表的數據插入到另一張數據庫表中?

?

      insert into tableA select * from tableB
    

?

2.如何用一條語句把一張表的數據插入到另一張不存在的數據庫表中?

?

      select * into tableB from tableA;
-------或者是下面這種寫法
create table tableB as select * from tableA;
    

?

3.有如下A、B兩個表,如何將A表的數據查詢出來,結果如B所示?

???????? A表:

姓名

科目

分數

張三

語文

60

李四

數學

65

張三

英語

70

張三

數學

75

李四

語文

80

李四

英語

68

?

???????? B表:

姓名

語文

數學

英語

總分

張三

?

?

?

?

李四

?

?

?

?

這里我們用一個t_student表來表示A表,其建表語句如下所示:

      create table t_student(name varchar2(4), course varchar2(4), score int);
    

那么這個時候要用一條SQL語句把A表的數據查詢出B表的結果,我們可以如下定義我們的SQL語句:

      select a.name 姓名,sum(case when course='語文' then score end) 語文,sum(cas
e 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:

      public class A {
    public static int a = 6;
}
    

?

class TestA:

      public class TestA {
    public static void main(String args[]) {
       A a = new A();
       a.a++;
       System.out.println(a.a);
    }
}
    

?

class TestB:

      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中的結果。

?

?

5.有一個employee表,其結構如下所示:

?

empNo

int

empName

varchar2(20)

age

int

salary

number(7,2)

?

假設這個表的數據量很大,有幾千萬條數據,請你用一條你覺得最有效率的SQL語句統計出如下四種類型的人數:

  • age>30 and salary>10000
  • age>30 and salary<10000
  • age<30 and salary>10000
  • age<30 and salary<10000

我的思路:

? ? ? ? 用case when來進行篩選,用count來進行統計,這樣整個數據量只需要統計一遍。?

查詢語句:?

      select count(case when age>30 and salary>10000 then empNo end) type1, 
count(case when age>30 and salary<10000 then empNo end) type2, 
count(case when age<30 and salary>10000 then empNo end) type3, 
count(case when age<30 and salary<10000 then empNo end) type4 from employee;
    

?

?

6.寫一個程序輸出類似于“ABC”這樣字符串的所有排列組合,如字符串“ABC”應當對應ABC、ACB、BAC、BCA、CBA和CAB。

? ? ? ? ?

? ? ? ? ? 我的思想是用遞歸來處理,我們要把字符串當成一個一個的字符來處理。比如字符串ABC,我們可以先拿出來一個放在前面,其后則跟著另外兩個,也就是說字符串ABC的排列應該是字符A+字符串BC的排列、字符B+字符串AC的排列和字符C+字符AB的排列。然后字符BC的排列又應該是字符B和字符串C的排列,就是這樣來進行一個遞歸的操作。具體代碼如下所示:

?

      	public void printStr(String str) {
		int len = str.length();
		for (int i=0; i<len; i++) {
			String s = String.valueOf(str.charAt(i));
			StringBuffer buffer = new StringBuffer(str);
			buffer.deleteCharAt(i);
			System.out.println(s + buffer);
			printStr(s, buffer.toString());
		}
	}
	
	public void printStr(String start, String str) {
		int len = str.length();
		for (int i=0; i<len; i++) {
			String s = String.valueOf(str.charAt(i));
			StringBuffer buffer = new StringBuffer(str);
			buffer.deleteCharAt(i);
			if (i != 0)
				System.out.println(start + s + buffer);
			printStr(start + s, buffer.toString());
		}
	}
    

?

7.在try后面緊跟著一個return語句,那么之后的finally中包含的語句是否還會執行呢?如果執行的話是在return之前還是之后呢?

??????? ? 這里我們先來看一下以下程序:

      public class Test {

	public static void main(String args[]) {
		System.out.println(doTryReturn());
	}
	
	private static String doTryReturn() {
		try {
			return doTry();
		} finally {
			doFinally();
		}
	}
	
	private static String doTry() {
		System.out.println("invoke doTry() -------");
		return "doTry";
	}
	
	private static String doFinally() {
		System.out.println("invoke doFinally() -------");
		return "doFinally";
	}
	
}
    

? ??????? ?運行上述代碼后我們可以看到控制臺輸出如下結果:

?

?? ??????? ?這說明在try語句中return之后finally中的語句還是執行了,而且是在return之后執行的。在try里面執行到return之后程序就不再往try以下的語句執行了,而是保存當前的返回結果,接著判斷是否存在finally語句,如果存在則接著執行finally語句塊,如果finally語句塊中同樣包含return語句的話,將使用finally中的return結果取代try中的return結果,否則將返回try中的return結果。我們可以看到在上述代碼中finally語句塊中是沒有return語句的,這個時候是返回的doTry。現在我們來做一個測試,我們把finally中的程序改為return doFinally(),即如下:

      public class Test {

	public static void main(String args[]) {
		System.out.println(doTryReturn());
	}
	
	private static String doTryReturn() {
		try {
			return doTry();
		} finally {
			return doFinally();
		}
	}
	
	private static String doTry() {
		System.out.println("invoke doTry() -------");
		return "doTry";
	}
	
	private static String doFinally() {
		System.out.println("invoke doFinally() -------");
		return "doFinally";
	}
	
}

    

??? ??????? ?接著我們再運行上述程序,這個時候控制臺將輸出如下內容:



??? ??????? ?這說明確實如我們上面所說,finally存在return時返回的是finally中的return結果。

?

?

?

?

?

幾道面試題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品久久亚洲 | 青青青国产观看免费视频 | 亚洲综合春色另类久久 | 99久久99久久久99精品齐 | 久久97久久97精品免视看清纯 | 久久综合九色综合97婷婷女人 | 中文字幕第一页亚洲 | 国产精品视频视频久久 | 国产精品成人一区二区 | 欧美一区二区三区精品国产 | 亚洲爽爽| 国产一级特黄aaaa大片野外 | 四虎永久免费地址在线观看 | 国产综合影院 | 99视频精品全国免费 | 欧美大片天天免费看视频 | 精品特级一级毛片免费观看 | 在线亚洲欧洲国产综合444 | 五月婷婷欧美 | 男人天堂一区 | 91在线亚洲 | 特级毛片全部免费播放a一级 | a拍拍男女免费看全片 | 国产精品乱码一区二区三区 | 麻豆精品永久免费视频 | 日本护士a做爰免费观看 | 91久久综合九色综合欧美亚洲 | 国内精品久久久久久久aa护士 | 狼人香蕉香蕉在线视频播放 | 亚洲一区二区三区四区五区 | 欧美 日韩 中字 国产 | 99尹人香蕉国产免费天天拍 | 成人看黄色大片 | 成人欧美精品久久久久影院 | 国产精品久久久久蜜芽 | 色久综合网 | 一区二区三区欧美日韩 | 国产成人亚洲综合网站不卡 | 精品国产你懂的在线观看 | 天天综合久久久网 | 欧美激情精品久久久久久大尺度 |