전체 글 (48) 썸네일형 리스트형 SQL 첫걸음 - 정규화 - 테이블을 올바른 형태로 변경하고 분할하는 것, 규정된 올바른 형태로 개선해나가는 것- 정규화 과정을 통해 관계형 데이터베이스가 효율적으로 동작하도록 만들 수 있음, 효율적인 데이터베이스 설계 가능 1. 정규화: 대충 만들어진 데이터를 정규화 해 데이터베이스의 테이블로 만들 수 있음 2. 제1 정규형- 관계형 데이터베이스의 테이블에는 하나의 셀에 하나의 값만 저장할 수 있다는 제약이 있음- 제1 정규화의 제 1단계 : 하나의 셀에 하나의 값만 저장할 수 있고, 반복되는 부분을 세로(행) 방향으로 늘려나가는 것* 반복되는 데이터를 가로(열 방향)가 아닌 세로(행 방향)로 늘리는 것이 제1정규화의 제1단계! - 제1 정규와에서는 중복을 제거하는 테이블의 분할도 이루어짐- ex) 주문 데이터를 주문 테이블과.. SQL 첫걸음 - 데이터베이스 설계 1. 데이터베이스 설계 - 데이터베이스 설계(스키마 설계) : 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것을 말함- 데이터베이스 설계의 주된 내용 : 테이블의 이름이나 열, 자료형을 결정하는 것 논리명과 물리명- 테이블 정의서 사례, 일반적으로 아래와 같은 양식 ㅅ용함열명자료형NULL기본값비교상품코드CHAR(4)No 상품명VARCHAR(30)Yes * 물리명- CREATE TABLE에 지정하는 이름- 데이터베이스 시스템 규칙에 따라 길이에 제한이 있거나 공백문자를 사용할 수없는 등의 제약 - 전통적으로 알파벳을 사용해 이름을 지정- 잘못 정하면 변경하기 힘듬- ex) item_master * 논리명- 테이블의 설계상 이름 - 실제로 부를 때 사용하는 이름- .. SQL 첫걸음 - 관계형 모델 관계형 데이터베이스 : 관계형 모델을 기반으로 작성된 데이터베이스 1. 관계형 모델- 관계형 모델의 기본적인 요소는 릴레이션(Relation)- 관계형 모델의 릴레이션은 SQL에서 말하는 테이블* 릴레이션은 테이블을 말함! - 관계형 모델의 릴레이션에는 몇 가지 속성(Attribute)이 있음- 속성 : 속성이름과 형 이름으로 구성 / SQL에서 열에 해당- SQL에서 행은 관계형 모델에서 튜플(Tuple)이라 함- 관계형 모델은 데이터 구조에 관해 정의함- 릴레이션은 튜플의 집합- 관계대수 : 릴레이션에 대한 연산이 집합의 대한 연산에 대응된다는 이론- 관계대수 기본규칙-- 하나 이상의 관계를 바탕으로 연산-- 연산한 결과, 반환되는 것 또한 관계-- 연산을 중첩 구졸 실행해도 상관 X 2. 관계형 모.. SQL 첫걸음 - 테이블 결합(JOIN) 1. 곱집합과 교차결합곱집합 : 집합의 연산 방법 중 하나, 카티전곱(Cartesian product)라고도 불림 교차결합(Cross Join)SELECT * FROM 테이블명1, 테이블명2SELECT * FROM sample72_x;SELECT * FROM sample72_y; SELECT * FROM sample72_x, sample72_y;FROM구에 테이블 두 개를 지정해 곱집합 구하기- FROM구에 복수의 테이블을 지정하면 교차결합을 함. 교차결합은 두 개의 테이블을 곱집합으로 계산 UNION의 연결과 결합 연결의 차이- UNION으로 합집합을 구했을 경우에는 세로 방향으로 더해짐- FROM 구로 테이블을 결합할 경우에는 가로 방향으로 더해짐* 결합은 열(가로)방향으로 확대됨! 2. 내부 결합:.. SQL 첫걸음 - 집합 연산 1. UNION으로 합집합 구하기집합 A = {1, 2, 3,}집합 B = {2, 10, 11}- 집합 A와 B의 합집합 = {1, 2, 3, 10, 11}- 두 명령의 실행 결과에 DISTINCT를 걸어 중복을 제거한 것과 동일 UNION: 집합 A와 B의 합집합을 구할 때 A ∪ B로 표기- SQL에서는 ∪기호 대신 UNION 키워드 사용- A ∪ B 는 'A UNION B'라고 표현 SELECT * FROM sample71_a;SELECT * FROM sample71_b;UNION으로 합집합 구하기SELECT * FROM sample71_aUNIONSELECT * FROM sample71_b;두 개의 SELECT 명령을 UNION해서 합집합 구하기- 한번의 쿼리 실행으로 두 개의 SELECT 명령이.. SQL 첫걸음 - 뷰 작성과 삭제 - 뷰 : 테이블과 같은 부률의 데이터베이스 객체 중 하나- FROM 구에 기술된 서브쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰라고 함 1. 뷰- 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것- SELECT 명령 실행 시 테이블에 저장된 데이터를 결과값으로 반환, 따라서 뷰를 참조하면 정의된 SELECT 명령의 실행결과를 테이블처럼 사용 가능* 뷰는 SELECT 명령을 기록하는 데이터베이스 객체! - FROM 구에 서브쿼리 사용할 수 있음 SELECT * FROM (SELECT * FROM sample54) sq; - 위 서브쿼리 부분을 '뷰 객체'로 만듬SELECT * FROM sample_view_67;- samp.. SQL 첫걸음 - 인덱스 구조 & 인덱스 작성과 삭제 - 인덱스(색인) : 데이터베이스 객체 증 하나- 테이블에는 인덱스를 작성할 수 있음 1. 인덱스: 테이블에 붙여진 색인: 인덱스의 역할은 검색속도의 향상 : 여기서 '검색'은 SELECT 명령에 WHERE 구로 조건을 지정하고 그에 일치하는 행을 찾는 일련의 과정: 테이블에 인덱스가 지정되어 있으면 효율적으로 검색할 수 있음 - WHERE로 조건이 지정된 SELECT 명령의 처리속도가 향상: 차례대로 나열되어 있음: 인덱스는 테이블과는 별개로 독립된 데이터베이스 객체로 작성 - 테이블에 의존하는 객체: 대부분의 데이터베이스에서 테이블을 삭제하면 인덱스도 같이 삭제됨 2. 검색에 사용하는 알고리즘: 데이터베이스의 인덱스에 쓰이는 대표적인 검색 알고리즘은 '이진 트리(binary tree)', 그다음 '해.. SQL 첫걸음 - 제약 - 제약조건은 데이터의 무결성을 지키기 위해 제한하는 조건- 제약은 테이블에 설정하는 것.AUTO_INCREMENT새 행 생성(행 데이터가 추가될 때 마다) 자동으로 1씩 증가 + PRIMARY KEYPRIMARY KEY오직 하나의 기본키만 가질 수있음(중복 입력 불가), NULL(빈 값) 입력 불가(무조건 값이 있어야함)FOREIGN KEY필수 X, 참조UNIQUE중복 입력 불가NOT NULLNULL(빈 값) 입력 불가(무조건 값이 있어야함), NULL값이 저장되지 않도록 제한UNSIGNED(숫자일시) 양수만 가능DEFAULT 정의값 입력이 없을 시 기본값 1. 테이블 작성시 제약 정의CREATE TABLE sample631( a INTEGER NOT NULL, b INTEGER NOT NULL .. SQL 첫걸음 - 데이터베이스 객체 & 테이블 작성, 삭제, 변경 1. 데이터베이스 객체 * 테이블은 객체* SELECT, INSERT 등 클라이언트에서 객체를 조작하는 SQL명령어- 객체의 이름 제약 사항(명명규칙) 기존 이름이나 예약어와 중복하지 않는다.숫자로 시작할 수 없다.언더스코어(_) 이외의 기호는 사용할 수 없다.한글을 사용할 때는 더블쿼트(MySQL에서는 백쿼트)로 둘러싼다.시스템이 허용하는 길이를 초과하지 않는다.- 이름은 객체의 종류와는 관계없음- ex) foo라는 이름의 테이블을 한번 만들면 같은 종류의 테이블, 뷰와 같은 다른 종류의 객체 역시 똑같은 이름으로 작성할 수 없음* 의미없는 이름을 붙이지 말자! 2. 스키마- 스키마 > 데이터베이스 : 데이터베이스 객체는 스키마라는 그릇 안에 만들어짐- 객체의 이름이 같아도 스키마가 서로 다르면 상관없.. SQL 첫걸음 - 상관 서브쿼리 - 서브쿼리를 사용해 DELETE 명령과 SELECT 명령을 결합할 수 있음- 스칼라 서브쿼리가 사용하기 쉬운 서브쿼리임- EXIST 술어를 사용하면 서브쿼리가 반환하는 결과값이 있는지를 조사할 수 있음- EXIST는 단지 반환된 행이 있는지를 확인해보고 값이 있으면 참, 없으면 거짓을 반환함 1. EXISTSSELECT * FROM sample551;a열은 문자열형이지만 값은 모두 NULLSELECT * FROM sample552;UPDATE sample551 SET a = '있음' WHERE EXISTS (SELECT * FROM sample552 WHERE no2 = no); SELECT * FROM sample551;EXISTS를 사용해 '있음'으로 갱신하기- 서브쿼리의 WHERE 구는 .. 이전 1 2 3 4 5 다음