본문 바로가기

JAVA/Oracle

오라클 - union 명령어 예제 및 궁금증(max에 변수 여러개 가능?, 서비쿼리 결과를 가상의 테이블인 = 연산자로 판별?)

반응형

** 서브쿼리의 결과는 가상의 테이블인 = 연산자로 판별할 수 있나요?

==> 서브쿼리의 칼럼수의 수가 1개이고 select 한 건수가 1개라면 가능합니다.

만약에 서브쿼리 결과의 건수가 여러개라면 = 연산자로 표현 할 수 없어요.

==> 다중행 연산자를 이용해야 합니다.


** max에 변수를 여러개 넣을 수 있나요?


질문을 위한 테이블 생성

ed 학생;


create table 학생(

이름 varchar2(20),

국어 number, 

영어 number,

수학 number

);


질문을 위한 데이터 생성

ed 학생데이터;


insert into 학생 values('이학균',100,50,70);

insert into 학생 values('송인욱',60,70,80);

insert into 학생 values('최영록',80,80,90);


select max(국어,영어,수학) from 학생; // 불가능

select max(국어), max(영어), max(수학) from 학생; // 가능


그냥, 그렇게 만약 넣었다면 

국어의 데이터가 들어가고

영어의 데이터가 들어가고

수학의 데이터가 들어가고

그 중에 가장 큰값이 뽑아지는지 알고 싶다.

==> 제일 높은 점수를 나타내라.

==> 각 과목별 최고점수 중에 가장 높은 점수를 출력


select max(국어) from 학생;

select max(영어) from 학생;

select max(수학) from 학생;

 


위에 것을 합치는 명령어가 있다. 

union


0번째

select max(국어) from 학생

union

select max(영어) from 학생

union

select max(수학) from 학생;


애칭주고 무슨 과목인지 나타내고 싶을때


1번째

select '국어' 과목, max(국어) 점수 from 학생

union

select '영어' 과목, max(영어) 점수 from 학생

union

select '수학' 과목, max(수학) 점수 from 학생;


하나로 묶어서 점수 중에 max 하기


형태)

select max(점수) from (1번째);

2번째

select max(점수) from (

select '국어' 과목, max(국어) 점수 from 학생

union

select '영어' 과목, max(영어) 점수 from 학생

union

select '수학' 과목, max(수학) 점수 from 학생);

반응형