본문 바로가기
반응형

IT/Database112

[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.
[Oracle] NTILE 함수 특정 컬럼을 기준으로 그룹을 묶을때 사용한다. 사용법은 아래와 같다. SELECT NTILE([그룹으로 나눌 정수]) OVER (PARTITION BY [컬럼1] ORDER BY [컬럼2]) ID DATE 1 2023-01-01 2 2023-01-09 3 2023-01-03 4 2023-01-31 이런 테이블이 있다고 하고 SELECT ID, DATE, NTILE(2) OVER (DATE ORDER BY DESC) AS NTILE FROM TABLE; 이렇게 해주면 date를 내림차순 하여 2개 그룹으로 묶어준다. 결과는 아래와 같다. ID DATE NTILE 1 2023-01-01 1 3 2023-01-03 1 2 2023-01-09 2 4 2023-01-31 2 특정 값을 가지고 n개 만큼 그룹을 만.. 2023. 10. 28.
[MySQL] 버전 확인방법 MySQL에서 버전 확인하는 방법 쿼리로 확인 SELECT VERSION(); SHOW VARIABLES LIKE '%VERSION%' 클라이언트 버전 확인 mysql --version mysql -v 2023. 10. 20.
[Mysql] MATCH AGAINST 사용(fulltext 검색) 데이터베이스 최적화나 튜닝에 대해서 다뤄본 사람은 like 문에 앞뒤로 % 를 달게 되면 index scan을 안타고 full scan을 타게 되는것을 알고 있을것이다. 하지만 정확한 값을 모르기도 하고 내용 중간에 포함된 내용을 검색하려고 한다면 어쩔수 없이 like '%test%' 이런식으로 앞뒤로 묶어서 쿼리를 만들어야한다. 그럴경우에 MATCH AGAINST 를 사용하면 효과적이어서 방법을 소개하려고 한다. 먼저 maria db 에서 소개하는 사이트는 아래와 같다. https://mariadb.com/kb/en/match-against/ MATCH AGAINST Perform a fulltext search on a fulltext index. mariadb.com 사용하기 위해서는 몇가지 조건이.. 2023. 10. 15.
[Oracle] Merge Into 문법 (값이 있으면 update, 없으면 insert) 제목에 써있는 그대로, 테이블에서 특정 조건으로 검색하여 값이 나오면 update를 하고 없다면 insert를 하게 되는 문법이다. 주로 초기 회원가입이나, 오랜만에 접속하는 휴먼 계정 등에서 사용이 될수 있고, 이밖에도 많은곳에서 사용되는 쿼리이다. 만약 프로그래밍 언어로 풀게 되려면 먼저 아래와 같다. //조회 해보고 SELECT COUNT(1) AS CNT FROM TALBE WHERE ID = 'id' AND NAME='name'; if (cnt >=1){ //값이 있다면 UPDATE TABLE SET NUM = NUM+1 WHERE ID = 'id' AND NAME = 'name'; } else{ //값이 없다면 INSERT INTO TABLE (ID,NAME,NUM) VALUES ('id','.. 2023. 10. 14.
반응형