본문 바로가기
Oracle

[Oracle] 오라클 예제풀이 해보기 (Selecting Table Data / About Queries)

by moveho 2022. 10. 18.

오늘은 https://docs.oracle.com/cd/E17781_01/appdev.112/e18147/tdddg_connecting.htm#TDDDG22000 을 참조하여

기본적인 SQL SELECT 문법을 배워봤다.

연습해본 예제의 코드이다 !

--EXERCISE--

--1. 학생테이블의 구조를 검색하시요

DESC STUDENT;

--2. 과목테이블의 구조를 검색하시요

DESC SUBJECT;

--3. 학생테이블의 모든 데이터를 검색하시요

SELECT * FROM STUDENT;

--4. 수강테이블의 모든 데이터를 검색하시요

SELECT * FROM SUBJECT;

--5. 학생들의 학번과 이름을 검색하시요

SELECT STU_NO, STU_NAME FROM STUDENT;

--6. 과목들의 과목번호와 과목이름을 검색하시요

SELECT SUB_NO, SUB_NAME FROM SUBJECT;

--7. 학생들의 학번, 이름, 성별을 검색하시요

SELECT STU_NO, STU_NAME, STU_GENDER FROM STUDENT,SUBJECT;

--8. 학생들의 모든 정보를 검색하시요

SELECT * FROM STUDENT;

--9. 학생들의 학번, 이름, 학년, 반을 검색하시요 

SELECT STU_NO, STU_NAME, STU_GRADE, STU_CLASS FROM STUDENT;

--10. 과목들의 과목이름과 교수이름을 검색하시요

SELECT SUB_NAME, SUB_PROF FROM SUBJECT;

 

 

--11. 과목번호, 학번, 점수를 검색 

SELECT SUB_NO, STU_NO, STU_GRADE FROM STUDENT, SUBJECT;

--12. 학생들의 체중, 신장, 학번, 이름을 검색

SELECT STU_WEIGHT, STU_HEIGHT, STU_NO, STU_NAME FROM STUDENT, SUBJECT;

--13. 학생들의 학과중복을 제거하고 검색 (distinct)

SELECT DISTINCT STU_DEPT FROM STUDENT;

--14. 학생들의 성별중복을 제거하고 검색

SELECT DISTINCT STU_GENDER FROM STUDENT;

--15. 학생들의 학년중복을 제거하고 검색

SELECT DISTINCT STU_GRADE FROM STUDENT;

--16. 학생들의 학과, 학년 중복을 제거하고 검색

SELECT DISTINCT STU_DEPT, STU_GRADE FROM STUDENT;

--17. 학생들의 학과, 반 중복을 제거하고 검색

SELECT DISTINCT STU_DEPT, STU_CLASS FROM STUDENT;

--20. 학생들의 학번, 이름에 별칭 ‘학번’과 ‘이름’을 부여하고 검색

SELECT STU_NO "학번", STU_NAME "이름" FROM STUDENT;

--21. 수강테이블의 모든 정보를 검색. 별칭을 한글로 부여하기

SELECT * FROM ENROL "수강";

 

 

--25. 컴퓨터정보학과 학생들을 검색

SELECT STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%정보%';

--26. 기계과 학생들을 검색

SELECT STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%기계%';

--27. 전기전자과 학생들을 검색

SELECT STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%전자%';

--28. 신장이 170이상인 학생들을 검색

SELECT STU_NAME, STU_HEIGHT FROM STUDENT WHERE (STU_HEIGHT >= 170);

--29. 체중이 65이하인 학생들을 검색

SELECT STU_NAME, STU_WEIGHT FROM STUDENT WHERE (STU_WEIGHT <= 65);

--30. 기계과 학생들의 학번, 이름 검색

SELECT STU_NO, STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%기계%';

--31. 컴퓨터정보학과 학생들의 학번, 이름검색

SELECT STU_NO, STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%정보%';

--32. 전기전자과 학생들의 학번, 이름 검색

SELECT STU_NO, STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT LIKE '%전자%';

 

33. 남학생들의 이름 검색

SELECT STU_NAME FROM STUDENT WHERE STU_GENDER LIKE 'M';

34. 여학생들의 이름 검색

SELECT STU_NAME FROM STUDENT WHERE STU_GENDER LIKE 'F';

35. 전기전자과 이외 학생들의 모든 정보 검색 

SELECT * FROM STUDENT WHERE STU_DEPT NOT LIKE '%전자%';

36. 기계과 이외 학생들의 모든 정보 검색

SELECT * FROM STUDENT WHERE STU_DEPT NOT LIKE '%기계%';

37. 점수가 80점 이상인 학생들의 학번 검색

SELECT STU_NO FROM ENROL WHERE (ENR_GRADE >=80);

38. ‘김인중‘ 학생의 모든 정보 검색

SELECT * FROM STUDENT WHERE STU_NAME LIKE '%김인중%';

39. ‘컴퓨터정보’과 학생중 1학년 학생 검색

