이 글은 무위자연님의 2008년 9월 29일에서 2008년 9월 30일까지의 미투데이 내용입니다.

by 무위자연 2008. 10. 1. 04:31

이 글은 무위자연님의 2008년 9월 28일에서 2008년 9월 29일까지의 미투데이 내용입니다.

by 무위자연 2008. 9. 30. 04:32

이 글은 무위자연님의 2008년 9월 8일에서 2008년 9월 26일까지의 미투데이 내용입니다.

by 무위자연 2008. 9. 27. 04:31

이 글은 무위자연님의 2008년 9월 7일의 미투데이 내용입니다.

by 무위자연 2008. 9. 8. 04:31

chpater 4 데이터 필터링

WHERE

연산자    설명

=            같음

<>         같지 않음

!=           같지않음

<            보다 작음

<=         보다 작거나 같은

!<           보다 작지 않음

>            보다 큼

>=          보다 크거나 같음

!>            보다 크지 않음

BETWEEN 지정된 두 값 사이에 있음

IS NULL     NULL 값임

- 연산자는 각 DBMS 설명서 참조할 것.

 

데이터형식이 문자열(string)인 값을 조건으로 사용하려면 작은따옴표를 사용해야 한다. 숫자 값일경우에는 따옴표가 필요하지 않다.

 

chapter 5

Where 평가순위 - AND가 OR보다 우선순위가 높고 원하는 순서가 있다면 괄호로 묶어주면 된다.

IN은 OR관계로 묶여서 나열하는 조건에 쓰임. ex. WHERE vent_id IN ('DLL01', 'BRS01')

NOT은 바로 뒤에 오는 조건을 부정하는 역할을 하며 혼자서 사용될수 없다. NOT연산자는 다른 연산자와 달리 필터링할 열의 뒤가 아닌 앞에서 사용된다.

 

chapter 6

와일드 카드 - 값의 일부가 일치하는 경우를 검색하는데 사용되는 특별한 문자 ex. %

결과를 검색하기엔 유용하나 성능상 느려지기때문에 신중하게 써야 한다

ex SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%' 이것의 의미는  Fish 로 시작하는 모든 값이 검색된다.

언더스코어(_) - 이  문자는 %와 마찬가지로 모든 문자를 의미하지만 여러문자가 아닌 단 하나의 문자를 의미한다.

괄호([])와일드카드 - 문자모음을 지정하는데 사용되며, 이 와일드카드가 있는 위치에 이 목록의 문자 중 하나와 일치하는 문자가 있으면 일치하는 행으로 보고 검색한다.

ex SELECT cust_contact FROM Customers WHERE cust_Contact LIKE '[JM]%' ORDER BY cust_contact

J또는 M으로만 시작하는 이름 찾기.

 

chapter 7

결합 - 하나의 긴 값을 만들기 위해서 여러개의 값을 결합하는 것. 이때 +와 || 를 사용하게 되는데 Access, SQL Server, Sybase는 +를, ORacle, PostgreSQL, Sybase는 || 기호를 지원한다.

ex. SELECT vend_name + ' ( ' + vend_country + ')' FROM Vendors ORDER BY vend_name;

이 SQL문의 출력 결과는

벤더이름    (국가)  이런식으로 나올 것이다.

단, MySQL은 +와 || 은 지원하지 않는다 대신에 CONCAT()함수를 지원한다. 위의 예를 바꾼다면

