트랜잭션 Transaction : 트랜잭션은 데이터베이스 내에서 데이터를 처리하는 작업 수행의 논리적인 작업 단위를 (하나의 그룹을) 의미한다. 예를 들어 온라인 쇼핑을 한다고 가정해보자. 주문 완료를 위해 쇼핑몰 업체에 계좌이체를 하려고 한다. 1. 내 계좌에서 2만원을 인출 및 이체한다. 2. 내 계좌에 잔액이 차감된다. 3. 업체에 내 이름으로 2만원이 입금된다. 4. 업체 계좌에 잔액이 더해진다. 이체에 필요한 위의 과정에서 만약, 카드사 및 은행 시스템의 문제로 내 계좌에서는 2만원이 인출됐지만 업체에는 입금되지 않았다면? 내 계좌의 인출 작업도 곧바로 취소돼야 한다. 처리하는 과정에서 문제가 발생하게 되면 진행 중이던 작업(전체)을 취소하고 처음부터 다시 시작해야 하는데(즉, 이체가 완료되거나..
- DataBase : 데이터가 실질적으로 적재되는 테이블들을 분류하는 상위 개념 - Table : 데이터가 실질적으로 저장되는 저장소 - Schema : 테이블에 적재될 데이터의 구조와 형식을 정의 하는 것 MySQL 사용 시 (Oracle SQL과 다름) 주의 - DB를 사용한다고 지정하지 않을 경우 테이블 사용 시, 테이블명과 함께 DB명을 반드시 기재해야 한다. - ORACLE SQL과 달리 별도 COMMIT없이 자동 업데이트하도록 설정 가능하다. - 문자 데이터타입은 기본적으로 UTF-8이므로 CHAR, VARCHAR에 N형식 없다. - 테이블의 데이터를 쿼리할 때 대/소문자를 구분하기 때문에 오류나지 않도록 작성한다. (Workbench 환경 설정에서 표기관련 설정 가능) - 다중 행에 영향을..
▶ DML* (Data Manipulation Language) ; 데이터 조작어 - SELECT : 데이터를 조회 (SELECT*FROM) SELECT * FROM MEMBER; - INSERT : 데이터를 추가 (INSERT INTO ~ VALUES( , );) INSERT INTO MEMBER VALUES(50, 'YH', '010-1234-1212'); -- ID가 50인 회원의 레코드(로우)를 추가 INSERT INTO TABLE VALUES('IDXX', 'HYONI', '010~'); - UPDATE : 데이터를 변경 (UPDATE ~ SET 00 = ' ' WHERE ID = ' ';) UPDATE MEMBER SET NAME = 'HYOEUN' WHERE ID = 'IDXX'; - DEL..
DBMS > 데이터 집중화 > (데이터 분리/관리) > 참초 > 조인 JOIN은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과를 만들어 낸다. 2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다. (위키피디아 참조) 분리되있는 데이터를 조인함으로서 원하는 데이터를 조회할 수 있는데 조회할 때, 관계된 데이터는 조인하고 그렇지 않은 객체는 아우터 조인을 작성하여 조회한다. JOIN의 종류 INNER JOIN OUTER JOIN CROSS JOIN SELF JOIN LEFT / RIGHT/ FULL ; 왼쪽/오른쪽을 기준으로 조인할지 방향을 정하거나, 전부 아우터 조인 할 것인지 정할 때..
우선 ROWNUM 1~10까지 출력 SELECT * FROM( SELECT ROWNUM, N.* FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) N ) WHERE ROWNUM BETWEEN 1 AND 10; 다음 페이지 분리를 위해서 서브쿼리 -- ROWNUM 11~20 페이징 -- MEMBER에 NAME 칼럼을 (MN으로 별칭써서) 추가 = JOIN SELECT * FROM( SELECT ROWNUM NUM, N.* FROM ( SELECT NOTICE.*, MEMBER.NAME MN FROM NOTICE LEFT JOIN MEMBER ON MEMBER.ID = NOTICE.WRITER_ID ORDER BY NOTICE.REGDATE DESC ) N ) WHER..
UNION : 두 집합(쿼리문)의 결과를 하나로 합하여 출력 (중복 값 제거하고 정렬) 통합 검색 시 사용 UNION ALL : 두 집합의 결과를 하나로 합하여 출력 (중복 값 제거 안하고 모두 출력, 정렬X) INTERSECT : 두 집합의 교집합 결과를 정렬하여 출력 (중복 값 제거 ; 두 집합 or 데이터 내 중복 값) MINUS : 두 집합의 차집합 결과를 정렬하여 출력 (큰 집합에서 작은 집합을 빼야하므로 순서 중요) UNION / UNION ALL 사용 시 주의! 두 집합의 SELECT 절에 오는 컬럼의 데이터 타입이 같아야 하고, 컬럼의 개수가 같아야 함 사용 : 우선 테이블별로 조회해서 개수를 확인 후, 테이블을 합한 결과를 확인 해보자 SELECT ID, AGE FROM MEMBER; -..
DISTINCT 절과 GROUP BY 절 모두 테이블 SELECT 시, 조회 결과를 그룹으로 묶어서 그 결과를 가져오는 역활을 한다. 두 구절은 모두 그룹을 지어준다는 공통점이 있지만, 정렬의 유무에서 차이가 있다. DISTINCT는 결과물을 정렬하지 않고, GROUP BY는 결과물을 정렬해서 표현한다! 따라서, 조회 결과를 그룹으로 묶어서 결과를 가져올 때 정렬이 필요한 경우는 GROUP BY를, 정렬이 필요하지 않는 경우에는 DISTINCT절을 사용하면 된다. 문법 : --GROUP BY SELECT 칼럼 FROM 테이블 GROUP BY 칼럼명 --DISTINCT SELECT DISTINCT 칼럼명 FROM 테이블명 예제 : 테이블(MY_TABLE)에 나이(AGE)로 그룹을 지어 조회 --GROUP ..
ROWNUM : 쿼리 내에서 사용 가능한 가상 컬럼. (확인하고자 하는 데이터에 가상으로 번호를 매김) 예문 : 회원 목목에서 상위 5명만 조회 (상위 5개의 데이터) SELECT ROWNUM, NOTICE.* FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5; ORDER BY : 특정 값에 대한 순위를 매기고 싶을 때 사용 - ASC 를 함께 쓰면 오름차순 - DESC 를 함께 쓰면 내림차순 예문 : SELECT ROWNUM, N.* FROM ( SELECT * FROM NOTICE ORDER BY REGDATE DESC ) N; ORDER BY 절을 사용해서 특정 값에 대한 순위를 매겼을 때, 동일한 등수가 나온 경우에는 ROW_NUMBER / RANK / DENSE_RANK ..
서브쿼리 Sub Query 메인 쿼리문 안에 서브 쿼리문을 씀 (메인쿼리가 서브쿼리를 포함하는 종속적인 관계) 규칙 - 서브쿼리가 제일 먼저 실행 - 서브쿼리는 소괄호로 감싸서 사용 - 서브쿼리 안에 ORDER BY절 사용 불가 - 연산자 오른쪽에 사용해야 함 예문 : SELECT * FROM (SELECT * FROM NOTICE); 예문 (구절의 순서를 바꿔야 하는 경우) : SELECT * FROM( SELECT N.* FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) N ) WHERE ROWNUM BETWEEN 1 AND 10; 쿼리문 작성/실행 순서 - 작성 순서 : SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER ..
관계 연산자 : NOT, AND, OR, BETWEEN, IN OR은 그 중에 하나만 만족해도 조회 IN은 여러개의 '=' / 지정 값 조회 AND는 모두 만족해야 조회 / 연속된 숫자 표현 SELECT * FROM NOTICE WHERE ID = 1700; SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 5; -- 조회수가 0~5인 데이터 조회 FROM NOTICE WHERE HIT IN (0, 5, 7); -- 조회수가 0 또는 5 또는 7인 것 조회 SELECT * FROM NOTICE WHERE HIT NOT IN (0, 5, 7); -- 지정한 값 제외하고 조회 패턴 연산자 : LIKE, %, _ : 검색을 위한 연산자 LIKE 연산자 : 대입연산자(=) 없이 기..