본문 바로가기

언어/ETC.

[패스트캠퍼스] 컴퓨터활용능력 1급 정리 - 10

728x90
반응형
반응형

 

10. 데이터베이스 일반 - 인덱스,참조무결성, SQL,
데이터베이스 특수 연산, 추가쿼리, 업데이트 쿼리

 

 

인덱스

데이터의 검색이나 그룹화 등의 작업 속도를 향상시키기 위해 데이터를 일정한 기준에 맞추어 정렬하는 기능
즉 검색을 하기 위해 정렬하는 기능이다.

• 일반적으로 검색을 자주 하는 필드에 대해 인덱스를 설정하는 것이 바람직함
검색하지 않는 필드를 지정할 필요가 없지.
쇼핑몰의 경우, ID나 구매금액

• 인덱스 속성은 테이블 디자인 보기의 필드 속성 구역에서만 설정할 수 있음

• 테이블 디자인 보기에서 수시로 인덱스를 추가하거나 삭제할 수 있음(성능이 떨어질 수 있음).
액세스에는 테이블을 데이터시트보기나 디자인보기 두가지가 있는데
데이터시트에서는 안된다는 것.

• 테이블에서 단일 필드를 사용해서 레코드를 찾고 정렬하려면 Indexed 속성을 사용

***• 메모, 하이퍼링크, OLE 개체 데이터 형식 필드는 인덱스 할 수 없음
일련번호나, 날짜/시간 데이터 형식 필드에는 인덱스를지정할 수있다.

• 인덱스를 설정하면 자료의 조회와 정렬 속도가 빨라지지만 갱신 속도는 더 느려짐(인덱스 필드의 쿼리 속도도 빨라짐).

 

중복 불가(Unique)색인을 설정하면 중복된 자료의 입력을 방지할 수있다.
고유하거나 고유하지 않은 값도 모두 지정
한 테이블에 여러개 인덱스 설정가능
그러나 속도가 느려질 수있다.
기본키로 설정하면 자동으로 인덱스가 설정
테이블을 저장할 때 만드러지고 레코드를 변경할 때 추가할 때 자동으로 업데이트

인덱스를 설정하면 레코드의 조회속도는 빨라지지만 레코드의 갱신속도는 빨라지지 않음

 


참조 무결성

참조하는데 결점이 없다. 이 내용은 믿을만하다는 것

참조하고 참조되는 테이블 간의 참조 관계에 아무런 문제가 없는 상태.
-회사 인사관리 시스템에 테이블이 여러개로 나뉘어진걸 엮어서 RDBMS로 만드는데
중요한 데이터와 중요하지 않은 데이터가 있음
한 사람의 데이터가 날라갔을 때 연결되어있는 데이터가 날라가면 안됨. 그런 경우.

관련된 테이블 레코드 간의 관계를 유효하게 하고, 사용자가 실수로 관련 데이터를 삭제하거나 변경하지 않도록 하기 위해서 액세스가 사용하는 규칙

• 참조하고 참조되는 테이블 간의 참조 관계에 아무런 문제가 없는 상태를 의미

• 외래 키 값은 널 값이거나 참조 테이블에 있는 기본 키 값과 동일해야  함

• 기본 테이블의 기본 키 필드가 다른 테이블의 외래 키 필드와 데이터 형식이 같을 때 참조 무결성을 강화할 수 있음

• 기본 테이블의 기본 키 필드가 바뀌면 관련 테이블에서 해당 필드의 값을 자동으로 수정할 수 있음

• 기본 테이블에서 레코드를 삭제하면 해당 테이블에서 관련된 레코드가 자동으로 삭제되도록 할 수 있음

 

 


SQL

SELECT문
SELECT (필드),(필드),... FROM (테이블)
SELECT (테이블1).(필드), (테이블2),(필드)... FROM (테이블1), (테이블2)


SELECT 이름 FROM사원; '사원'테이블에서 '이름'필드를 검색한다.

 SELECT 이름,부서 FROM사원; '사원'테이블에서 '이름'필드와 '부서'필드를 검색한다.

 SELECT 사원.부서, 간부.연봉 FROM사원,간부;
'사원' 테이블에서는 '부서'필드를검색하고, 
'간부'테이블에서는 '연봉' 을 검색한다.
(각각의 불러올 데이터가 테이블이 다를 때)

SELECT*FROM 사원;
'사원'테이블에서 모든 필드 검색

SELECT 사원.*, 간부.* FROM 사원, 간부;
'사원'과 '간부'테이블에서 모든 필드 검색


* 모든필드 

 


WHERE절
추가적인 조건을 적용할 때

SELECT 이름 FROM 사원 WHERE 부서='기술부';
'사원'테이블에 '이름'필드에서 부서가 '기술부'인 사원의 이름을 검색

SELECT 이름 FROM 간부 WHERE 호봉 >=7;
'간부'테이블에서 호봉이 7이상인 간부의 이름검색

 

 

ORDER BY절

