본문 바로가기
반응형

IT/Database98

단일행 서브쿼리(Single Row SubQuery) / 다중행 서브쿼리(Multi Row SubQuery) / 다중 칼럼 서브쿼리(Multi Column SubQuery) / 연관 서브쿼리(Correlated Subquery) 서브쿼리는 쿼리 내에 쿼리가 또 존재한다고 생각하면 편하다. 이름이 각각 있는데 하나씩 살펴보도록 하면 단일행 서브쿼리(Single Row SubQuery) 리턴값이 하나 이하인 쿼리를 의미하며 단일행 비교연산자 ( =, , 2023. 11. 21.
[Oracle] (+) Join 의미 데이터베이스 조인에 대한 내용은 아래 참고 포스팅 참고 바란다. Oracle에서 조인을 할 경우 ANSI(SQL 표준) 문법으로는 SELECT * FROM A LEFT OUTER JOIN B ON A.id= B.id; 이런식으로도 사용이 되지만 좀더 편하게는 아래와 같이 사용이 될수도 있다. SELECT * FROM A, B WHERE A.id = B.id (+) ; 여기서 (+) 가 없다면 Inner Join 이 되고 (+) 가 붙는다면 안붙은 테이블을 기준으로 (+) 붙은것들을 조인 하는 의미이다. SELECT * FROM A, B WHERE A.id = B.id (+) AND B.name='1' (+) AND B.addr='seoul'; 이렇게 될 경우엔 SELECT * FROM A LEFT OUT.. 2023. 11. 20.
[Oracle] savepoint 데이터베이스를 공부하다보면 Commit, Rollback 이랑 함께 나오는 단어가 있는데 savepoint이다. 게임에서 시점을 저장하는것과 비슷한 개념으로 생각하면 된다. 간단하게 예제로 바로 알아보면 이해가 갈것이다. 1. Insert into table values ('1'); 2. SAVEPOINT save1; 3. Insert into table values ('2'); 4. SAVEPOINT save2; 5. Delete from table; 6. Rollback to save1; 흐름대로 보면 1번 1 을 넣는다. 2번 save1이라는 이름으로 저장한다. 3번 2를 넣는다. 4번 save2라는 이름으로 저장한다. 5번 모든 데이터를 삭제한다. 6번 save1지점으로 돌아간다. 이렇게 되면 결.. 2023. 11. 11.
정규화 (1,2,3차 정규화 / 정규형) (Normal Form) 데이터베이스를 하게 되면 정규화 라는 단어를 접하게 된다. 특정 조건에 맞추어 어떠한 형태를 해두는것이 정규화인데, 조건에 만족이 되어있다면 정규형이고, 다음차 정규화 대상이라고 표현한다. 데이터베이스에서는 1-5차 정규화가 존재하며 가장 많이 쓰이는 1-3 차 정규화에 대해 다뤄볼 것이다. 먼저 예시를 위해 아래 처럼 테이블이 존재한다고 가정하자. 학번(기본키) 이름 과목번호 과목 성적 A0001 홍길동 S1,S2 수학,과학 80,90 A0002 이순신 S3 영어 70 먼저 1차 정규화는 테이블의 컬럼이 원자값을 갖도록, 한개의 값만 갖도록 하게 하는것이다. 지금 위 표에서 과목과 성적에 홍길동 학생이 두개의 값이 있다. 예시를 1차 정규화를 적용시켜보겠다. 1차 정규화 결과 (모든 값은 원자값으로 구.. 2023. 11. 5.
[Oracle] 테이블 명 조회 쿼리 / 뷰 조회 쿼리 / 프로시저 / 시퀀스 조회 쿼리 아래 표 참고 조회 대상 DBA권한 있을 경우 테이블 명 SELECT owner, table_name FROM dba_tables WHERE TABLE_NAME like '%test%'; SELECT owner, table_name FROM all_tables WHERE TABLE_NAME like '%test%'; 컬럼 뷰 조회 SELECT * FROM ALL_SOURCE WHERE owner = 'owner' AND name = 'view_name'; SELECT * FROM user_views WHERE view_name = 'view_name'; 프로시저 조회 SELECT * FROM all_source WHERE name like '%procedure_name%'; 시퀀스 조회 SELECT * .. 2023. 11. 3.
그룹함수 (GROUP BY, ROLLUP, CUBE, GROUPING-SET, GROUPING) sql 쿼리에는 그룹을 지정할수 있는 문법이 존재하는데 Group by 와 함께 사용되는 다른 문법들도 예제와 함께 알아볼 것이다. 예시 데이터 이름 월 월급 홍길동 2023.01 10,000 홍길동 2023.02 15,000 이순신 2023.01 20,000 이순신 2023.02 25,000 유관순 2023.01 0 유관순 2023.02 50,000 Group By SELECT 이름, 월, SUM(월급) AS 월급 FROM TABLE GROUP BY 이름, 월; 이름 월 월급 홍길동 2023.01 10,000 홍길동 2023.02 15,000 이순신 2023.01 20,000 이순신 2023.02 25,000 유관순 2023.01 0 유관순 2023.02 50,000 이름 과 월 기준으로 그룹이 되어 .. 2023. 11. 2.
[Mssql/Sqlserver] Top N with ties 이전에 포스팅에서 mysql 기준 limit 을 설명하면서 sqlserver 에서의 Top N 에 대해서 잠깐 얘기한 적이 있다. 자세한 내용은 아래 참고 포스팅 참고 바란다. sqlserver 에서 상위 몇개를 뽑을땐 Top n을 사용하는데 옵션으로 TOP WITH TIES 를 추가할수 있다. TOP 과 동일하게 상위 N개의 데이터를 조회하지만 동일한 데이터가 있을경우엔 함께 출력이 된다. 또한 TOP WITH TIES를 사용하기 위해서는 ORDER BY 절이 반드시 함께 와야 한다. 동일한 데이터는 ORDER BY절 뒤의 오는 컬럼이 기준이 된다. id cnt a 1 a 1 b 2 만약 top만 사용할 경우 select top 1 id, cnt from table order by id, cnt id .. 2023. 11. 1.
[Oracle] 에러 표시 방법(ORA-00000) (sqlca.sqlcode) Toad oracle이나 다른 oracle에서 쿼리를 날렸을 경우 에러가 나면 아래와 같이 보이게 된다. ORA-00000 : ....한 에러입니다. 이렇게 Oracle의 약자인 ORA 에 하이픈(-) 후 숫자 5자리가 나온다. 프로그래밍 언어를 사용하면서 jdbc를 하며 oracle sql return code에 대해서 본적이 있다. c언어의 경우 return 으로 받고 if (sqlca.sqlcode = 0) .... if (sqlca.sqlcode = -54 ) ... 등 이렇게 에러를 코드로 받아서 if 문으로 비교를 한다. 구글링을 해봐도 sqlcode = -54 이런 값은 안나온다. 그럼 위에서 처럼 oracle표준 에러 형식으로 변환해서 검색을 하면 된다. ORA-00054 라고 검색하면 결.. 2023. 10. 31.
[Oracle] SELECT .... FOR UPDATE 문 Oracle 9i 이상을 사용하면 이와 같은 기능이 가능하다. Select 문으로 사용자가 임의로 lock을 걸수 있는 명령 사용법은 아래와 같고 각 명령어 마다 설명을 추가할것이다. Select ......from .... where .... FOR UPDATE with no option; lock를 획득하기 까지 무한정 기다린다. ex) select * from detp where dept_no = '1111' for update; Select ......from .... where .... FOR UPDATE NOWAIT; lock을 획득하지 못하면 바로 exception 처리가 된다 ex) select * from detp where dept_no = '1111' for update nowait;.. 2023. 10. 29.
반응형