본문 바로가기

728x90
반응형

배우기/복습노트[oracle sql]

(70)
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DDL의 ALTER DDL 의 ALTER를 공부했다. 3) ALTER alter로는 구조변경을 할 수 있다. 구조변경에는 컬럼명, 컬럼 데이터타입, 컬럼 사이즈, default 값, 컬럼삭제, 컬럼추가, 제약조건 등이 있다. 컬럼 순서는 절대 바꿀 수 없다(재생성으로 해결할 것). 가. 컬럼추가 새로 추가된 컬럼은 맨 마지막 컬럼으로 배치가 된다(중간에 위치하게 할 수 없음) 컬럼 추가 시 데이터타입 입력은 필수이며, default값, 제약조건은 명시할 수 있다. 여러 컬럼 동시에 추가가 가능하다(반드시 괄호 사용해야 함) 문법은 -- 순서 위반하면 에러 뜸. 단일 컬럼 추가시에는 괄호를 생략할 수 있으나 동시 추가시에는 괄호 필수이다. 위의 코드를 실행해보면 단일컬럼 생성인 첫 줄과 둘 째줄은 잘 실행되나 여러 컬럼을 동..
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DDL의 DROP 어제 배운 DDL의 CREATE 잠깐 언급하고 바로 DROP으로 넘어가겠다. DDL(Data Definition Language): CREATE, DROP, ALTER, TRUNCATE DDL은 Auto commit을 지원한다. 1) CREATE 문법 위 포맷을 근거로, 다음 중 테이블을 만들 때 정의되지 않는 것은? 이라는 문제도 SQLD에 출제된다. create table table_name as select * from org_name; 위처럼 CTAS 할 때 original table의 컬럼명, 컬럼순서, 데이터 타입, not null 속성 그대로 복제되며, not null을 제외한 나머지 제약조건은 복제되지 않는다. create table table_name as select * from emp..
[복습] 2023. 11. 6.(월) 문제 풀이(5문제) 실습문제 1. emp2, p_grade 테이블을 사용하여 각 직원의 나이를 기준으로 직원의 이름, 사번, 생년월일, 나이, 현재 직급(position), 예상 직급(나이로 계산한 직급), 예상 직급에 맞는 최저연봉과 최고연봉 기준을 모두 출력하여라. 내 풀이 먼저 작성하자면, 스칼라 서브쿼리로 작성하였다. select 절에 컬럼을 하나하나 넣어야 한다는 압박감(?)이 있어서 저렇게 생각해냈는데 선생님 해설은 달랐다. 조건절에서 그냥 바로 필터링하여 select절로 올려버리셨는데, 저 방법이 더 간단한 것을 왜 나는 복잡하게 접근했을까. 실습문제 2. emp 테이블을 사용하여 각 직원의 이름과 상위관리자 이름을 출력하여라. 단, 상위관리자가 없을 경우 본인의 이름을 출력하여라(스칼라서브쿼리 활용할 것) 실..
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DDL의 CREATE + 복습후기(20231106) 오늘 배운 내용은 SQLD 시험에 나오는 내용들이다. SQL의 분류 1. DDL(Data Definition Lanuage): 객체를 정의하는 언어. 객체 자체를 만들고 삭제하고 수정 등을 수행한다(auto commit). - CREATE, DROP, ALTER, TRUNCATE(데이터를 삭제하는데 2.에도 DELETE가 있지만 TRUNCATE는 DDL에 속한다. auto commit이기 때문이다.) 1) create: object_name이 들어오는 것처럼 객체에 대한 이해가 중요하다. 제일 많이 쓰이는 create는 create table 이다. ★ 테이블 명명 규칙(변수의 명명규칙과 비슷) - 테이블 이름은 반드시 문자로 시작(숫자 시작 불가). 특수문자 가능(" "로 감싸야 하나 사용을 권장하지 ..
[복습] SQL | Oracle join 넘어 또 산, 서브쿼리 (3) 마지막 서브쿼리인 스칼라 서브쿼리 여기서 스칼라 란 '하나의'라는 뜻이며, 스칼라 서브쿼리는 select절에 사용되는 서브쿼리이다(컬럼처럼 쓰기 위함). 스칼라 서브쿼리는 각 행마다 하나의 행이 리턴되어야 한다. join의 대체 문법이기도 하다. 예시로 살펴보자. 예) 각 직원의 이름, 급여, 부서명을 출력하여라(단, 부서명은 스칼라 서브쿼리로 표현할 것). 이렇게 표현하면 ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. 라는 ORA 메시지가 출력된다. 스칼라 서브쿼리만을 선택해서 실행하면 아래와 같이 보이듯이, 각 행마다 출력되는 서브쿼리 결과가 총 4개이기 때문이다. 이렇게 표현하면 ORA-00904: "D"."DEPTNO": 부적합한 식별자 라는 ORA 메시지가 뜬다. 앞..
[실습문제] 2023. 11. 3.(금) 문제 풀이(5문제) 실습문제 1. professor, department, student 테이블을 사용하여 position별로 가장 적은 급여(pay)를 받는 교수의 이름, position, pay, 학과명, 지도학생수를 출력하여라. 다중컬럼 서브쿼리 / 인라인뷰 / 상호연관 서브쿼리로 작성 1) 다중컬럼 서브쿼리 결과이다. 2) 인라인뷰 결과이다. 3) 상호연관 서브쿼리 결과이다. 내가 풀 땐 다 풀었고, 선생님 해설 들었을 때 맞은 거 확인했는데 왜 또 다시 풀려고 하면 못 풀지? 아직 개념이 잡히지 않은건가. 어쨌든, 상호연관 서브쿼리는 속도가 대체적으로 느리지만 테이블 수가 많은 경우는 간혹 성능이 높을 수는 있다. 그러나 가급적 안 쓰는 편이라고 한다. 실습문제 2. student, exam_01, departme..
[실습문제] 2023. 10. 31.(화) 문제 풀이(5문제) 31일에 왜 실습문제를 복습 안했는지 기억이 안나지만 누락되어있길래 오늘 다시 풀어보며 추가한다. 실습문제 1. student 테이블에서 1976년 1월에 태어난 학생의 이름, 학년, 생년월일을 출력하여라. 예전 거라 그런지 쉽게 풀이가 가능했다. 실습문제 2. professor 테이블에서 입사연도가 2000년보다 이른 경우 pay를 20% 인상, 2000년도 이후에는(2000년도 포함) 8% 인상하여 인상된 연봉과 함께 이름, 입사연도를 출력하여라 실습문제 3. professor 테이블에서 입사연도별 최대급여, 최소급여, 평균급여를 출력하여라. 단 입사연도는 1980, 1990, 2000, 2010년대로 표현하여라. 당시에 내가 풀지 못한 문제이다. 지금 차근차근 생각해보며 풀어봐야겠다. 또 풀지 못했..
[복습] SQL | Oracle join 넘어 또 산, 서브쿼리 (2) + 복습후기(20231103) 메인쿼리(가장 바깥에 있는 쿼리) 안에 있는 쿼리를 서브쿼리라고 하며 서브쿼리는 여러 depth로 표현이 가능하다. select (select ...) 스칼라 서브쿼리, 서브쿼리를 컬럼화 하겠다는 의미이며, from (selelct ...) 인라인뷰이며, 서브쿼리를 테이블화 하는 것이다. where 컬럼1 =(in) (select ...) 일반 서브쿼리로 가장 대표적인 형태이며 상수화를 의미한다. 만들어진 정보를 토대로 테이블을 찾는 다는 의미이다. 형태에 따른 분류를 하게 되면 1. 단일행 서브쿼리 이런 식으로 하나의 대상이 오는 것도 가능하다. select * from emp where (deptno, sal) = (10, 5000); 2. 다중행 서브쿼리 3. 다중컬럼 서브쿼리 오늘 배운 내용이, ..
[실습문제] 2023. 11. 2.(목) 문제 풀이(5문제) 실습문제 1. movie_table_t1 테이블을 사용하여 시도별 영화 이용비율이 가장 높은 연령대를 확인하여라(시도, 연령대, 이용비율 출력). 나의 경우에는 이 문제를 다중컬럼 서브쿼리로 풀었다. 아직 이름이 익숙치 않고 그냥 감으로만 풀었는데 앞으로는 내가 어떤 서브쿼리로 풀어가는지도 인지해야겠다. 먼저 다중컬럼 서브쿼리를 사용한 쿼리이다. 사전정보( group by 정보)를 where절 상수로 사용한다. 메인쿼리절의 컬럼만 출력되므로 메인쿼리에 없는 데이터는 select 처리할 수 없다. max(이용비율)이 위와 같은 경우는 서브쿼리에 있으므로 얘는 메인쿼리 select에 올 수 없다는 의미이다. 성능은 둘 째 치고 서브쿼리에 미리 만들어둔 사전정보 일부를 메인 select에 올리고 싶으면 인라인..
[복습] SQL | Oracle join 넘어 또 산, 서브쿼리(1) + 복습후기(20231102) 맨날 테스트하던 emp 테이블이 있다. 거기서 부서별 최고 연봉을 출력해보자. 드디어 이런 궁금증을 해결할 수 있는 날이 왔다. "그래서 최고 연봉을 받는 사람이 누구야?" 궁금증 해결은 아래에서....ㅎ 다른 데이터를 살펴보자. movie_table에서 강원도는 어떤 연령대의 영화 이용 비율이 높은지가 궁금하다거나, 시도별 가장 높은 연령대 영화이용비율이 어느 대인지 궁금하다. 그렇다면 시도별, 연령대별 이용 비율을 확인하여야 한다. 즉 목적에 따라 1차적 가공이 필요한 데이터이다. 그래서 데이터를 해석하고 1차 가공을 할 수 있는 감각이 여기서 중요하다. 이제까지 공부를 해왔다면 여기까지는 바로 작성할 줄은 알아야 한다. 이제 여기서 강원도의 최고 이용비율을 보이는 연령대를 출력하기 위해서는 아래처럼..

728x90
반응형