본문 바로가기

개발/MySQL

(8)
[SQL] 6장 View와 서브쿼리 뷰 : select 구문중 자주 사용하는 구문을 텍스트 형태로 데이터베이스 안에 저장함. create view [$뷰이름 ] ($필드이름1,$필드이름2 ... ) AS Select [컬럼1,컬럼2,컬럼3 ... ] from [ 테이블 ] 뷰라는것은, 테이블의 모습을 한 select 구문이라고 말할수 있습니다. 서브쿼리는 뷰 대신 from구에 직접 select 구문을 지정하는 것을 말합니다. example ) select name from address where name in ( select name form address2); 이와 같은 쿼리는 in 조건 내부에서 서브쿼리를 사용한 것입니다. 상수를 직접 입력하지 않고 in 내부의 서브쿼리가 쿼리가 실행될때마다 다시 실행되기 때문에, 동적으로 상수 리스..
[SQL] 데이터 무결성이란? 데이터 무결성이란? 데이터의 정확성, 일관성, 유효성이 유지되는것을 말한다. 데이터 무결성을 유지하는것은 DBMS (데이터베이스 관리 시스템)의 중요한 기능이며, 주로 데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지한다. 데이터베이스에서 말하는 무결성에는 다음과 같은 4가지 종류가 있다. 1. 개체 무결성 2. 참조 무결성 3. 도메인 무결성 4. 무결성 규칙 1. 개체 무결성: 모든 테이블이 기본 키 (primary key)로 선택된 필드 (column)를 가져야 한다. 기본 키로 선택된 필드는 고유한 값을 가져야 하며, 빈 값은 허용하지 않는다. 2. 참조 무결성: 관계형 데이터베이스 모델에서 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것을 말..
[SQL] 정규화란? 데이터 베이스에서 정규화란? 테이블을 올바른 형태로 변경하고 분할 하는것을 정규화라고 합니다. 주관적인 기준이지만 올바른 형태라는것은, 그동안의 많은 데이터베이스 기술자들이 고안해 정리한 것을 말합니다. 이를 참고하여, 정규화 하는 과정을 통해 관계형 데이터베이스가 효율적으로 동작하도록 만들수 있습니다. 정규화는 단계적인 순서가 존재합니다. 그 첫번째 단계가 '제1 정규화'로, 관계형 데이터 베이스 테이블에는 하나의 셀에 하나의 값만 저장할 수 있다는 제약이 있습니다. 예를 들어, 주문 데이터를 생각해 봅시다. 주문번호 날짜 성명 주문상품 1 1 2021/04/06 오재호 맥북 2개 , 마우스 3개 2 2 2021/04/06 김국평 마우스 1개 3 3 2021/04/06 오재호 맥북 3개 , 마우스 5개..
[SQL] 인덱스란? 인덱스는 데이터베이스 쿼리의 성능을 생각하면 빼놓을수 없는 부분이다. 쿼리의 개발이나 튜닝을 설명하기 전에, mysql에서 사용가능한 인덱스의 종류 및 특성을 간단히 살펴보자. 인덱스라는 것을 설명하기 전에, 통상적으로 데이터베이스를 책에 비유하는 경우가 많은데, 책의 마지막 페이지에 있는 색인으로 설명하곤 한다. 즉, DBMS (Mysql, 오라클, MariaDB등)도 테이블의 모든 데이터를 검색해서 원하는 결과를 얻으려면 시간이 오래 걸린다. 그래서 컬럼들의 값과 해당 레코드가 저장된 주소를 key값: value값을 한 쌍으로 인덱스를 만들어 둔다. 프로그래밍 언어별로 각 자료구조의 이름이 조금씩 다르긴 하지만, SortedList와 ArrayList라는 자료구조는 익숙할 정도로 많이 들어봤을텐데, ..
[MYSQL] 테이블 생성시 기본키, 복합키, UNIQUE 테이블을 작성할때 기본키 제약을 거는 경우에는 테이블의 행에 유일성을 지정하기 위해서 사용한다. 하지만 기본키로 지정할 열이 뚜렷하게 보이지 않는경우도 많을수 있는데, 이런경우 자동증가 열을 사용해서 기본키를 만드는 경우가 있다. 그런 경우에, AUTO_INCREMENT 를 걸어주면, 해당 열에는 기본키 혹은 UNIQUE로 유일성을 지정해야 합니다. 자동증가열에 대한 옵션 이 없는경우 auto_increment 옵션과, key등록이 필요합니다. 복합키는 기본키를 구성하는 컬럼을 2개 이상 적용하는 경우인데, 데이터의 중복을 제거하기 위해서 사용합니다. Unique Key 는 Uniqueness 를 지닌 Index를 말하며, Unique Index 라 부르기도 한다. PK 와 마찬가지로 중복성이 허용되지 ..
[Mysql] 서브쿼리 사용법과 한계 우선 서브쿼리란 쿼리안에 또 쿼리를 담는 방법을 말한다. R1 이라는 원래 테이블로 존재하는 부분과 순번(seq)라던지, max , min 등 쿼리 내부에서 생성되는 부분을 결합하는 방법을 이용하는데 이러한 방식은 쿼리를 통해 많은 구분을 짓고 , 데이터를 간편하게 가공할수 있지만, 두가지 단점이 있습니다. 1. 코드가 복잡해서 읽기 어렵다 2. 성능에 문제가 생긴다. >서브쿼리는 대부분 일시적인 영역(메모리 또는 디스크)에 확보되므로 오버헤드가 생긴다. >서브쿼리는 인덱스 또는 제약정보를 가지지 않기 때문에 최적화 되지 못한다. >두개의 쿼리에 결합을 필요로 하기때문에 비용이 높고 실행 계획이 변동될 리스크가 발생한다. >기본 테이블에 대한 스캔이 두번 필요하다. 다음과 같이 성능적인 문제가 4가지가 ..
[MYSQL] 5분간격의 데이터를 id와 timetable로 구분짓기 데이터베이스 커뮤니티에 가장 핫한 문제인 연속되는 날짜를 하나의 그룹으로 표현해보자. 라는 문제가 있다. 예를들면 철수가 수학 시험공부를 하는데 1일~ 4일까지 1단원을 공부했다. 7일~12일까지 2단원을 공부했다. 13일~17일까지 3단원을 공부했다. 이를 sql문으로 나타내라. CREATE TABLE T AS SELECT 1 no, '20090101' dt FROM dual UNION ALL SELECT 1, '20090102' FROM dual UNION ALL SELECT 1, '20090103' FROM dual UNION ALL SELECT 1, '20090104' FROM dual UNION ALL SELECT 2, '20090107' FROM dual UNION ALL SELECT 2, '..
[MySQL] 6강. Select / Insert / Delete 오늘 포스팅할 내용은 , 데이터베이스에서 일정 리소스양을 넘은 데이터들을 수집하는 sql문에 대해서 "SQL첫걸음" 이라는 책을 참고해서 쿼리를 수정해 봤습니다. INSERT insert into member (id, age, ex1, ex2, ex3, ex4, ex5, ex6, meber_desc, name) values (default, 30, 'A','B','C','D','E','F',20,'Koo') SELECT where 구 ( 리소스 중 사용율 30% 이상을 넘는 데이터만 수집) and / or 연산 is null / is not null > , >=, = , in 연산 Group by ( 그룹화) 그룹을 이용한 다양한 집계함수 사용 가능 함수 이름 설명 COUNT 레코드 수를 계산 SUM 숫..