SELECT STU_GRADE, STU_NAME FROM STUDENT WHERE STU_GRADE LIKE '%1%';

40. ‘기계'과 이면서 2학년 학생들의 모든 정보 검색

SELECT * FROM STUDENT WHERE STU_GRADE LIKE '%2%' and '%기계%';

 

45. 신장 160이상이며, 170이하인 학생들 학번과 이름검색

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE (STU_HEIGHT >= 160) AND (STU_HEIGHT <=170);

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE (160<=STU_HEIGHT) AND (STU_HEIGHT <=170);

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE STU_HEIGHT BETWEEN '160' AND '170'; 

46. 2013학번인 학생의 학번, 이름, 학과 검색

SELECT STU_NO, STU_NAME, STU_DEPT FROM STUDENT WHERE STU_NO LIKE '%2013%';

48. 김씨성을 가진 학생들의 학번과 이름 검색

SELECT STU_NO, STU_NAME FROM STUDENT WHERE STU_NAME LIKE '%김%';

49. 학번이 xxxx20xx인 학생들의 모든 정보 검색

SELECT * FROM STUDENT WHERE STU_NO LIKE '____20%';

DESC STUDENT;

51. 이름에 옥'이 들어있는 학생이름 검색

SELECT STU_NAME FROM STUDENT WHERE STU_NAME LIKE '%옥%';

52. 신장이 null인 학생이름 검색

SELECT STU_NAME FROM STUDENT WHERE STU_HEIGHT IS NULL;

53. 신장이 null이 아닌 학생들의 학번, 이름 검색 

SELECT STU_NO, STU_NAME FROM STUDENT WHERE STU_HEIGHT IS NOT NULL;

54. 컴퓨터정보 또는 기계과인 학생들의 학번, 이름 검색

SELECT STU_NO ,STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT IN ('컴퓨터정보', '기계');

SELECT STU_NO ,STU_NAME, STU_DEPT FROM STUDENT WHERE (STU_DEPT = '컴퓨터정보') OR (STU_DEPT = '기계');

56. 학번, 이름을 학번순으로 검색

SELECT STU_NO, STU_NAME FROM STUDENT ORDER BY STU_NO;

59. 학과별 학년이 높은 순으로 학생들의 정보를 검색

SELECT * FROM STUDENT ORDER BY STU_DEPT, STU_GRADE DESC;

 

이렇게 예제풀이를 해봤다!

 

몇가지만 직접 오라클과 CMD에서 어떤 모습인지 리뷰해 보겠다.

 

59번. 학과별 학년이 높은 순으로 학생들의 정보를 검색

SELECT * FROM STUDENT ORDER BY STU_DEPT, STU_GRADE DESC;

여기서 핵심은 ORDER BY (정렬) 과 DESC (내림차순) 으로 데이터를 조회하는 부분이다.

오름차순으로 하고싶으면 DESC를 빼면 됨 따로 INCREMENT를 하지 않아도 됨.

59번 ORACLE
59번 CMD

54번. 컴퓨터정보 또는 기계과인 학생들의 학번, 이름 검색

SELECT STU_NO ,STU_NAME, STU_DEPT FROM STUDENT WHERE STU_DEPT IN ('컴퓨터정보', '기계');

SELECT STU_NO ,STU_NAME, STU_DEPT FROM STUDENT WHERE (STU_DEPT = '컴퓨터정보') OR (STU_DEPT = '기계');

 

 

여기서 핵심은 WHERE 로 제한적인 정보를 집약적으로 조회 할 수 있다는 점과

같은 결과 값을 조금은 다른 모습을 한 쿼리로 조회 가능하다

 

 

54번 오라클
54번 CMD

 

 

49번.  학번이 XXXX20XX인 학생들의 모든 정보 검색

SELECT * FROM STUDENT WHERE STU_NO LIKE '____20%';

 

  (여기서 _ 이게 4개임) 뒤에 값은 % 표시로 마무리

SQL 오라클에서는 빈 공백을 나타낼때 _ 로 표시함.

 

 

49번 오라클
49번 CMD

 

 

 

45번. 신장 160이상이며, 170이하인 학생들 학번과 이름검색

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE (STU_HEIGHT >= 160) AND (STU_HEIGHT <=170);

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE (160<=STU_HEIGHT) AND (STU_HEIGHT <=170);

SELECT STU_NAME, STU_NO, STU_HEIGHT FROM STUDENT WHERE STU_HEIGHT BETWEEN '160' AND '170';

비교연산자를 오라클에서 표시할때 이런식으로 표시함

산술연산자와 AND 를 사용하여 표현 가능하고 

BETWEEN 문법을 사용해서도 결과값 도출이 가능하다.

 

45번 오라클
45번 CMD

 

이외에도 DISTINCT, LIKE, NOT LIKE, NULL, IS NOT NULL 등 여러가지 표현법을 배워보는  시간이였다.

 

수고수고!

댓글