クラシックSQLの練習は、50個の質問に疑問

- 1、クエリ"02"ハイコース年生情報やコースのグレードよりも"01"のコース	 
	
。SELECT A *、01_score AS b.s_score、から02_score AS c.s_score 
学生Aが
	a.s_id Bのスコアに参加=そしてb.c_id = '01 b.s_id 'は
	a.s_idスコアに参加左C = ONとc.c_id c.s_id = '02'またはc.c_id = NULL WHERE b.s_score> c.s_score 
	
-これはであってもよいです書き込み
	SELECT A. *を、b.s_score 01_score AS、生徒Aから02_score c.s_score、Bのスコアと、スコアC 
			WHERE a.s_id = b.s_id 
			とa.s_id = c.s_id 
			とb.c_id = '01 ' 
			= '02 c.c_idと' 
			とb.s_score> c.s_score 
- 2、クエリ『01』 『02』の情報とコースのグレード下のコースのグレードの学生がよりコース
	
*を選択し、01_scoreとしてb.s_score、 。 c.s_scoreから02_score AS  
	生徒Aは= ON参加a.s_idスコアBとBのb.s_idを残しました。C_ID = '01' またはb.c_id = NULL
	 参加a.s_id = C = c.s_id ONスコアとc.c_id "02' どこb.s_score <c.s_score
			

- 3問い合わせ60点の平均スコア以上の学生の数と学生の名前と学生成績平均点
SELECT b.s_id、b.s_name、ROUND(AVG(a.s_score)、2)からavg_score AS 
	B学生
	参加スコアA b.s_id = a.s_id ON 
	GROUP BY b.s_id、avg_score> = 60 HAVING b.s_name; 
	

- 4、問い合わせ平均スコア未満で60点と生徒の名前、学生成績平均点の学生の数
		- (スコアを含みます無結果)
		
SELECT b.s_id、b.s_name、ROUND(AVG(a.s_score)、2)avg_score ASから
	生徒Bが
	= b.s_id ON a.s_idスコア参加左
	B、b.s_idてグループをHAVING avg_score .s_name <60 
	連合の
SELECT a.s_id、a.s_nameは、0がAS avg_scoreから
	学生
	WHEREが(ではないa.s_id 
				スコアからのSELECT DISTINCT S_ID);


--5、すべての学生の学生数、学生の名前、選択科目の合計得点の合計数のクエリのすべてのコース 
    WHEREが(ではないc.s_id
a.s_id SELECT AS sum_scoreからAS sum_course、a.s_name、COUNT(b.c_id)、SUM(b.s_score)
	生徒Aが
	a.s_id ON b.s_id =参加スコアBを左
	a.s_idてグループを、a.s_name ; 
			
			
-の6、クエリ「李」先生某番号
先生から選択数(t_id) 「のようなt_name リー%」; 
	
- 7やお問い合わせは、学生に情報を教えるために、「ジョー・スミス」先生のことを学んだ
から*を選択します。
	学生は
	(b.s_idでa.s_id b.c_id ON =スコアBに参加
		(コースからt_id = C_IDを選択
			、教師t_name t_id = 'ジョン・ドウ')からSELECT)

8、「クエリを学んだことはありません-ジョー・スミス「教師は生徒の情報教える
からSELECT *を
    cの学生
        (WHEREに= b.s_id b.c_id B a.s_id ON学生スコアを参加からSELECT a.s_id
        教師bを参加コースからa.c_id選択どこt_name =「a.t_id = b.t_idに、ジョン・ドウ」))
9、「01」番に研究クエリとも学ん番号「02」 -学生はもちろん、情報が

SELECT *から
	学生、Bスコア、スコアC 
	WHERE a.s_id = b.s_idとa.s_id = c.s_idとb.c_id = '01「とc.c_id = '02' ; 
	
- 10のクエリは、「01」番学んだが、情報の過程で「02」番の生徒の学ぶことがなかった
			
