ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스#6
    데이터베이스 2023. 2. 3. 10:09

    데이터베이스#6

    • using
    • SELECT table.column, table2.column FROM table1 JOIN table2 USING (column);
    • on
    • SELECT table.column, table2.column FROM table1 JOIN table2 ON table1.column = table2.column;
    • cross join
      • 카티션 곱
        • 두 개 이상의 테이블에 대해 연결 가능한 행을 모두 결합
        • 대용량에 테이블에서 발생할 경우 처리속도 저하
        • 곱이기때문에 두 테이블의 행 x 행 한 처리 결과가 나온다
      • 중복되는 컬럼의 경우 모호하기때문에 테이블(table1)에 대한 칼럼 이라고 명시 해준다
      SELECT table.column, table2.column FROM [table, table2 | table1 CROSS JOIN table2];
    • OUTER JOIN
      • LEFT
      • RIGHT
      • FULL
    • 오늘의 키워드
      • UNION
      • USING
      • JOIN
      • Join
    •  
    --LOCALHOST SAMPLE
    --using, on 아래 두개는 같은 결과
    -- join은 from의 다음절
    
    select studno, name, deptno, dname
    from student
    natural inner join department;
    -- natural join department; inner join을 생략할 수 도 있다. 
    
    select studno, name, deptno, dname
    from student
    join department using(deptno)
    where name='전인하';
    
    --필터링할 조건과 
    select studno, name, student.deptno, dname
    from student
    join department on student.deptno = department.deptno
    where name = '전인하';
    
    --카티션 곱
    select studno, student.deptno, name, dname
    from student
    Cross join department;
    
    -- EQUI JOIN  =비교를 하면 EQUI JOIN이라 하고 =비교를 하지 않는 모든걸  NON-EQUI JOIN이라고 한다(AND 등등)
    -- 학생 테이블과 부서 테이블을 EQUI JOIN하여 학번, 이름, 학과번호, 소속 학과 이름, 학과 위치를 출력하여라
    SELECT S.STUDNO, S.NAME, S.DEPTNO, D.DNAME, D.LOC
    FROM STUDENT S, DEPARTMENT D
    WHERE S.DEPTNO = D.DEPTNO;
    
    --달력할때 사용
    with a as(
        select 1 as A, 2 as B, 5 as C, 6 as D from dual
        union
        select 3 ,4 ,7 ,8 from dual
    )
    select * 
    from a 
    cross join a;
    
    select * from all_objects;
    select * from dict;
    
    select rownum from dict WHERE ROWNUM<=31;
    
    -- 공통되는 곳에는 식별자를 붙이면 오류난다(ORA-25155: column used in NATURAL join cannot have qualifier) deptno
    select s.studno, deptno 
    from student s
    natural join department d;
    
    -- NATURAL JOIN을 이용하여 교수 번호, 이름, 학과 번호, 학과 이름을 출력하여라.
    select p.profno, p.name, deptno, d.dname
    from professor p
    natural join department d;
    
    -- NATURAL JOIN을 이용하여 4학년 학생의 이름, 학과 번호, 학과 이름을 출력하여라.
    select s.grade, s.name, deptno, d.dname
    from student s
    natural join department d
    where s.grade>=4;
    
    -- JOIN ~ USING 젃을 이용하여 학번, 이름, 학과번호, 학과이름,학과위치를 츨력하여라.
    select s.studno, s.name, deptno, d.name, d.loc
    from student s 
    join department d
    using(deptno);
    -- EQUI JOIN의 3가지 방법을 이용하여 성이 '김'씨인 학생들의 이름, 학과이름, 학과위치를 출력하여라.
    select name, dname, loc
    from student s, department d
    where s.deptno = d.deptno
    and name like '김%';
    
    select s.name, dname, d.loc
    from student s
    natural join department d
    where name like '김%';
    
    select name, dname, loc
    from student join department
    using(deptno)
    where name like '김%';
    
    -- 교수 테이블과 급여 등급 테이블을 NON-EQUI JOIN하여 교수별로 급여 등급을 출력하여라
    select p.* ,name as 이름, grade as 등급, sal as 급여
    from professor p
    join salgrade s on p.sal between losal and hisal;
    
    -- 학과 번호를 가지고 profno를 조회
    select 
    --distinct(profno)
    profno
    from student join professor
    using(profno);
    
    select distinct(profno)
    from student join professor 
    using(profno);
    
    select profno from student
    UNION
    select profno from professor;
    
    -- 행제거
    DELETE FROM STUDENT WHERE STUDNO IN(33333,33334);
    COMMIT;
    
    --outer join (NULL대상 칼럼도 출력하고자 할때)
    SELECT S.STUDNO, S.NAME, PROFNO, P.NAME
    FROM STUDENT S
    LEFT JOIN PROFESSOR P USING(PROFNO)
    ORDER BY 1, 3;
    
    SELECT * 
    FROM PROFESSOR P, STUDENT S
    WHERE P.PROFNO = S.PROFNO(+);
    
    SELECT * FROM DEPARTMENT;
    
    SELECT D1.DEPTNO, D1.DNAME ||'의 상의 학과는 '|| NVL(D2.DNAME,'없습니다')
    FROM DEPARTMENT D1 LEFT JOIN DEPARTMENT D2
    ON D1.COLLEGE = D2.DEPTNO;
    
    
    --LOCALHOST HR
    -- SELECT *  EMPLOYEES;
    
    -- 사용자 아이디가 'jun123'인 학생과 같은 학년인 학생의 학번, 이름, 학년을 출력하여라
    SELECT STUDNO, NAME, GRADE, USERID
    FROM STUDENT
    where grade = (
        SELECT grade
        FROM STUDENT
        WHERE USERID = 'jun123'
        );
        
    SELECT STUDNO, NAME, DEPTNO,
        (SELECT DNAME FROM DEPARTMENT WHERE DEPARTMENT.DEPTNO = STUDENT.DEPTNO) DNAME
    FROM STUDENT;
        
    SELECT STUDNO, NAME, DEPTNO, DNAME
    FROM STUDENT NATURAL JOIN DEPARTMENT;
    
    
    -- 101번 학과 학생들의 평균 몸무게보다 몸무게가 적은 학생의 이름, 학과번호, 몸무게를 출력하여라
    SELECT * FROM STUDENT;
    SELECT NAME, DEPTNO, WEIGHT
    FROM STUDENT
    WHERE  WEIGHT <
        (SELECT AVG(WEIGHT)
        FROM STUDENT
        WHERE DEPTNO = 101
        
        )
    ORDER BY DEPTNO;
    
    --20101번 학생과 학년이 같고, 키는 20101번 학생보다 큰 학생의 이름, 학년, 키를 출력하여라
    SELECT NAME, GRADE, HEIGHT
    FROM STUDENT
    WHERE GRADE = (SELECT GRADE 
                    FROM STUDENT 
                    WHERE STUDNO = 20101)
    AND HEIGHT > (SELECT HEIGHT 
                    FROM STUDENT 
                    
                    WHERE STUDNO = 20101);

    '데이터베이스' 카테고리의 다른 글

    데이터베이스#8  (0) 2023.02.07
    데이터베이스#7  (0) 2023.02.07
    데이터베이스#5  (0) 2023.02.02
    데이터베이스#2  (0) 2023.02.02
    데이터베이스 #1  (0) 2023.01.26
Designed by Tistory.