SELECT Exercise (School . Grade Tables)

Script
● Table Name : school -> stdnum : Student Number, name : Name, birth : Birthday, eng : English, hb_no : Hobby Number
CREATE TABLE school (stdnum VARCHAR(15),name VARCHAR(15),
birth DATE,eng INT(3),hb_no INT(2), PRIMARY KEY(stdnum));
 
INSERT INTO school (stdnum,name,birth,eng,hb_no) VALUES
('20210110','Iron Man','1970-5-29',95,1),
('20200207','Black Widow','1984-12-3',100,2),
('20190522','Spider Man','2001-8-10',99,4),
('20201007','Batman','1915-4-17',100,2),
('20211201','Hulk','1969-12-18',80,5)";
 
● Table Name : grade -> grd : Grade, score : Score
CREATE TABLE grade (grd varchar(5),score int(3), PRIMARY KEY(grd));
 
INSERT INTO grade (grd,score) VALUES ('A',90), ('B',80), ('C',70), ('D',60), ('F',59);
Contents
SELECT * FROM school;
stdnum name birth eng mat
20190522 Spider Man 2001-08-10 99 55
20200207 Black Widow 1984-12-03 100 70
20201007 Batman 1915-04-17 100 80
20210110 Iron Man 1970-05-29 95 30
20211201 Hulk 1969-12-18 80 75
Contents
SELECT * FROM grade;
grd score
A 90
B 80
C 70
D 60
F 59
Query Input
두 개의 테이블을 사용해서 SELECT명령(아래 예문을 참고)을 작성 후 'Execute' 선택하세요.
Result
😲 위 Query입력에 명령을 입력 후 'Execute'을 선택해 주세요.
참고예제 : 아래 Query를 학습 후 연습해보세요.
예시별 다양한 Query 답이 있을 수 있습니다.

※ 서브쿼리(Sub Query:SQL 명령에 또 다른 SQL 명령을 사용하는 것)
1) SELECT grd FROM grade ORDER BY ABS(score-(SELECT mat FROM school WHERE name='Batman')) LIMIT 1;
school 테이블의 Batman의 수학점수 학점을 grade 테이블에서 가져오시오.
학점표의 모든 점수에서 school 테이블의 Batman의 수학점수를 빼고 절대값을 구한 값중 첫번째로 작은 학점을 가져오시오.
차이가 가장 작은 값의 학점을 구하게 된다.^^ (모든학생의 학점 구하기 가능)

2) SELECT grd FROM grade WHERE score<=(SELECT mat FROM school WHERE name='Batman') LIMIT 1;
school 테이블의 Batman의 수학점수 학점을 grade 테이블에서 가져오시오.
school 테이블의 Batman의 수학점수 보다 이하인 학점을 grade테이블의 score와 비교해서 구해진 학점중 첫번째 학점을 가져오시오.
문제는 기준점수 F학점 59점보다 낮으면 값을 찾지 못한다.(Spider Man, Iron Man) 위 1)번 방법을 사용하자~

3) SELECT name,(SELECT grd FROM grade ORDER BY ABS(score-mat) LIMIT 1) FROM school;
school 테이블의 모든 학생의 이름, 수학점수 학점(grade 테이블 기준)을 가져오시오.
다른 표현 : SELECT school.name,(SELECT grd FROM grade ORDER BY ABS(score-school.mat) LIMIT 1) FROM school;

4) SELECT name,(SELECT grd FROM grade ORDER BY ABS(score-mat) LIMIT 1) AS grd FROM school;
school 테이블의 모든 학생의 이름, 수학점수 학점(grade 테이블 기준)을 가져오시오.(학점의 필드 이름은 grd로 정한다)

Copyright 2022 © SQL Query