SELECT CONCAT(vend_name, '(', vend_contry, ')'

 

TRIM함수 - 문자열 오른쪽을 자르는 함수는 RTRIM(),왼쪽을 자르는 함수는 LTRIM(), 양쪽을 자르면 TRIM() 이다.

 

별칭을 사용하기 위해서 "AS"를 사용한다. 실제 테이블 열에 포함된 열에 잘못된 문자가 있어서 사용할수 없다거나 원래 이름이 난해하고 이해하기 여러워 새 이름을 붙이고자 할때 사용한다.

별칭은 한 단어나 완전한 문자열로 지정할수 있다. 문자열을 지정할 경우 반드시 따옴표로 묶어줘야 한다. 별칭을 파생된 열이라고도 부른다.

 

chapter 8

대부분의 SQL에서 다음을 지원한다

  • 텍스트 문자열을 제어하는데 사용되는 텍스트 함수, 예를 들어 값의 앞 뒤공백을 붙이고 잘라내거나, 대소문자를 변환하는 등의 작업을 수행한다
  • 숫자 데이터를 사용하여 수학연산을 하는 숫자 함수, 예를  들어 덜재값을 구하거나  대수 계산을 수행한다
  • 사용하는 DBMS에 관련된 정보를 반환하는 시스템 함수, 예를 들어 로그인 정보를 반환한다.

 

 

chapter 9

데이터를 가져오는 정도가 아니고 다음처럼 요약해야 할때가 있다.

  • 테이블의 전체 행 개수를 게산하거나 특정 조건이나 값에 해당하는 행의 개수만 계산하는 경우
  • 테이블에서 여러 행을 가져와 합계를 계산하는 경우
  • 테이블(전체 열이나 일부 열)에서 가장 높은 값, 가장 낮은 값, 그리고 평균값을 계산하는 경우

이런 경우 실제 데이타 값 자체가 아니라 이 데이터를 사용한 계산 값이 필요할 때는 테이블 데이터를 가져오는 일이 시간과 자원의 낭비가 된다. 정말 필요한 것은 요약 정보기이기때문이다.

집계함수 - 여러 열을 대상으로 계산을 수행하여 하나의 값을 반환하는 함수

ex AVG() COUNT() MAX() MIN() SUM()

고유값의 집계

다섯개의 집계함수는 다음과 같이 두가지 방법으로 사용할수 있다

  • ALL 인수를 지정하여 모든 행을 계산 ALL이 기본인수이므로 인수를 지정하지 않으면 이 방식으로 계산된다
  • 고유값만 계산하려면 DISTINCT인수를 지정한다.

    MS의 Asccess는 DISTINCT를 지원하지 않음.

 

chapter 10

HAVING 과 WHERE 절의 차이점 - WHERE는 데이터가 그룹화되기전에 필터링을 하며 HAVING은 데이터가 그룹화된 후에 필터링한다. WHERE절에 의해 일단 제외된 행은 그룹에 포함되지 않는 점을 이해해야 한다. 따라서 WHERE 절을 사용하여 일단 특정한 대상을 정하고 GROUP BY 절로 그 대상에 한해 그룹화된 다음에 HAVING>절로 각 그룹을 다시 필터링하는 것이다.

ORDER BY GROUP BY
생성된 결과를 정렬한다 행은 그룹화한다. 결과가 그룹의 순서대로 되는 것은 아니다
선택하지 않은 열을 포함하여 모든 열을 선택한다 선택한 열과 식 열만 사용하며, 선택한 모든 식 열이 사용되어야 한다
반드시 필요하지는 않다 집계 함수에 열(또는 식)을 사용한 경우 반드시 필요하다.

 

설명 필수여부
SELECT 반환할 열이나 식 반드시 필요
FROM 데이터를 가져올 테이블 테이블에서 데이터를 선택할때만 필요
WHERE 행 수준의 필터링

필요하지 않음

 

GROUP BY 그룹 지정 그룹별로 집계할때만 필요
HAVING 그룹 수준의 필터링 필요하지 않음
ORDER BY 결과를 정렬 필요하지 않음

 

chapter 11 하위 쿼리

쿼리 - 모든 SQL문을 말한다. SQL은 하위 쿼리라는 것을 만들수 있다. 하위쿼리는 다른 쿼리에 포함되어 있는 쿼리를 말한다. 하위쿼리는 항상 가장 안쪽에 있는 쿼리부터 바깥쪽 방향의 순서로 처리된다.

 

chapter 12 테이블 조인

곱집합 - 조인 조건을 지정하지 않고 두 테이블을 조인하면 반환되는 행의 수는 첫번째 테이블의 행 수에 두번째 테이블의 행 수를 곱한 개수가 된다.

모든 조인에는 WHERE 절이 있어야 하며 그렇지 않으면 여러분이 원하는 데이터보다 훨씬 많고 의미 없는 결과가 반환된다.

Cross 조인 - 곱집합을 결과로 반환하는 조인의 종류를 Cross 조인이라고 한다.

보통은 동등조인인데 두 테이블을 대상으로 동일성테스트를 하여 그 결과를 기준으로 조인하게 된다. 이러한 조인을 내부조인이라고 부른다.

ex. SELECT vend_name, prod_name, prod_price FROM Vendors INNER JOIN Products ON Vendors.vend_id = Products.vend_id;

조인할수 있는 테이블 수에 재한을 두지 않고 있지만 DBMS 설명서를 참고해야 한다.

 

chapter 13 

테이블 별칭사용하기

SQL구문을 짧게 만들거나  하나의 SELECT 문내에 같은 테이블을 여러 번 사용할 때 쓴다.

ex SELECT cust_name, cust_contact FROM Customers AS C, Orders AS O, OrderITems AS OI WHERE C.cust_id = O.cust_id AND

OI.order_num = O.order_num AND prod_id = 'RGAN01';

 

  • 자체조인
  • 자연조인 - 테이블을 조인하면 최소한 하나 이상의 열(조인되는 열)이 하나 이상의 테이블에서 나타나게 된다. 전단원에서 설명한 내부조인과 같은 표준 조인은 같은 열이 여러번 등장하더라도 모든 데이터를 반환하지만 자연조인은 이러한 중복항목을 제거하고 같은 열일 경우 한번만 반환한다.
  • 외부조인 - 대부분의 조인은 한 테이블의 행을 다른 테이블의 행과 연결하는 방식으로 이루어지지만 관련된 행이 없는 경우도 있다.

chapter 14

대부분의 경우 한 테이블에 대한 두 쿼리를 결합하는 것은 한 쿼리에 WHERE 절을 여럿 사용하는 것과 동일하다  

UNION은 여러 SELECT문 사이에 키워드를 넣어주기만 하면 된다.

UNION 규칙

  • UNION 은 두개 이상의 SELECT 문으로 구성되어야 하며 UNION 키워드로 구분되어야 한다. 따라서 만약 네 개의 SELECT문을 결합한다면 세개의 UNION 키워드가 필요하다
  • UNION 내의 각 쿼리는 같은 열, 식, 또는 집계 함수를 포함해야 한다. 단, 같은 순서로 나열할 필요는 없다.
  • 열의 데이터형식은 호환되어야 한다. 정확하게 동일한 형식일 필요는 없지만 DBMS는 간접적으로 변환할수 있어야 한다.

UNION은 자동으로 쿼ㅠ리 결과에서 중복된 행을 제거한다. 그런데 UNION ALL 으로 쓰면 중복결과 포함해서 나온다.

 

chapter 19

저장 프로시저는 하나 이상의 SQL문을 나중에 사용하기 편리하게 저장해둔 것으로 간단하게 배치 파일이라고 볼수도 있다.

처리가 필요할떄마다 이를 반복해야 하마 이러한 처리가 필요한 모든 응용프로그램에서 반복해야 하는

Access에서는 저장 프로시저를 지원하지 않고 MySQL도 5.0 이전 버전에서는 지원하지 않는다.

저장 프로시저를 사용하는 이유

  • 복잡한 작업을 사용하기 쉬운 하나의 단위로 묶어 단순화하기 위해
  • 여러 단계를 계속해서 반복적으로 만들 필요 없이 데이터의 일관성을 유지하기 위해 모든 개발자와 응용프로그램이 같은 저장 프로시저를 사용한다면 한번 만들어 놓은 코드를 계속 쓸수 있다. 오류방지에도 좋다. 수행해야 할 단계가 많아질수록 오류는 늘고 데이터 일관성 유지에도 도움이 된다
  • 변경 내용 관리를 단순화하기 위새, 테이블, 열 이름 또는 비지니스 로직 등이 변경 될 경우 저장 프로시저만 업데이트하면 되며 사용하는 입장에서는 이러한 변화에 대해 신경쓸 필요가 없다.
  • 저장 프로시저는 컴파일된 형식으로 저장되기때문에 DBMS가 이 명령을 실행하기 위새 수행하는 작업이 보다 적다. 즉 성능 개선이 있다
  • 단순한 요청에서 사용할수 없는 SQL언어 요소와 기능을 저장 프로시저에서는 사용할수 있으므로 보다 강력하고 유연한 코드 작성이 가능하다

 

chapter 20

트랜잭션 처리란 일련의 SQL 작업이 완전히 모두 수행되거나 모두 수행되지 않도록 하여 데이터 베이스 무결성을 유지하기 위한 방법이다. 여러 SQL작업을 하나로 묶고 모든 작업이 완벽하게 실행을 마칠수 있는 상황이 아니라면 아예 한 작업도 실행되지 않게끔 유지해준다. 모두 실행되거나 모두 실행되지 않거나, 둘 중에 하나인 것이다. 오류가 없으면 모든 작업이 정상적으로 처리될테지만 만약 오류가 발생하면 롤백(실행취소)이 작동하여 현재 트랜잭션의 모든 작업이 실행되기 전의 안전한 상태로 DB를 돌려놓는다.

롤백할수 있는 문

트랜잭션은  INSERT, UPDATE, DELETE문을 관리하는데 사용되며 SELECT 문을 롤백할수 없다. CREATE, DROP작업도 롤백할수 없으며 트랜잭션 블록 내에서 쓸수는 있지만 로백되지는 않는다.

문법은 DBMS마다 다르지만 기준은 다음과 같다

BEGIN TRANSACTION

 

//....

 

COMMIT TRANSACTION

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 9. 4. 17:32

이 글은 무위자연님의 2008년 5월 20일의 미투데이 내용입니다.

by 무위자연 2008. 6. 5. 04:38

이 글은 bmwe3님의 2008년 5월 16일의 미투데이 내용입니다.

by 무위자연 2008. 5. 17. 04:35

이 글은 bmwe3님의 2008년 4월 12일의 미투데이 내용입니다.

by 무위자연 2008. 4. 13. 04:36

이 글은 bmwe3님의 2008년 3월 25일의 미투데이 내용입니다.

by 무위자연 2008. 3. 26. 04:38
  • 오늘은 무지하게 특별해야...한...할수 있는...날입니다 ㅋ (생일) 2008-03-20 08:46:32
  • You needn't bother. I can manage by myself 그럴 필요 없어요. 제가 할꼐요 (영어한마디) 2008-03-20 09:13:52
  • No,I insist 아니요 제가 할께요 (영어한마디) 2008-03-20 09:14:14
  • 기본 아이콘이 바뀌었을까나 (기본아이콘) 2008-03-20 09:38:16

이 글은 bmwe3님의 2008년 3월 20일의 미투데이 내용입니다.

by 무위자연 2008. 3. 21. 04:35