• MariaDB, MySQL
  • DELIMITER $$
    DROP PROCEDURE IF EXISTS loopinsert$$
    CREATE PROCEDURE loopinsert()
    BEGIN
    	DECLARE i INT DEFAULT 1;
        
        WHILE i <= 500 DO
    		INSERT INTO board (
    			board_title
    		) values (
    			concat('제목', i)
    		);
            
            SET i = i + 1;
    	END WHILE;
    END$$
    DELIMITER $$
    
    CALL loopinsert();
  • Oracle
  • BEGIN
    FOR i IN 1..500 LOOP
    INSERT INTO BOARD(title) 
    VALUES(CONCAT('제목', i);
    END LOOP;
    END;

'강의 자료 > JSP' 카테고리의 다른 글

Database 검색 쿼리  (0) 2021.10.18
Database Paging Query(Mariadb, mySql / Oracle)  (0) 2021.10.18
  • 게시판 구축 시에 필요한 기능 중 하나인 검색 기능에 대한 쿼리를 알아보자
  • 검색 기능 쿼리 작성 시에도 oracle과 mariadb, mysql은 약간의 차이를 보여준다

 

  • MySQL, MariaDB
  • SELECT *
      FROM [테이블 명]
     WHERE [검색 기준 컬럼 명] LIKE concat('%', '[검색할 문자열]', '%')

 

  • Oracle
  • SELECT *
      FROM [테이블 명]
     WHERE [검색 기준 컬럼 명] LIKE concat(concat('%', '[검색할 문자열]'), '%')
     
    SELECT *
      FROM [테이블 명]
     WHERE [검색 기준 컬럼 명] LIKE '%'||'[검색할 문자열]'||'%'

 

MySQL, MariaDB의 경우 concat()을 사용하면 앞뒤로 %를 붙여서 사용이 가능하지만 Oracle은 concat안에 매개변수는 2개밖에 안 들어가기 때문에 concat을 concat으로 감싸주거나 ||를 이용해야 한다.

'강의 자료 > JSP' 카테고리의 다른 글

게시판 더미 데이터 생성  (0) 2021.10.18
Database Paging Query(Mariadb, mySql / Oracle)  (0) 2021.10.18

- Oracle DataBase와 MariaDB, MySql은 페이징 처리를 할 때 사용하는 쿼리가 다르다 코드를 보며 차이점을 확인해 보자

 

  • MariaDB / MySQL
  • SELECT *
      FROM [테이블 명]
     ORDER BY [정렬 기준 컬럼] [DESC | ASC]
     LIMIT [시작 행번호] OFFSET [출력 갯수]
  • 위와 같이 쿼리의 구조를 잡을 수 있다.
  • Mariadb, MySQL은 LIMIT을 통해 출력된 결과물을 원하는 개수만큼 가져올 수 있다.
  • SELECT *
      FROM BOARD
     ORDER BY BOARD_IDX DESC
     LEMIT 0 OFFSET 10
  • 위의 코드는 게시글 테이블에서 역순으로 정렬 후, 정렬 결과에서 0번부터 10개의 게시물을 가져온다는 쿼리이다.

 

  • Oracle
  • SELECT * 
      FROM (SELECT [정렬한 테이블 별칭].*,
    			   rownum rownum_
    		  FROM (SELECT *
    				  FROM [테이블 명]
    				 ORDER BY [정렬 기준 컬럼 명] [DESC | ASC]) [정렬 한 테이블 별칭]) 
      WHERE rownum_ > [시작 행 번호]
    	AND rownum_ <= [끝 행 번호]
  • 오라클은 위의 두 데이터베이스보다는 쿼리가 복잡하다.
  • LIMIT라는 기능이 없는 것도 있지만 정렬을 먼저 하고 rownum의 조건을 잡을 수 없기 때문이다.
  • where절이 실행이 되고 order by절이 실행되는데 순서를 바꿔서 실행할 방법이 없으므로 서브 쿼리를 사용해 정렬을 한 후 rownum과 테이블을 합치는 서브쿼리를 만들어주고 그 뒤에 rownum으로 시작 행부터 끝 행까지를 잡아준다.
  • SELECT *
      FROM (SELECT row_.*,
    			   rownum rownum_
    		  FROM (SELECT *
    				  FROM BOARD
    				 ORDER BY BOARD_IDX DESC) row_)
     WHERE rownum_ > 0
       AND rownum_ <= 10
  • 다른 방법으로는 아래의 방법을 사용할 수 있다 / ROW_NUMBER()함수와 OVER()함수 사용
  • SELECT s.*
      FROM (SELECT ROW_NUMBER() OVER(ORDER BY [정렬 기준 컬럼명] desc) RNUM,
    			   [테이블 alias].*
    		  FROM [테이블 명] [테이블 alias]) s
     WHERE s.RNUM BETWEEN [시작 행] AND [끝 행]

'강의 자료 > JSP' 카테고리의 다른 글

게시판 더미 데이터 생성  (0) 2021.10.18
Database 검색 쿼리  (0) 2021.10.18

+ Recent posts