からSELECT *。
	学生
	WHEREから(SELECT S_IDでa.s_idはスコア= '01をC_IDインクルード「)とa.s_idないスコアC_ID WHEREから(SELECT S_ID中= 『02』)
			

- 11、すべてのコースのための学生の完全な情報を学ぶことがなかったクエリ
- wendiepei文言@ 
学生をSELECT S * Sから。 
s1.s_id S1 = Sに参加スコアを残しましたS_ID
グループSで.s_id数(s1.c_id)を有します<	(SELECT COUNT(*)のコースから) 
- @ k1051785839的写法
*を選択し
、学生から
(ではないS_ID 
S_IDスコアT1から選択   
S_ID HAVING COUNT(*)=(CourseからSELECT COUNT(DISTINCT C_ID)))によってグループ
- 12であります、クエリには、少なくとも1つのコースがあり、学生数は「01」の学生が同じ情報の学生学んできた

学生からのSELECT *は、WHEREでS_ID(
	SELECT a.c_idからWHERE a.c_idにおけるスコア(スコアからSELECT DISTINCT a.s_idをWHERE a.s_id = '01 A「)
	); 
			
- 13、学生情報のクエリ、および『01』は他の学生の研究のまさに同じコースだった
のouyang_1993文言@ - 
SELECT 
 *学生。
FROM 
 学生
WHEREが
 中をS_ID(スコアGROUP BYがSELECT FROM HAVING COUNT(S_ID)をS_ID =(S_ID 
    #次の文は、カリキュラム学ぶ学生の'01'番号を見つけることです
    スコアFROM SELECT COUNT(C_ID)を S_ID = '01'を
S_ID NOT IN AND( 
 学ん発見されたステートメントに続く#」を01学生は授業、学生を学んだことがない。そして、それらを除外
 SELECTはスコアFROM S_ID 
 WHEREは、IN(C_ID 
   #次の文は、「01」の学生が授業に学んだことがない見つけることです
   スコアFROM SELECT DISTINCT C_ID 
   WHEREは、NOT IN(C_ID 
     #次の文は、学生が学ぶ「01」を見つけることですがもちろん
     SELECTはWHEREがスコアFROM = '01' S_ID C_ID 
  S_ID)GROUP BYを
01学生は除外され、次の)#
AND NOT中のS_ID() '01' 
- @ k1051785839の文言
SELECT 
 。T3 * 
FROM 
  SELECT 
   S_ID、
   GROUP_CONCAT(C_ID BY ORDERをC_ID)GROUP1名前
  FROM 
   スコア
  WHERE 
   S_ID <> '01' 
  BY GROUP 
   S_ID 
 )T1 
内部結合(
 SELECT
  GROUP_CONCATはGROUP2(C_ID BY ORDER C_ID)
 FROM 
  スコア
 WHERE 
  S_ID = '01' 
 、GROUP BYを
  S_ID 
=)T2をt1.group1 ON t2.group2 
INNER JOINの学生T3 = ON t1.s_id t3.s_id 

- 14を、「クエリを学んだことはありませんどの先生にジョー・スミスは、」コースの学生の名前を教え
WHEREから学生a.s_nameが(ではないa.s_id SELECT 
	WHEREからSELECT S_IDは、スコア= C_ID 
				SELECT C_IDコースから(、WHERE t_id =(
					WHERE t_name =からSELECT t_id教師を'ジョン・ドウ'))); 

--15、およびクエリの上に2人の学生が失敗したコース番号、名前や成績平均点
を選択a.s_id、a.s_name、ROUND(AVG (b.s_score)) 
	学生A 
	B = a.s_id b.s_id ON参加スコア左
	WHERE a.s_id(中を 
			スコアs_score WHEREからSELECT S_ID <60カウントを有することによってグループをS_ID(1)> = 2)
	a.s_id GROUP、a.s_name BY 

- 16、 "01"のコースを取得する60未満のスコア、学生情報のスコアの降順で
SELECT A *、b.c_id、からb.s_score。
	生徒A、Bスコア
	WHERE Aを= = b.s_idとb.c_idはDESC、ORDER BY b.s_score '01「とb.s_score <60をS_ID; 
		
- 。17、そのスコアに応じて、すべての科目の平均スコアを示し、すべての学生のための平均スコアは、
選択.s_id、(スコアからs_score選択 「としてS_ID = a.s_idとC_ID = '01) 言語、
				数学AS、(02 's_score WHERE S_ID = a.s_idからスコアとC_ID = SELECT)' 
				スコアから(SELECT s_scoreをここで、S_ID = a.s_idとC_ID = '03 「)として英語、
			2)平均ASスコアからグループラウンド(AVG(s_score)、平均DESC BY a.s_id ORDER BY、 
-文言という場合がある飲料カップ@
SELECT a.s_id、MAX(CASE a.c_id '01' THEN END a.s_score ) 言語、
MAX(CASEは、 '02' a.s_score THEN END)数学をa.c_id
MAX(CASE WHEN a.c_id '03' THEN END a.s_score) 英語、
AVG(a.s_score)オンa.s_idはb.s_id B、b.s_name FROM JOIN学生スコア= GROUP BYは、ORDER BYをa.s_id。5 DESC		 
- 18.クエリすべての被験者は、最低スコアおよび平均スコアの最高得点:次の形式で表示:コースのID、コース名、最高スコア、最低スコア、平均スコアは、レート、中速、良いレート、優れた合格率
- 70-80、良好である:80-90、それは優れた:> = 90 - > = 60、中程度であるの通過
SELECT a.c_id、b.c_name、MAX(s_score)、MIN(s_score)、ROUND(AVG( s_score)、2)、
	ROUND(100 *(SUM(ケースa.s_score> = 0終了60その後、他。1)/ SUM(ケースその後、他のa.s_score。1 0終了))、2)合格率、AS 
	ROUND (100 *(SUM(ケース a.s_score> = 90、次いで他の1 0端)/ SUM(ケースa.s_score次いで他0,1終わり))、2)のような優れたレート 
	ROUND(100 *(SUM(ケースa.s_score>とa.s_score = 70 <80 = 0終了次に他。1) / SUM(ケースa.s_score次いで1他0端))、2)のような適度レート、
	ROUND(100 *(SUM(ケースとして2 a.s_score> = 80とa.s_score <= 90、次いで他の1 0端)/ SUM(ケースa.s_score次いで他0,1終わり))) 良いレート、 
t1.s_score、
	スコアから左a.c_id = b.c_id a.c_id、b.c_name BY GROUPにコースBに参加し
	
19、按各科成绩进行排序、并显示排名- 
- MySQLの没有ランク函数
	a.s_idを選択し、A .c_id、
        @i:= @、私は排名を保留として1 I 
        =(ケーススコア= a.s_score @その後、@k他@i終了)ランク不保留排名、など:@k 
        @score:= a.s_scoreスコアとして
    (から
        s_score DESC BY S_ID、C_ID、s_scoreのORDER BY S_ID、C_ID、スコア群からs_scoreを選択
A)、(@k選択:= 0、I @:= 0、スコア@:= 0)S 
- @ k1051785839的写法
((選択SELECT * FROM 
t1.c_idを、 
t1.s_score DESC順)T1)
組合
'ランク(t2.s_score> = t1.s_scoreとt2.c_id = '01スコアt2から選択数(別個t2.s_score))
t1.c_id = '01スコアT1から' 
	@i。= @私は、iと1 +
(*(選択から選択
t1.c_id、
t1.s_score、
スコアT2ここt2.s_score> = t1.s_scoreとt2.c_id = '02' )のランクから(選択数(別個t2.s_score)を
スコアt1からT1を.c_id = '02' 
t1.s_score DESC)T2)によって順
組合
((選択SELECT * FROM 
t1.c_id、
t1.s_score、
t2.s_score> = T1スコアT2から(選択数(別個t2.s_scoreを)。 s_scoreとt2.c_id = '03 ')のランク
スコアT1 t1.c_id = '03'から
t1.s_score DESC順)T3)
- 20、查询学生的总成绩并进行排名
選択a.s_id、
	@k :ランク、など=(ケーススコア@ = a.sum_scoreその後、@k他@i終了)
	スコアとして= a.sum_score:@score
A(S_ID、GROUP BY AS DESC BY sum_score S_ID sum_score ORDERからSUM(s_score)スコアを選択)から、
	(@k SELECT:= 0、I @:= 0、スコア@:0 =)S 
	
- 21は、異なるクエリであります教師は異なるコースを平均低ディスプレイ教示
		
	SELECT a.t_id、c.t_name、a.c_id、ROUND(AVG(s_score)、2)からコースavg_scoreとして
		参加スコアB = B. a.c_idを左C_IDは
		a.t_id c.t_id上の参加教師のC =左
		DESC avg_scoreの、ORDER BYをc.t_name、a.c_id BY GROUP、a.t_idを; 
-学生情報22、二つの第一の3のすべてのコースのためのクエリ結果そしてもちろんグレード
			
			選択のD *、c.s_score、からc.c_id(..ランキングcを
                SELECT a.s_id、a.s_score、a.c_idを、@ I:= I + 1 @スコアから順位AS、( = 0)a.c_id S = '01 'WHERE:SELECT @i   
								a.s_score DESC BY ORDERは   
            )Cが
            c.s_id = d.s_idの学生dの参加左 
            )Cを
            ここ排名2と3の間の
            UNION 
            選択D *、C排名、c.s_score、(からc.c_idは。
                J @ a.s_id、a.s_score、a.c_id、選択:= @ J + 1スコアから排名などを、(@j選択:= 0)a.c_id = '02'ここで、S   
								a.s_score DESC BY ORDERが
            )cは
            c.s_id = d.s_idに学生のDに参加左
            ところ排名2と3の間の
            UNION 
            セレクトD *。 (から、C排名、c.s_score、c.c_id。
                K @ a.s_id、a.s_score、a.c_id、選択:=は、K @ + 1スコアから排名として、(@k選択:= 0)のa.c_id = '03'どこ
								a.s_score DESC BY ORDERは
            c.s_id = d.s_idに学生のDに参加左
            ところ排名2と3の間。
			 
コース番号、コース名、[100から85]、[85から70]、[70から60]、[23、全ての被験者の統計的セグメントの数の分数-を0-60]及びパーセンテージ


		別個f.c_nameを選択し、a.c_id、b.`85-100`、 B。 百分率、c.`70-85`、C。百分率、d.`60-70`、 D。割合は、e.`0-60`、すなわち割合をスコア
				SELECT(参加C_ID、SUM(ケースを去ったときs_score> 85とs_score `85-100`、AS <= 100、その後、他の。1つの0終了)
											ROUND (100 *(SUM(ケース 2> 85 s_scoreとs_score <= 100次いで、他1 0端)/カウント(*)))のようなパーセンテージ
								スコアC_ID BY GROUPから)Bが= a.c_id b.c_id ON 
				参加左((ケースときs_score>、SUMをC_IDを選択し、他の後、70 <85 = 0終了をs_score。1)、70-85` `AS 
											ROUND(100 *(SUM(ケースs_score> 70とs_score <= 85 1その後、他の0エンド)/ COUNT(*)) 、2)などの割合
								a.c_id = c.c_id上のC)C_ID BYスコア群から 
				SELECT(参加C_ID、SUM(ケースを去ったときs_score> 60とs_score <= 70その後、他に1 0終了) `として 60-70`、
											ROUND(100 *(SUM(ケースs_score> 60とs_score <= 70、次いで他の1 0端)/カウント(*))、2)百分比として
								のa.c_id = d.c_idにC_ID BYスコア群)D 
				`0-60`、として参加(C_IDを選択し、SUM(ケースs_score> = 0とs_score <= 60、次いで他の1 0端)左
											ROUND(100 * (SUM(ケースs_score> = 0とs_score <= 60、次いで他の1 0端)/カウント(*))2)百分比として、
								a.c_id = e.c_idにC_ID BYスコア群から)eは
				コースFに参加左a.c_id = f.c_idオン
				 
- 24、查询学生平均成绩及其名次

		a.s_idを選択し、
				@i: '不保留空缺排名'など= @ iが+ 1、
				@k:=(場合@ avg_score = a.avg_sその後、@k他@i終わり) '保留空缺排名'など、
				@avg_score:= avg_s '平均分'など
		(S_ID、ROUND(AVG選択から (s_score)を、2)avg_s DESC BY S_ID ORDER BYスコア群からavg_sとして)Aは、B;(選択@avg_score:= 0、K @:= 0 = 0、I @) 
- 25.トップ3つのレコードは、全ての被験者クエリ
			- 1.すべてのグループが選択されたテーブル結果テーブルよりも大きいB 
			- 2電流Idは、選択されたスコアが3より小さいより大きい
		、選択a.s_id a.c_id、a.s_scoreスコアA 
			b.s_score参加スコアB = ONとa.s_score b.c_id <a.c_id左
			HAVING COUNT(b.s_id)a.s_score a.s_id、a.c_id、によってグループ<3 
			a.c_id、a.s_scoreのDESC、ORDER BY 

- 26は、各コースは、学生の選択科目数である照会

		SELECT C_ID、GROUP BYからのカウント(S_ID)がスコアC_ID 

、27すべての唯一の2つのコースをチェックアウト-学生の学校数との名称
		SELECT S_ID、WHEREでの学生のS_IDからs_name(
				GROUP BYからSELECT S_IDスコアは、HAVING COUNT(C_IDをS_ID)= 2); 

-男の子と女の子28の問い合わせの数
		s_sexを選択し、(s_sex)s_sex AS COUNT BY GROUPからの学生の数

- 29学生情報、クエリ名は「風」という単語が含まれ

		*学生からどこs_name「のような選択 %の風%」; 

--30、同性愛者の生徒は、同じ名前のお問い合わせリストには、同じ名前の数と数え
		
		、JOIN学生からSELECT a.s_name、a.s_sex、COUNT(*)を
					a.s_id ON学生bを!= b.s_idとa.s_name = b.s_nameとa.s_sex = b.s_sex 
		a.s_name GROUP、a.s_sexによって



- 31、1990年に生まれた学生のクエリリスト、
		
		「1990%」のようなWHERE s_birthからSELECT s_nameの学生

- 32は、成績平均点に従って降順で結果、各コースで成績平均点を問い合わせます平均スコアは、コース番号順に応じて、同じである

	SELECT C_ID、ROUND(AVG(s_score)、2)DESC、C_ID ASC順avg_score AS avg_score C_IDによるグループからスコア

- 33であるが、クエリの平均スコアは、学生85の全ての合計よりも大きいです学生ID、名前と学年平均点は
 
	選択a.s_id、b.s_name、ROUND(AVG (a.s_score)、2)スコアaからavg_scoreとして
		B ON参加学生は左a.s_id =は> = 85 GROUP BYはHAVING avg_scoreをS_ID b.s_id 
	
34、クエリのコースの名称「数学」と60人の学生の名前とのスコア未満のスコア- 
	
		選択a.s_name、b.s_score B(a.s_id = b.s_id WHERE b.c_id = ONから生徒のスコアに参加
					してb.s_score <60 WHERE c_name =「数学」から、SELECT C_IDコース)

-すべての学生コースの35、クエリや状況をスコア。
	
		
		SELECT、a.s_name、a.s_id 
					として(そして、ケースc.c_name '言語'他b.s_score 0終了)SUMを ' 言語'、 他のb.s_score 0終了後、ケースc.c_name '数学')SUM 「数学」、など
					などSUM(ケースc.c_nameし、「英語」b.s_score他0終了) 「 英語」、
					「アウト」としてSUM(b.s_score)
		B Aはa.s_idに残っ参加学生のスコアからb.s_id = 
		左ONは、参加コースC = Cをb.c_idC_ID 
		a.s_id、a.s_name BY GROUP

 
 - 36、70点以上のコースグレードで任意の名前のクエリ、コース名とスコア。 
			SELECT a.s_name、b.c_nameは、参加スコアコース、B = b.c_id ON cはc.c_idから左c.s_score 
				左学生= ONはc.s_score> = 70参加c.s_id a.s_id 

		

37、クエリもちろん失敗しました-が
		選択a.s_id、a.c_id、b.c_name、a.s_scoreスコアから左にBコースに参加しますa.c_id = b.c_id上
			WHERE a.s_score <60 
		
; 38、コース、80点以上でコースの小学校の生徒の数と名前についての第01 - 
		SELECT a.s_id、スコアからb.s_name LEFT生徒B = a.s_id ON b.s_id JOIN 
			WHERE a.c_id = '01'とa.s_score> 80 

39の各コースの学生の数を見つける- 
		; C_ID BY群からSELECT COUNT(*)スコア

- 40学生は選択科目の照会を許可された「ジョン・ドウ」先生、最高達成学生情報および結果

		
		-クエリ教師上記IDに言及した	 
		コースからSELECT C_IDを、C、D WHEREは教員をc.t_idとd.t_name = = d.t_id "ジョー・スミス
		- (同じスコアを有していてもよい)、最も高いスコアをクエリ 
	選択a.s_id、a.c_id、スコアからa.s_score A
		MAX SELECT C_ID = '02 'から(s_score)スコア
		-クエリ情報が
		*、b.s_score、b.c_idを選択すると、学生からc.c_name 
			左側には、JOINスコアBをa.s_id = b.s_id 
			JOIN左= C b.c_id c.c_idコース上
			b.c_id =は(コースC、D c.t_id =教師d.t_idとd.t_name = 'ジョン・ドウ'からC_ID選択)
			とb.s_scoreで(MAXを選択WHEREから(s_score)は、スコア= '02「)C_ID 


41、同じクエリ別のコースグレード学生の学生番号、コース番号、生徒の成績を- 
	とは別個のb.s_id、b.c_id、b.s_score選択スコア、スコアを!B = a.c_id b.c_idとa.s_score b.s_score = 
	

- 42は、各クエリ関数で最高のパフォーマンスの上部を2ドア
		-退行文言
		(からCOUNT(1)を選択し 、スコアBどこb.c_id = a.c_idとb.s_score> = a.s_score a.c_id BY)<= 2 ORDER


--43統計選択科目(以上5つのコースのみの統計)あたりの学生数。必要な出力と選択科目数の数に応じて昇順に同じ数、コース番号場合、数に従って降順で結果   
		SELECT C_IDは、GROUP BYからCOUNT(*)AS合計スコアがHAVING合計> 5合計ORDER BY、C_ID ASCをC_ID 
		
- 44、科目学生数のうちの少なくとも2つのコース取得する
		GROUP BYからスコアSEL AS SELECT S_ID、COUNT(*)はHAVING SEL> = 2 S_ID 

- 45、すべてのクエリ選択科目学生情報を
		学生SELECT * FROM場合S_IDに(		 
			SELECT)は、コースからHAVING COUNT(*)=(SELECT COUNT(*)をS_ID GROUP BYからスコアをS_ID)


各学生の年齢を照会、46あたり- 生年月日によってカウントする出産の現在の月<日付の日を-当日、マイナス1歳の 
- 47、クエリ誕生日の週の学生は、
	学生のどこ週(DATE_FORMATから選択* (NOW()、 '%Y%mの%dの'))=週(s_birth)
 
	s_birth、(DATE_FORMAT(NOW(選択 )、 '%Y') - DATE_FORMAT(s_birth、 '%Y')を-
				(ケースときDATE_FORMAT(NOW()、 '%m個の%のD')> DATE_FORMAT(s_birth、 '%m個の%のD')他、次に0 1つのエンド。)年齢AS)
		学生から、


	* yearWeek SELECT(s_birth)= yearWeek(DATE_FORMAT(NOW()、 'Y%Mは%% Dは'))WHEREから学生
	
	WEEK(DATE_FORMAT(NOW()、 'Y%Mは%%のD'))を選択

- 48クエリ誕生日の週の学生
	= +週学生WHERE(DATE_FORMAT(NOW()、 'Y%m個の%%のD'))から選択* 1週間(s_birth)。

- 49、クエリ誕生日の月の学生が

	選択学生*(NOW DATE_FORMAT(()、 'Y%m個の%%のD'))= MONTH(s_birth)からMONTH WHERE 
	
- 50、クエリの誕生日の月の学生が
	選ぶ*学生からどこMONTH(DATE_FORMAT NOW(() 、 '%Y%のM%のD '))+ 1 = MONTH(s_birth)

  

 

https://blog.csdn.net/fashion2014/article/details/78826299

おすすめ

転載: www.cnblogs.com/alexzhang92/p/11027686.html