SELECT Query 예제

SQL 2021. 9. 22. 19:21
728x90

(예제) 테이블에서 장학금을 받는 학생의 학번과 장학금 내역을 출력하라.

SELECT studentNO, scholarship

FROM tablename

WHERE scholarship > 0;

 

예제) 장학금을 백만원 이상 지급 받는 학생 중에서 2회 이상 지급받은 학생의 학번과 지급 받는 횟수를 학번 내림 차순으로 출력하라. ( 실행 순서 : FROM 절 → WHERE 절 → GROUP BY 절 → HAVING 절 → SELECT 절 → ORDER BY 절)

SELECT studentNO, count(*)

FROM tablename

WHERE scholarship > 1000000

GROUP BY studentNO

having count(*) > 1

ORDER BY studentNO DESC;

 

※ GROUP BY 절을 사용할 때에는 count, avg, min, max, sum 과 같은 그룹 함수를 같이 사용해야 한다.

※ WHERE 절은 FROM 절에서 생성된 중간 테이블에서 동작하고,

   HAVING 절은 GROUP BY 절에서 생성된 중간 테이블에서 동작한다.

   SELECT 절은 최종 결과 테이블에 표현될 열을 지정하기 위해서 사용된다.

   HAVING 절의 조건에 있는 수식은 통계 함수를 가질 수 있지만

   WHERE 절에 있는 조건 수식에는 통계함수를 가질 수 없다.

만약 결과 테이블에 서로 다른 테이블로부터 데이터를 가져오려 한다면

   FROM 절에 여러 개의 테이블을 지정해야 한다.

FROM 절에 동일한 테이블 이름이 한번 이상 사용될 때는 반드시 가명을 사용해야 한다.

 

예제) 1990년 이후에 출생한 여학생의 학번, 이름, 주민등록번호를 출력하라

※ substring(id_num,1,2) 라고 하면 앞 2자리를 반환한다. 1부터 시작된다.

SELECT studentNO, userNM, id_num

FROM tablename

WHERE substring(id_num, 8,1) = 2 and birth_year > '1990';

 

예제) 성별이 남자가 아닌 학생의 학번, 이름을 출력하라.

SELECT studentNO, userNM

FROM tablename

WHERE NOT substring(id_num, 8, 1) = 1;

 

예제) 나이가 가장 많은 학생을 제외한 나머지 학생의 학번, 이름, 주민등록번호를 출력하다.

SELECT studentNO, userNM, id_num

FROM tablename

WHERE birth_year > any (select birth_year from tablename);

 

예제) 주민등록번호의 앞 2자리의 값이 서로 다른 숫자를 가지는 것은 몇명인지 출력하라.

SELECT count(distinct substring(id_num,1,2)

FROM tablename;

 

예제) 학년별, 주야 인원을 출력하라. 순서는 학년별 오름차순, 주야 오름 차순이다.

※ 2개 이상의 열에 대한 그룹화

   count(*) 함수는 서로 다른 모든 행에 대해 연산하지 않고, 각 그룹화된 행에 의존하여 실행된다.

SELECT grade, daynight, count(*)

FROM tablename

GROUP BY grade, daynight

ORDER BY grade, daynight;

 

예제) 재학중에 납부한 등록금의 전체 납부 금액이 30,000,000 원 이상인 각 학생에 대하여 출력하라.

SELECT studentNO, sum(fee)

FROM tablename

GROUP BY studentNO

having sum(fee) >= 30,000,000;

 

테이블에서 테이블로 행을 복사

- INSERT INTO 절에 있는 열의 수는 SELECT 절에 있는 수식의 수와 동일해야 한다.

- INSERT INTO 절에 있는 자료형은 SELECT 절에 있는 수식의 자료형과 일치해야 한다.

 

블로그 이미지

Link2Me

,