程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql有用的面試題,Mysql有用面試題

Mysql有用的面試題,Mysql有用面試題

編輯:MySQL綜合教程

Mysql有用的面試題,Mysql有用面試題


A.一道SQL語句面試題,關於group by
表內容:
2005-05-09 勝
2005-05-09 勝
2005-05-09 負
2005-05-09 負
2005-05-10 勝
2005-05-10 負
2005-05-10 負

如果要生成下列結果, 該如何寫sql語句?

勝 負
2005-05-09 2 2
2005-05-10 1 2
******************************************************
create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-10','勝')
insert into #tmp values('2005-05-10','負')
insert into #tmp values('2005-05-10','負')
==============================================================
SELECT rq,sum(shengfu='勝') as '勝',sum(shengfu='負') as '負'
FROM `#tmp`
GROUP BY `#tmp`.rq
*****************************************************************

B.請教一個面試中遇到的SQL語句的查詢問題
表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。
------------------------------------------
select (case when a>b then a else b end),
(case when b>c then b esle c end)
from taname
***************************************************

C.面試題:一個日期判斷的sql語句?
請取出tb_send表中日期(SendTime字段)為當天的所有記錄?(SendTime字段為datetime型,包含日期與時間)
-----------------------------------------------------------------------------------------------------------------------
select * from time where datediff(SendTime,CURDATE())=0

CURDATE()獲取當前日期
DATEDIFF() 返回起始時間 expr和結束時間expr2之間的天數。Expr和expr2 為日期或 date-and-time 表達式。計算中只用到這些值的日期部分。

TIMEDIFF(expr,expr2)
TIMEDIFF() 返回起始時間 expr 和結束時間expr2 之間的時間。 expr 和expr2 為時間或 date-and-time 表達式,兩個的類型必須一樣。
**************************************************************************************************************************

D.有一張表,裡面有3個字段:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄並按以下條件顯示出來(並寫出您的思路):
大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。
顯示格式:
語文 數學 英語
及格 優秀 不及格
----------------------------------------------------------------------
1、一定有分三類,語文、數學、英語
2、對查詢到的分數進行判斷
3、先查出一個字段顯示
SELECT
CASE WHEN
yuwen >= '80' THEN'優秀'WHEN yuwen >='60' THEN'及格'ELSE'不及格'END yuwen,
CASE WHEN
shuxue >= '80' THEN'優秀'WHEN shuxue >='60' THEN'及格'ELSE'不及格'END shuxue,
CASE WHEN
yingyu >= '80' THEN'優秀'WHEN yingyu >='60' THEN'及格'ELSE'不及格'END yingyu
FROM
kecheng

E.請用一個sql語句得出結果
從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不准確,只是作為一個格式向大家請教。
如使用存儲過程也可以。

table1

月份mon 部門dep 業績yj
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8

table2

部門dep 部門名稱dname
--------------------------------
01 國內業務一部
02 國內業務二部
03 國內業務三部
04 國際業務部

table3 (result)

部門dep 一月份 二月份 三月份
--------------------------------------
01         10       null    null
02         10       8       null
03         null      5          8
04         null     null       9
------------------------------------------

select a.dname, a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份'
from table2 a left join table1 b on a.dep=b.dep
GROUP BY
a.dep

 

 

F.一道面試題
一個表中的Id有多個記錄,把所有這個id的記錄查出來,並顯示共有多少條記錄數。
------------------------------------------
select id, Count(*) from tb group by id having count(*)>1
select*from(select count(ID) as count from table group by ID)T where T.count>1

G、table表形式如下:
Year Salary
2000 1000
2001 2000
2002 3000
2003 4000
想得到如下形式的查詢結果
Year Salary
2000 1000
2001 3000
2002 6000
2003 10000
sql語句怎麼寫?
****************************************
SELECT a.year, SUM(b.salary) AS sala
FROM table AS a,table AS b
WHERE b.salary<=a.salary
GROUP BY a.salary
***************************************************
H.用一條SQL語句查詢出每門課都大於80分的學生姓名
name kecheng fenshu
張三 語文 81
張三 數學 75
李四 語文 76
李四 數學 90
王五 語文 81
王五 數學 100
王五 英語 90

****************************************************************************
selet name from tablename where name in (select name from tablename where fenshu >80 )
select distinct name from table where name not in (select distinct name from table where fenshu<=80)

 

**************************************************
I.學生表 如下:
自動編號 學號 姓名 課程編號 課程名稱 分數
1 2005001 張三 0001 數學 69
2 2005002 李四 0001 數學 89
3 2005001 張三 0001 數學 69
刪除除了自動編號不同,其他都相同的學生冗余信息
*******************************************************
delete tablename where 自動編號 not in() 能運行
select min(自動編號) from tablename group by 學號,姓名,課程編號,課程名稱,分數 能運行
delete tablename where 自動編號 not in(select min(自動編號) from tablename group by 學號,姓名,課程編號,課程名稱,分數 )

運行不了。會報《 You can't specify target table 'tb' for update in FROM clause》這樣的錯誤
----------------------------------------------------------------------------------------------------------------------------
J.一個叫department的表,裡面只有一個字段name,一共有4條紀錄,分別是a,b,c,d,對應四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合.
你先按你自己的想法做一下,看結果有我的這個簡單嗎?
--------------------------------------------------
答:select a.name, b.name
from team a, team b
where a.name < b.name


********************************************************************************************************************************
K.請用SQL語句實現:從TestDB數據表中查詢出所有月份的發生額都比101科目相應月份的發生額高的科目。請注意:TestDB中有很多科目,都有1-12月份的發生額。
AccID:科目代碼,Occmonth:發生額月份,DebitOccur:發生額。
數據庫名:JcyAudit,數據集:Select * from TestDB

答:select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

 


************************************************************************************
L.面試題:怎麼把這樣一個表兒
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成這樣一個結果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4

******************************************************
答案一、
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year

這個是ORACLE 中做的:
select * from (select name, year b1, lead(year) over
(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over(
partition by name order by year) rk from t) where rk=1;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved