'select문'에 해당되는 글 2건

  1. 2018.03.19 3. 데이터베이스 - PK, FK 그리고 기초 SQL
  2. 2018.03.07 2. 데이터베이스 - SQL
2018. 3. 19. 10:39

안녕하세요  "타이니스타" 입니다


이 카테고리에서 다룰 내용은 프로그램 관점의 데이터베이스, sql 등입니다.

즉흥적으로 써내려가는만큼 부족한 부분이 많겠지만 감안하고 봐주시기 바랍니다.

 

 

PK. 테이블의 레코드를 구분할 수 있는 최소의 컬럼.  FK. PK에 참조되며 같은 데이터를 지닐 수 있는 컬럼. PK 부.  FK 자 .    부모와 자식관계로 볼 수 있습니다.

 PK는 주로 학번, 주민번호, 사원번호 등  유일한 값을 가지는 컬럼이 주로 PK의 대상이 됩니다.

 예 )

학생table 

학번(pk)    이름       주소             학과번호(fk)

  1111       홍길동   옛날옛날             a11

  1112       강감찬   먼옛날                a11

  1113       대장군   전장터                a12

  1114       김철수   뒷동네                a12

 

학과table

학과번호(pk)   학과명

   a11             수학과

   a12             영문과

 

위와 같이 두개의 테이블이 있습니다.  학생 테이블에서 학생 개개인을 유일하게 구분할 수 있는 컬럼으로 학번이 적절하기에 PK가 되며  학과번호 컬럼은 중복이 되기에 구분이 가능한 키가 아닙니다만

학과 테이블의  학과번호와 연결될 수 있기에 FK 가 됩니다. 이러한 관계를 통해 두 테이블은 조합하여 데이터를 추출할 수 있게 됩니다.  예를들어 학생 테이블의 모든 학생의  학번, 이름, 학과명을 출력하고자  하면

 

select 학번, 이름, 학과table.학과명

   from 학생table, 학과table

 where 학생table.학과번호 = 학과table.학과번호 ;

 

라고 조인을 걸어서 해결할 수 있습니다. 이렇게 pk 와 fk를 나누게 된 이유는 데이터의 중복을 최소화 하기 위한 정규화에 의해 테이블이 나뉘어졌기 때문입니다. 예를들어 학생, 학과 테이블로 나눠지지 않고 처음부터 합쳐져 있었다면

 

합쳐진table

학번    이름          주소     학과번호   학과명

1111    홍길동    옛날옛날     a11       수학과

1112    강감찬     먼옛날       a11       수학과

1113    대장군     전장터       a12       영문과

1114    김철수     뒷동네       a12       영문과

 

으로 되있겠으나 학과명이 중복됩니다. 현재 예제는 컬럼의 양이 적어서 크게 느껴지지 않겠지만

컬럼이 10개 20개 30개만 되도 엄청난 데이터의 낭비가 발생함을 알 수 있습니다. 이렇게 중복되는 데이터를 최소화 하고자  정규화가 생겨났습니다.

이 정규화에는 제1정규화 제2정규화 등  다양한 방식이 존재합니다. 정규화에 대한 자료는 인터넷에 검색하면 쉽게 얻을 수 있으니 자세한 내용은 생략합니다.

 

결론 -  PK와 FK는 관계형 데이터베이스 RDBMS 에서 반드시 필요하다.

 

pk는 데이터를 구분할 수 있는 컬럼이며 fk는 pk와 대응되거나 null 값을 갖는다 정도로 정리하겠습니다.

 


2번 글에서 말씀드린 SELECT SQL 에 내용 추가 합니다.

 SELECT

 - 출력하고 하는 컬럼들을 명시하는 영역.

SELECT EMPNO, EMPNM, DEPTNM    <- EMP테이블의 사원번호, 사원명, 부서명을 출력.

 FROM EMP

 

FROM

 - 출력할 컬럼의 데이터가 있는 테이블을 불러오는 영역.

SELECT EMPNO, EMPNM, DEPTNM

 FROM EMP   <-  SELECT 절에서 출력하고자 하는 데이터가 들어있는 테이블 명을 명시.

  

WHERE

 - FROM 절에서 불러온 테이블에 조건을 줘서 데이터를 걸러주는 영역.

SELECT EMPNO, EMPNM, DEPTNM

FROM EMP

WHERE EMPNM LIKE '김%'  <- 사원의 이름이 김 씨로 시작하는 사람들만 출력

   

GROUP BY

 - 걸러진 데이터를 토대로 그룹으로 묶어주는 영역.

SELECT COUNT(EMPNO), DEPTNM

FROM EMP

GROUP BY DEPTNM   <-  부서별로 그룹화.  COUNT = 몇 개의 데이터가 있는지 알아내는 함수로서 부서명을 그룹화 하였으므로 부서별로 몇명이 있는지 알 수 있음.

  

ORDER BY

 - 출력결과에 정렬을 해주는 영역.

SELECT EMPNO, EMPNM, DEPTNM

FROM EMP