SELECT * FROM 사원 ORDER BY 이름 ASC; 
→ ‘사원’ 테이블을 ‘이름’을 기준으로 오름차순 검색
• SELECT * FROM 간부 ORDER BY 연봉 DESC; 
→ ‘간부’ 테이블을 ‘연봉’을 기준으로 내림차순 검색
• SELECT * FROM 간부 WHERE 호봉 >= 5 ORDER BY 연봉 ASC; 
→ ‘간부’ 테이블에서 호봉이 5 이상인 간부들의 ‘연봉’을 기준으로 오름차순 검색
ASCENDING 오름차순

• SELECT * FROM 사원 WHERE 나이 >= 28 ORDER BY 나이 DESC; 
→ ‘사원’ 테이블에서 나이가 28 이상인 사원들의 ‘나이’를 기준으로 내림차순 검색
DESCENDING 내림차순

 

 

IN 연산자

• SELECT 학과, 학번, 학점 FROM 성적 WHERE 학점 IN (‘B’, ‘C’);  
‘성적’ 테이블에서 학점이 B이거나 C인 학생들의 학과, 학번, 학점 검색
• SELECT 이름, 부서, 연봉, 호봉 FROM 간부 WHERE 호봉 IN (8, 9, 10); 
‘간부’ 테이블에서 호봉이 8이거나 9이거나 10인 간부들의 이름, 부서, 연봉, 호봉 검색

BETWEEN 연산자 (~이상~이하)

• SELECT 이름, 부서, 호봉 FROM 간부 WHERE 호봉 BETWEEN 4 AND 9; 
 ‘간부’ 테이블에서 호봉이 4에서 9 사이인 간부의 이름, 부서, 호봉 검색
• SELECT * FROM 사원 WHERE 나이 BETWEEN 27 AND 30; → ‘사원’ 테이블에서 나이가 27 AND 30 사이인 사원의 모든 데이터 검색


LIKE 연산자 (조건이 포함된 레코드를 찾을 때)
• SELECT * FROM 사원 WHERE 이름 LIKE ‘박%’;  ‘사원’ 테이블에서 이름이 ‘박’으로 시작하는 사원의 모든 레코드 검색
• SELECT 이름, 부서 FROM 사원 WHERE 나이 LIKE ‘2_’; 
 ‘사원’ 테이블에서 나이가 ‘2’로 시작하는 사원의 이름, 부서 검색

NOT 연산자 (뒤에 나오는 조건이 '아닌')
• SELECT 학과, 학번, 학점 FROM 성적 WHERE 학점 NOT IN (‘B’, ‘C’);  
‘성적’ 테이블에서 학점이 B나 C가 아닌 학생들의 학과, 학번, 학점 검색
• SELECT 이름, 부서, 호봉 FROM 간부 WHERE 호봉 NOT BETWEEN 4 AND 9; 
‘간부’ 테이블에서 호봉이 4에서 9 사이가 아닌 간부의 이름, 부서, 호봉 검색

DISTINCT 키워드 (중복제거문)
• SELECT DISTINCT 이름 FROM 사원; 
 ‘사원’ 테이블에서 중복을 제거한 후 이름 검색
• SELECT DISTINCT 이름, 연봉 FROM 간부; 
 ‘간부’ 테이블에서 중복을 제거한 후 이름과 연봉 검색

**DISTINCT를 SELECT 다음에 제일 먼저 쓴다는거 잊지말기!

 


 

추가 쿼리

추가쿼리는 말 그대로 추가.
테이블에 레코드를 여러개 추가할 때 사용= INSERT...SELECT 문을 이용
지정하는 필드의 수와 데이터 형은 같아야한다.
여러 테이블에 동시에 데이터를 추가할 수없고, 하나의 테이블에만 추가.

입력하는 데이터의 양이 적은 경우에 주로 사용
날짜나 문자 데이터는 인용 부호를 이용해서 입력

하나의 INSERT문을 이용해 여러개의 레코드와 필드를 삽입

INSERT INTO 테이블(필드 이름1, 필드이름2,...)
VALUE(필드값1, 필드값2,...)

INSERT INTO 간부(이름, 부서, 호봉, 연봉, 직위) VALUE('조분희', '기획부', 7, 25000000, '실장');
간부 테이블에 각각의 필드에 다음과같이 추가한다.이름에 조분희, 부서는 기획부, 호봉을 7, 연봉은 25000000, 직위가 실장인 사람을 간부 테이블에 추가한다.

 

 

업데이트 쿼리

UPDATE 테이블 SET 필드이름 = 식1, 필드이름2=식,...WHERE 조건;

UPDATE 간부 SET 연봉=연봉*1.05 WHERE 호봉=8;
호봉이 8인 간부의 연봉을 5%인상하도록 수정

예)
회원중 가입일이 2010년 10월 16일 이전인 준회원을 정회원으로 변경하고자 할 때 (업데이트) SQL문은?

UPDATE 회원 SET 등급 = '정회원' WHERE 가입일<=#2010-10-16# AND 등급='준회원'
**날짜에는 #이 들어가야함

728x90
반응형