본문 바로가기
반응형

IT/Database98

[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.
[Mysql] Limit / Offset 쿼리 (페이징 처리) Limit 함수 -> 사용법 : SELECT * FROM TABLE LIMIT 10; -> 설명 : 10개만 가져오기 Offset 함수 -> 사용법 : SELECT * FROM TABLE LIMIT 10 OFFSET 5; -> 설명 : 5번째 행부터 가져오기 이 두개 함수를 결합하여 쓰면 SELECT * FROM TABLE LIMIT 10 OFFSET 5; 이와 같다. 5번째 행부터 10개를 가져오라는 뜻이다. order by 와 함께 index 가 걸려있는 컬럼에 사용을 한다면 성능을 극대화 시킬수 있다. 특정 컬럼을 정렬하여 페이징 처리 하듯이 순서대로 몇개씩 가져올수 있다. 아래 사진과 같은 페이징 처리를 할수 있다. 2023. 10. 4.
null관련 함수(NVL, ISNULL, NULLIF, COALESCE ) 데이터베이스에서 null 값에 대해 처리할수 있도록 사용되는 함수들을 살펴볼 것이다. Oracle에서 사용되는 nvl 에 대해서는 아래 참고 포스팅을 참고 바란다. 그리고 isnull 함수 역시 nvl 과 같은 기능이고 mssql 에서 사용이 된다. 사용법은 nvl과 동일하다. NVL(표현식1, 표현식2) / ISNULL(표현식1, 표현식2) -> 표현식 1의 결과가 null이면 표현식 2를 출력 NULLIF(표현식1,표현식2) -> 표현식1이 표현식2와 같으면 NULL을 같지 않으면 표현식 1 리턴 특정값을 null로 치환할때 주로 사용한다. COALESCE(표현식 ...여러개) -> 첫번쨰 인자값이 NULL이면 두번째 인자값 리턴, 두번째가 NULL이면 세번쨰 값 리턴.... 모든 인자가 NULL이면.. 2023. 9. 26.
[Mysql] foreign key 추가하는법 mysql 에서 foreign key를 추가하는법을 공유한다. 물론 create 시에 함께 추가를 해도 무방하나, 정규화 작업을 거치게 되면서 테이블을 나누고 foreign key 를 설정해줘야하는 경우이다. 아래 두개 테이블을 보면 Table Name= Grade 순번(pk) 학번 과목 성적 1 111111 수학 A 2 111112 수학 B Table Name= Student 학번 이름 ... 111111 홍길동 111112 이순신 111113 장영실 먼저 Grade 테이블에서 기존에는 학번과 학생 이름들이 같이 명시 되어있었으나 정규화로 인해 학생 테이블이 별도로 만들어지면서 학번 이라는 컬럼이 fk와 pk 로 지정을 해야했다. 그럼 student에는 학번이 pk가 되야하고 grade 에서는 학번이 .. 2023. 9. 17.
[Oracle] CHARTOROWID 이 함수의 개념을 알기 전에 먼저 Oracle에서 RowId에 대한 개념을 알아야한다. RowID 란 Oracle Database 힙 (heap) 테이블의 row에는 ROWID라 불리는 행 주소가 있다. 간단하게 행의 주소를 가르키는 pseudo column // 16진수 숫자로 된 문자열, 테이블의 레코드를 나타내는 유일한 주소 값 그러고 CHARTOROWID 함수는 CHAR, VARCHAR2, NCHAR 또는 NVARCHAR2 데이터타입 값을 ROWID 데이터타입으로 변경한다. 즉, ROWID 데이터타입은 ROWID를 담기 위한 특수 데이터 타입이다. 사용법은 다른 함수들처럼 사용이 가능하다. SELECT last_name FROM employees WHERE ROWID = CHARTOROWID('A.. 2023. 9. 12.
[Mysql] ERROR 1217 - Cannot delete or update a parent row: a foreign key constraint fails mysql 에서 테이블을 삭제하려고 하는데 아래와 같은 에러가 발생했다. ERROR 1217 - Cannot delete or update a parent row: a foreign key constraint fails foreign 키 문제로 인해서 테이블이 안되는것이다. Mysql 에서 데이터 안전상 막아둔것이라 다음 설정을 하면 된다. mysql > SET foreign_key_checks = 0; mysql > drop table test; mysql > SET foreign_key_checks = 1; 이렇게 설정하면 테이블이 삭제가 된다. 2023. 8. 22.
반응형