ORDER BY DEPTNM, EMPNM   <-  부서별로 정렬하고 각 부서에서 이름별로 정렬.


Posted by 타이니스타
2018. 3. 7. 16:53

안녕하세요  "타이니스타" 입니다

이 카테고리에서 다룰 내용은 프로그램 관점의 데이터베이스, sql 등입니다.

즉흥적으로 써내려가는만큼 부족한 부분이 많겠지만 감안하고 봐주시기 바랍니다.

SQL 에 대한 설명에 앞서서 테이블에 대해 알아보겠습니다.

데이터베이스에는 데이터를 저장하는 공간인 테이블이 존재하고, 테이블은 다시 열과 행으로 이루어져 있습니다.

표를 예로 들어보면,

 학번

이름 

학과 

주소 

기타 

 001

 홍길동

 수학

 주소1

 

 002 

 강감찬

 화학

 주소2

 

 003

 이순신

 기계공학

 주소3

 

이와같이 학번, 이름, 학과, 주소, 기타 를  로, 그 아래에 각 항목에 대한 값들이 들어간 한줄 한줄을 이라고 합니다.

열은 달리말하여 컬럼이라고 합니다. 컬럼이라는 항목과 그에 대한 값이 있는 행으로 이루어진 표를 테이블이라고 하며, 이와 같은 구조로 데이터를 갖고 놀수 있는게 SQL 언어입니다.

SQL 언어는 프로그래밍적 요소가 들어갔으며 여기에는 논리적이고 산술적인 기술이 필요합니다.

데이터베이스에 저장된 데이터를 사용하는 큰 갈래로 조회, 추가, 수정, 삭제 가 있습니다.


조회 - 데이터베이스에 저장된 데이터를 사용자의 요구사항에 맞춰서 출력

추가 - 데이터베이스의 특정 공간에 데이터를 추가적으로 입력

수정 - 데이터베이스에 저장된 데이터를 사용자의 요청에 맞춰서 변경

삭제 - 데이터베이스에 저장된 데이터를 사용자가 지정한 조건에 따라 삭제


위와 같이 4가지 방식으로 데이터베이스를 활용하게 되는데, 이를 활용하기 위한 sql 문의 키워드를 알아보겠습니다.


조회 연산 - SELECT

  - SELECT 구문은 SELECT 표현할 컬럼, 컬럼, 컬럼 FROM 데이터가 저장된 테이블명 ;  이 기본 형식입니다.


추가 연산 - INSERT

  - INSERT 구문은 INSERT INTO 데이터를 추가할 대상 테이블명 (추가대상컬럼1, 추가대상컬럼2, 추가대상컬럼3) VALUES (추가대상컬럼1에 들어갈 값, 추가대상컬럼2에 들어갈 값, 추가대상컬럼3에 들어갈 값,) ;  이 기본 형식입니다.


수정 연산 - UPDATE

  - UPDATE 구문은 UPDATE 데이터를 수정할 테이블명 SET 수정대상컬럼 = 수정할값;  이 기본 형식입니다.


삭제 연산 - DELETE

  - DELETE 구문은 DELETE 테이블; 이 기본 형식입니다.


여기서 확실히 짚고 넘어갈 것이 있는데, 위에서 나열한 구문은 모두 기본 구문으로서 대부분의 경우 WHERE 라는 조건절을 추가해줍니다.


WHERE 절에 대해 알기위해 SELECT 문을 심도있게 설명해보겠습니다.


SELECT 학번, 이름, 학과

  FROM 학생정보

 WHERE 학번 LIKE '18%'

 ORDER BY 이름

 

라는 SELECT 쿼리(SQL)가 있습니다. 이 쿼리문을 해석해보면,

SELECT  표시하겠다.   무엇을?  학번, 이름, 학과 컬럼(항목)을.

FROM  어떤테이블에서 데이터를 가져올거냐?  학생정보  라는 이름의 테이블에서

WHERE  데이터를 가져올때 조건을 적어라   학번 LIKE '18%'   학생정보 테이블의 학번 컬럼이 18 로 시작하는 데이터를 가져와.

ORDER BY  불러온 데이터를 정렬해라  이름  이름 컬럼 순으로 (이름 뒤에 ASC 가 붙으면 오름차순, DESC 가 붙으면 내림차순 입니다.) 오름차순으로 정렬하라.  (ASC 및 DESC 생략시에 디폴트로 ASC 인 오름차순 정렬을 수행합니다.) 가 됩니다.


이 외에 GROUP BY, HAVING 등이 들어가기도 합니다.


설명을 보면 알겠으나 WHERE 라는 조건절이 들어감에 따라 사용자가 원하는 데이터들만 데이터를 조회할 수도 있고, 

UPDATE 문이나 DELETE 문 등에서도 거의 항상 WHERE 절을 필요로 하게 됩니다.

SELECT 구문에서는 이 외에도 기본제공되는 함수, 사용자정의함수 등을 활용할 수 있습니다.

 

  

  

Posted by 타이니스타