반응형

SQL 16

[SQL 활용] 15. 저장 프로시저와 사용자 정의 함수

프로시저 사용자 정의 함수 사용자 정의 함수가 리턴값을 명시적으로 반환할 수 있지만 프로시저는 잘 시행됬는지 안됬는지 여부를 반환하는것 외에는 거의 비슷하다. table 형태를 반환한다. (안의 속성들) 주의 : RETURNS에서 테이블정의를 한 속성들의 구성과 SELECT를 통해 INSERT한 속성들의 구성이 같아야한다. 뷰와 비슷한 효과를 갖는다.

[SQL 활용] 14. 사용자 관리

보안 권한 부여 새로 만든 로그인객체를 현재 있는 데이터베이스를 접근할 수 있도록 등록 가장 단순한 자격 : public - 최소한의 권한 magicCoperation에만 접근 가능하고, 그 전에 만든 db들은 접근 불가능하다. public으로, 최소한의 권한만 줬기 때문에 db에 접근만가능하지 테이블 접근은 불가능함 이번에는 쿼리문으로 더 많은 권한을 가진 user3를 만들어보자. 계정 생성은 master db에서 관리한다. 이 계정이 magicCorp에서도 사용할 수 있게 한다. 디폴트로 public 권한만 가지고 있기 때문에 GRANT를 이용해 부서테이블에 대해 select와 update 권한을 부여하자. SSMS : GUI

[SQL 활용] 13. 인덱스와 뷰

인덱스 내가 만약 키가 100인 아이를 찾고싶으면 처음 200부터 비교해갈 수 있지만, 이럴 경우 성능이 떨어짐. 우리가 키값에 따라 색인을 만들어놓으면 순서적으로 접근하는게 아니라 랜덤하게 직접적으로 임의의 순서를 따라 접근할 수 있기 때문에 보다 빠르게 데이터를 추출할 수 있다. ex) 사원번호에 인덱스를 부여할경우 고유 인덱스가 됨. 동일한 사원번호를 가진 사원은 존재하지 않으니까. 부서 번호에 인덱스를 부여할경우 비고유 인덱스가 됨. 여러 사원이 한 부서 번호를 공유하니까. 기본키에 대해서는 자동으로 dbms가 고유색인을 만든다. 성능 향상을 위해. 서로 다른 부서여도 위치는 같을 수 있으니 비고유 인덱스를 생성해보자. 부서 번호는 오름차순으로, 같은 부서일경우 급여는 내림차순으로 정렬한 후 결합..

[SQL 활용] 12. 순위 계산

순위 함수 salary가 500인 세 명이 모두 출력됨 rank() 는 5등이 여러명이면 여러명인만큼 등수가 사라짐 dense_rank()는 5등이 여러명, 그 후 6등 그룹 별 순위 부서 번호대로 랭크를 하는데 이 때 부서 번호대로 분류를 하고 그 분류된 각각의 소그룹에서 급여기준으로 내림차순으로 정렬해서 그 순위를 rank_dept 라는 속성값으로 출력하시오. from절에 subquery 형태로 인라인 뷰 사용. 중복된 결과가 나오는데, 중복 허용하고싶지 않다면 select DISTINCT 붙여주면 됨. 부서별로 급여를 내림차순한 후, 가장 처음으로 나오는 값을 출력. 즉, 각 부서별 최고 급여액. (=MAX) LAG(salary, 1) : salary를 기준으로 나보다 바로 앞 1명 LEAD(sal..

[SQL 활용] 11. 집합 연산자와 집단 연산자

집합 연산자 부서 번호가 10번인 사원과 직급이 staff인 사원들이 모두 합집합으로 검색됨. 그냥 union을 쓰게되면 중복이 허용이 안되면서 dno가 10이고 job이 staff인, 교집합에 해당하는 아이 ENO 114는 한번만 나온다. 근데 UNION ALL을 사용하면 중복이 허용되면서 ENO 114 사원은 DNO가 10이고 job이 staff로 두 번 해당되기때문에 두 번 나온다. 외부 합집합 : 합병 호환성을 만족하지 않는데 합집합하고 싶은 경우 활용 튜플 수는 14개, commission의 값은 4개 having은 group by가 나와야 함께 쓸 수 있다. ex) 학과별로 그룹핑하고, 그 그룹들을 대상으로 학년별로 그룹핑하고싶을때 각각의 합, 부서별 합, 전체 합이 모두 나옴 rollup에서..

[SQL 활용] 10. 중첩 질의문

10. 중첩 질의문 중첩 질의문의 개요 중첩질의문은 조인구문과 사실 똑같은데 어떤 사람들에겐 조인보다 중첩 질의문으로 생각하는게 더 편할수도 있다. 중첩 질의문으로 인해 sql의 파워가 훨씬 증가하진 않지만, 표현능력이 향상된다. 단일행 서브 쿼리 : 검색조건이 후보키와 연관되있을경우 한 튜플당 하나밖에 없는 고유값이기때문에 한개의 튜플만 나올수밖에 없음. 다중행 서브쿼리의 경우 피연산자의 타입이 맞지 않아서 일반적인 비교 연산자를 사용할 수 없음. 사원번호가 기본키니까 = 연산자를 사용해도 문제가 없다. 단일행 서브쿼리이기때문. 봉급이 500 이상인 사원과 같은 부서에서 근무하는 사원들은 여러명은 여러명이라 다중행이고, 그래서 비교연산자(=)를 쓸 수 없다. = 대신 IN을 쓰면 된다. 20번 부서 사..

[SQL 활용] 09. 조인 질의문

09. 조인 질의문 조인 Employee에 대해 E라는 별명을, Department에 대해 D라는 별명 사용. 다양한 조인 구문 ex) E.DNO = D.DNO 자연 조인 : 두 테이블이 공통으로 가진 속성을 기준으로 동등조인을 한다. 같은 테이블을 다른 별명으로 지정해주면 두 개의 다른 테이블로 인식한다. 사원은 다 나오고 그 중에 관리자가 있는 애들은 관리자 이름도 같이 나오게 하려고.

[SQL 활용] 08. 트랜잭션

08. 트랜잭션 트랜잭션 트랜잭션 제어문(TCL) commit문을 만나기 전까지 모든 명령문을 하나의 트랜잭션으로 여김. dno가 10번인걸 지운 후 dno가 null인 새로운 튜플을 삽입. dno가 null값이 안되게 설정했으니 오류가 뜸. @@ERROR에 오류가 저장되므로 혹시 @@ERROR이 0이 아니면, 즉 어떠한 에러가 저장되있다면 롤백을 하고, 그렇지 않다면 commit을 해라. savepoint까지만 rollback하도록. 저장점 : SAVE TRAN svpoint1 ROLLBACK TRAN svpoint1을 통해 그 앞의 쿼리 INSERT는 철회된다. ROLLBACK TRAN 이후의 INSERT는 수행된다.

[SQL 활용] 07. 데이터 삽입과 변경

07. 데이터 삽입과 변경 INSERT 절 INTO emptest 뒤에 속성을 명시해주지 않았으므로 emptest의 모든 속성을 쓴다고 뜻함. 대신, eno와 name을 제외한 모든 속성은 null. SELECT의 결과물을 새로운 테이블로 만든다. 하나의 명령문으로 여러개의 튜플 삽입 가능 UPDATE와 DELETE emptest에 dname이 없기때문에 department 테이블에서 dname이 accounting인 튜플의 dno가 emptest의 dno랑 같은 튜플을 삭제한다.

반응형