개념 창고/Database

    ORACLE DB LINK 정의 및 사용 방법

    Oracle DB link 란? 말그래도 'LINK', 서로 다른 DB를 연결한다는 뜻.그리고 연결을 위한 타DB 접속설정을 정의하는 오라클 객체 를 DB Link라고 함.그냥 쉽게 다른 DB에 접근하는 걸 DB Link라 이해하면 쉽다.1. 모든 DB LINK 목록 조회SELECT *   FROM DBA_DB_LINKS; 2. DB LINK 사용 방법SELECT A.*   FROM 테이블명@DB_LINK명 A; 3. DB LINK 두 개이상 조회 방법SELECT A.*, B.*   FROM 테이블1명@DB_LINK1명 A,              테이블2명@DB_LINK2명 B WHERE A.ID = B.ID     AND A.NO = B.NO

    [SQL] COUNT(*) 과 COUNT(1) 과 COUNT(칼럼명)과 COUNT(DISTINCT 칼럼명)의 차이

    SQL작성시 자주 쓰게 되는 것이집계함수 중 COUNT 이다.SELECT 구절에서지정된 조건의 ROW들의 수를가져오기 위해 사용하는 것으로COUNT(*) 과 COUNT(1) 과 COUNT(칼럼명)의 차이는 아래와 같다.COUNT(*) - NULL 값을 포함한 모든 ROW의 수COUNT (1) - NULL 값을 포함한 모든 ROW의 수  COUNT (칼럼명) - NULL 값의 행은 제외한 ROW의 수 번외로 칼럼에 DISTINCT를 사용한 결과값은 아래와 같다. COUNT (DISTINCT 칼럼명) - NULL값의 행, 중복을 제외한 ROW의 수

    [ORACLE] SQL 변수 종류 / 리터럴(literal) 변수와 바인드(bind) 변수

    SQL 변수 종류 1. 리터럴 변수 란? SQL문 중 WHERE 절에 column과 비교되는 값이 상수값으로 직접 선언된 변수 예) SELECT * FROM TABLE01 WHERE COL01 = "TEXT"; 2. 바인드 변수 란? SQL문 중 WHERE절에 column과 비교되는 값이 바인드 변수 형태로 사용하는 경우의 변수 바인드 변수의 자리에는 Parameter로 넘겨지는 값들이 대체됨. 예) SELECT * FROM TABLE01 WHERE COL01 :1; 3. MyBatis에서 처리 변수 처리 방식 #{value} - 리터럴 처리 SELECT * FROM TABLE01 WHERE COL01 = #{value} ${value} - 바인드 처리 SELECT * FROM TABLE01 WHERE ..

    (혼공MySQL)20.자동으로 실행되는 트리거(trigger)의 개념과 트리거를 활용하여 데이터 백업하는 방법

    트리거는 자동으로 수행하여 사용자가 추가 작업을 잊어버리는 실수를 방지해준다. ex) 탈퇴시 탈퇴 회원의 테이블에 갔다가 삭제해야하는데 까먹고 삭제 안했을 경우 무결성 훼손. 그래서 트리거를 걸어두면 된다. 트리거는 테이블에 부착한다고 한다. 매개변수 개념도 없고, 따로 실행도 어렵다. CREATE TRIGGER [트리거 이름]

    (혼공MySQL)19.스토어드 함수와 커서의 개념, 커서(cursor)의 단계별 실습 방법

    스토어드 함수를 사용자가 직접 만들어서 사용할 수 있다. DELIMITER $$ CREATE FUNCTION 스토어드_함수_이름(매개변수) RETURNS 반환 형식 BEGIN 이 부분에 SQL 프로그래밍 코드를 작성 RETURN 반환값; END $$ DELIMITER; SELECT 스토어드_함수_이름(); 스토어드 프로시저가 CALL로 호출하는 반면 스토어드 함수는 SELECT로 호출한다. 커서는 테이블에서 한 행씩 처리하기 위한 방식이다. 사용할 변수 준비 DECLARE memNumber INT; DECLARE cnt INT DEFAULT 0; DECLARE totNumber INT DEFAULT 0; DECLARE endOfRow BOOLEAN DEFAULT FALSE; 커서 선언 DECLARE me..

    (혼공MySQL)18.스토어드 프로시저(stored procedure)의 개념과 사용 방법(입출력 매개변수의 활용 방법)

    SQL + 프로그래밍 기능이 합쳐진 것이 스토어드 프로시저이다. DELIMITER $$ CREATE PROCEDURE 스토어드_프로시저_이름( IN 또는 OUT 매개변수) BEGIN 이 부분에 SQL 프로그래밍 코드를 작성 END $$ DELIMITER; CALL 스토어드_프로시저_이름(); 으로 불러내야한다. 매개변수를 사용할 때 어떤 값을 전달한다. IN 입력_매개변수_이름 데이터_형식 CALL_ 프로시저_이름(전달_값); OUT 출력_매개변수_이름 데이터_형식 CALL 프로시저_이름(@변수명); SELECT @변수명;

    (혼공MySQL)16.인덱스의 내부 작동 원리와 구조, 인덱스에서 데이터 검색하기

    인덱스의 내부 작동 원리 균형 트리 구조 균형 트리 구조에서 데이터가 저장되는 공간을 노드(node)라고 한다. 인덱스가 없는 상태에서 SELECT로 자료 검색 인덱스가 있는 상태에서 SELECT로 자료 검색 인덱스가 있나 없나 결과가 바뀌진 않는다. 빠르냐 느리나 속도 차이가 있다. SELECT가 빨라지지만 INSERT, UPDATE, DELETE가 느려질 수 있다. 클러스터형 인덱스의 구조 보조 인덱스형의 구조 데이터 검색시 어떤 것이 더 효율적인가? 클러스터 데이터 검색이 조금 더 빠르다.

    (혼공MySQL)15.인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스

    인덱스(Index)는 SELECT를 사용해서 테이블을 조회할 때 결과를 빠르게 추출하도록 도와주는 기능이다. 꼭 있어야하는건아니다만, 실무의 많은 데이터를 검색시 활용도가 높다. 인덱스는 비타민과 비슷해 적당히 먹으면 괜찮지만 과다 복용하면 안좋다. 찾아보는게 많으면 오히려 안좋아서 안만들기도한다. 인덱스(Index)의 장점 - SELECT문으로 검색하는 속도가 매우 빨라진다. - 그 결과 컴퓨터의 부담이 줄어들어 결국 전체 시스템 성능이 향상된다. 인덱스(Index)의 단점 - 인덱스도 공간을 차지해 데이터 베이스 안에 추가적인 공간 필요 (테이블 크기 약 10% 정도 공간 추가 필요) - 처음 인덱스를 만드는데 시간이 오래걸릴 수 있다. (찾아보기가 없는 책에 새로 찾아보기를 만드는 것과 마찬가지로 ..

    (혼공MySQL)14. 가상의 테이블: 뷰(생성, 수정, 삭제)

    view : 데이터베이스에 존재하는 일종의 가상 테이블. 바로가기 아이콘과 비슷한 개념. 테이블과 동일한 성격. 일반 사용자는 테이블과 뷰를 구분할 수 없다. 실제 데이터를 갖고 있지 않으며, 진짜 테이블에 Link된 개념이다. CREATE VIEW [뷰명] AS SELECT [컬렴명] FROM [테이블명] WHERE [조건절] 뷰를 사용하는 이유는 보안에 도움이 된다. 보여주고 싶은 부분만 보여줄 수 있다. 복잡한 SQL을 단순하게 접근할 수 있다. 복잡한 쿼리를 VIEW로 만들어서 쉽게 접근한다. 뷰가 테이블을 참조하고 있다고 테이블이 안지워지는 것은 아니고 테이블이 지워진 상태에서 뷰를 찾으면 못 불러온다. CHECK TABE [뷰이름] 뷰의 상태를 체크할수있다.

    (혼공MySQL)13. SQL 테이블 제약조건(기본키, 외래키, 고유키)

    제약 조건으로 테이블을 견고하게 할 수 있다. 데이터의 오류를 줄여 완전 무결한 코드를 만들 수 있다. 제약 조건은 데이터의 무결성을 지키기 위해 제한하는 조건이다. 종류들 PRIMARY KEY 제약조건 FOREIGN KEY 제약조건 UNIQUE 제약조건 CHECK 제약조건 DEFAULT 정의 NULL 값 허용 기본 키 제약조건 PRIMARY KEY 제약조건 1개 열에 기본키 제약 조건을 설정할 수 있다. 이 것으로 구분할 수 있다. 중복 X NULL허용 X 기본키로 하면 클러스터형 인덱스가 생성된다. 외래 키 제약 조건 UNIQUE 제약조건 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할을 하고 외래 키가 설정된 열은 꼭 다른 테이블의 기본 키와 연결이 된다. 고유 키..

    (혼공MySQL)11.SQL 프로그래밍(IF문, CASE문, WHILE문, 동적SQL)

    SQL 프로그래밍 : 스토어드 프로시저는 MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터 베이스 개체이다. SQL프로그래밍은 기본적으로 스토어드 프로시저 안에 만들어야한다. 스토어드 프로시저 구조 DELIMITER $$ --스토어드 프로시저의 코딩파트 시작 CREATE PROCEDURE 스토어드_프로시저_이름() BEGIN -- 이 부분에 SQL 프로그래밍 코딩 END $$ --스토어드 프로시저의 코딩파트 종료 DELIMITER; -- 종료 문자를 다시 세미클론(;)으로 변경 CALL 스토어드_프로시저_이름(); -- 스토어드 프로시저 실행 IF문 IF THEN SQL 문장들 END IF; CASE문 CASE WHEN 조건1 THEN SQL문장들1 WHEN 조건2 THEN SQL문장들2 WHE..

    (혼공MySQL)10. 두 테이블을 묶는 JOIN(INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN)

    Join : 두개의 테이블을 묶어서 하나의 결과를 만들어 내는 것. ex) 회원 테이블 + 구매 테이블 Join 내부 조인 Inner Join -일반적인 조인 회원 테이블의 ID PK 지정이 가능하나 구매 테이블의 ID는 PK 지정은 안된다. PK는 중복이 불가하기때문에 한번 사고 다시 못산다. FK로 가져온다. 1대 다 관계이기때문이다. SELECT FROM INNER JOIN ON [WHERE 검색 조건] ; INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식한다. -------------------- 외부 조인 Outer Join 내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만 외부 조인은 한 쪽에만 데이터가 있어도 결과가 나온다. SELECT FROM OUTER..