본문 바로가기

Kitri_NCS3기 보안과정/DB보안

170529 데이터베이스 개요, Select문


웹서버와 웹 어플리케이션 >>


1. 웹서버

:Apache , IIS , nginx, GWS


인터넷 상에서 HTML로 작성된 웹문서를 클라이언트에서 서비스하는 서버. 

웹서버에서 회원정보에 대한 서비스를 제공하는 경우 각각의 클라이언트마다 각각의 요구에 맞는 페이지를 작성해주여야 하는 어려움

웹 페이지뿐아니라 그림, 스타일시트 ,자바스크립트도 해당.


회원정보에 대한 서비스 제공은 문서의 형식은 동일하고 데이터의 차이 만있다는점을 특징으로 데이터베이스서버와 웹문서 사이에 미들웨어를 사용해서 필요한 데이터를 가져다 쓰는 형식으로 개선이 가능함 


2. 웹 애플리케이션 서버(Web Application Server . WAS)

: 제우스, 웹로직, 웹스피어, 레진 등 ...


페이지가 각각의 사용자에 의해서 요청될때 , 특정한 프로그램을 통해서 데이터베이스에 있는 데이터를 웹페이지로 가져와서 구성한후 요청한 사용자에게 보내주게된다.

- 프로그램 실행 환경과 데이터베이스 접속기능 제공 

- 여러 개의 트랜잭션을 관리

- 업무를 처리하는 비즈니스 로직 수행 


기능적인 차이로 웹서버는 정적인 데이터를 처리하는 용도로 사용하고, 웹 애플리케이션은 동적인 데이터를 처리하는 용도로 사용.


기본용어 >>


용어

설명 

데이터(Data) 

 구체적으로 표현된 하나의 값 

ex) "홍길동" , "010-1234-5432" 

정보(Information) 

 사용자(Client), 요청자에게 특별한 의미를 가지는 데이터의 조합 

ex) "홍길동+010-1234-5432" → 홍길동의 연락처라는 정보

테이블(Table) 

 데이터베이스 내에 데이터들이 저장된 객체(틀? 상자?) 데이터를 효율적으로 관리하기 위해 사용하는 데이터저장포맷?  

컬럼(column) 

 열, 특정 테이블에서 동일한 의미와 동일한 속성을 가지는 값. (같은 항목상의 내용들) 

행(Row) 

 행, 특정 테이블에 정의된 모든 컬럼들의 값들로 구성된 데이터들 한 개 의 묶음을 의미

필드(Field) 

 하나의 값의 위치, 행과 열의 교차점, Null이거나 오직 하나의 값을 가짐 

레코드(Record) 

 하나이상의 필드에 있는 값들의 조합.  


 이름

전화번호 

성별 

나이 

주소 

 → 필드이름

키영재

031-411-1234 

남 

28 

하나무라

 

트형석

02-794-1234 

남 

28 

시공의폭풍

 → 행 

리종호

02-454-8888 

남 

24 

코인행성

 

잼재환

043-112-1112 

남 

26 

안드로메다

 → 필드 

 └ 컬럼

 

 

 

 

 


초기의 데이터베이스 테이블이 중복되는 내용으로 각 업무마다 테이블을 생성해서 사용하는 경우가 많았다. 이경우 중복된 데이터가 입력되는것을 피하기 어려움이 있으며, 데이터 관리를 위한 별도의 프로그램까지 개발해야되는 상황이 오게된다.


이런 문제점 때문에 설계된 데이터 구조를 근거로 테이블을 생성해야 하는데 공통된 목적으로 사용되는 프로그램들에서 사용되는 모든 데이터를 특성에 따라 분류하고 그룹화하여 동일한 프로그램들에게 테이블을 공유하여 사용하도록 하면서 새로운 입력에 대한 중복입력을 방지하고 별도의 프로그램개발의 필요성도 없어지게 하였습니다. 


데이터베이스의 구조를 설계할때 속성(개별적이 데이터가 가지는 의미)이 사용목적에 따라 그룹화하여 엔터티(그룹화된 속성들의 집합)로 만들고, 이러한 엔터티 및 엔터티들의 관계를 그림으로 도식화하여 표현한 것이 Entity Relationship Diagram(데이터 구조도 , ERD) 입니다.



※ SQL문 작성규칙

- SQL-문에서 SQL 키워드, 컬럼이름, 테이블이름은 대소문자를 구분하지 않으며, 세미콜론(;)으로 끝납니다.

-  하나 이상의 여러 라인에 걸쳐(주로 절 단위) 하나의 문장을 작성할 수 있지만, 단어가 나눠질 수는 없습니다. 또한 문장을 쉽게 파악하도록 들여쓰기(Indent)를 활용할 수 있습니다.

-  SQL*Plus 또는 SQL*Developer 툴에서 다음과 같은 방법을 이용하여 특정 내용을 주석으로 처리할 수 있습니다.

• 라인 주석: 특정 라인에서 -- 를 명시하면 그 다음부터의 내용이 주석으로 처리됩니다.

• 블록 주석: [/*] 기호부터 [*/] 기호 사이에 있는 [여러 줄] 또는 [라인의 일부] 내용이 주석으로 처리됩니다

 

※ 산술 연산자 처리

- number : +, -, *, /

- date : +, -

 

※ Null 이란 ?

: 데이터가 없음을 뜻한다. 0도 아니고 공백도 아니다 데이터가 없는상태를 Null이라 하며 (null)로 표시된다.

  산술연산자가 포함된 표현식에 null이 포함되면 결과는 항상 null이되는 특징이 있다.

 

 

 Select문 >>

: 프로그램에서 처리할 데이터를 사용자 프로그램으로 가져오기 위하여, Select-문 사용 

 

단순 Select문 

: 하나의 테이블에 대하여 질의하는 경우 사용하는 문장, FROM절에 테이블이 하나만 명시


기본 문법.


SELECT 컬럼1, 컬럼2, 컬럼-표현식 -- 옆에서 SELECT 키워드로 시작된 라인을 SELECT-절 이라고 합니다.

FROM 소유자명.테이블이름 -- 옆에서 FROM 키워드로 시작된 라인을 FROM-절 이라고 합니다.

WHERE 행을 선택할 조건식 -- 옆에서 WHERE 키워드로 시작된 라인을 WHERE-절 이라고 합니다.

ORDER BY 정렬기준 ; -- 옆에서 ORDER BY 키워드로 시작된 라인을 ORDER BY-절 이라고 합니다.

Select 절 : 원하는 데이터가 정의된 컬럼 명시 및 연산자와 함수 처리 

From절 : select에서 정의된 컬럼이 있는 테이블 명시. 테이블을 소유한 계정이름(스키마 이름)명시할것을 권장.

Where절 : select문에서 처리되는 행(Row)을 선택할 조건 기술 

Order by : 결과 레코드를 정렬할 기준 명시

 

 


 

명령어 


DESC(Describe) : 테이블을 구성하는 컬럼이름과 데이터 유형을 확인 가능


산술연산자 처리 : 뽑아오는 데이터에 연산을 해준다.

 


Null : 데이터가 없을때는(null)로 표시된다. 산술연산자가 포함된 표현식에 null이 포함되면 결과는 항상 null이되는 특징이 있다.

 


컬럼별칭 정의 : 레코드위에 표시된 각 필드의 제목을 머리글(header)라고 하는데 이걸 컬럼별칭을 명시해서 바꿔줄 수 있다.

 

[표준문법]
컬럼표현식 AS "원하는 별칭" 

큰따옴표["]를 명시하면 둘 이상의 단어를 지정할 수 있습니다.
큰따옴표["]를 명시하면 명[대/소]문자가 구분되어 표시됩니다.

 [약식문법]
컬럼표현식 원하는_별칭

• AS 키워드를 생략하고 간단히 빈칸을 이용합니다.
• 컬럼 별칭이 한 단어이면 큰따옴표["]를 생략 할 수 있습니다.
☞ 큰 따옴표["]를 생략하면 머리글이 대문자로 표시됩니다.


 

 


Distinct : 중복되는 내용 제거

 

 

- PU_CLERK가 반복되서 나오는 결과가 있다.

 

DISTINCT 를 사용함으로서 중복된 레코드를 한번만 표시되게 한다.

 

 

 

 

Select 문에서 Where , Order by 사용>>

 

 문법

 Where

Order by 

 특징

행을 선택하기위한 조건 명시 

Select 절에서 From 다음에 옴

결과 레코드를 정렬해서 표시하고자 할 때

Select문의 제일 마지막에 명시 

 기본 문법

 [WHERE 컬럼이름 비교연산자 상수]

[ORDER BY 컬럼이름

컬럼별칭과 위치에 따른 숫자 가능

※ 위치에 따른 숫자

: SELECT name, number

                ↑          ↑

               1번       2번

 

Where 에서 상수 표시방법

숫자

 3 -- 따옴표없이 그냥 기술

문자

 'a' -- 작은따옴표 사용

※ OracleDB의 경우 영문자의 대,소문자를 구분한다

날짜

 '08/11/09' -- 작은따옴표 사용

※ 시스템의 날짜 환경변수에 맞춰서 작성해 줘야한다.

ex) 한국 (년/월/일) .

 

 

Whalen이라는 대소문자가 모두 일치하기에 결과가출력된것을 볼 수 있다. 이 값을 대문자로 바꿀 경우 결과가 출력이 안됨을 확인할 수 있었다.

Where 절에 컬럼별칭을 사용하면 오류가 발생한다. Where절에서는 원래의 컬럼명을 사용해야한다

 

   

 

※ Where에서는 null을 어떻게 사용함?

Where 컬럼명 = NULL (x)

Where 컬럼명 IS NULL (o)

 

비교 연산자

 연산자

의미 

 문법

= 

같다 

 

<>, !=, ^= 

같지않다 

>,<,>=,<= 

크다 , 작다 , 이상, 이하

 BETWEEN A and B

A와 B의 사이값

Where salary BETWEEN 4000 AND 4500 ;  

 IN (A,B,C,D....) 

A,B,C,D....들과 비교해서 일치값 색출

Where number IN(1,2,3,4,5) ;  

 LIKE  (%, _)

% : 명시된 위치에 0개이상의 여러문자가 올 수있다.

A% - A로 시작하는것

%A - A로 끝나는것

%A% - A가 포함된것 

 

_ : 명시된 위치에 1개의 문자만 올수있다.

_a_ - cap, tap 등 가운데 a가 위치, 양쪽에 아무글자나 배치되있는것

 Where Last_name LIKE 'A%'

 Where Last_name LIKE '_b_%'

조건1 AND 조건2

조건1과 조건2를 모두 만족하는 행  

where manager_id IS NULL AND salary >10000 ; 

조건1 OR  조건2

조건1과 조건2중 최소 하나의 조건을 만족하는 행 

where manager_id IS NULL ORsalary >10000 ; 

 NOT 조건1

조건1을 만족하지않는 행 

 Where manager_id IS NOT NULL ;

WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
WHERE salary NOT BETWEEN 10000 AND 15000
WHERE last_name NOT LIKE '%A%'

 

 

 

ORDER BY 에서 ASC ,DESC   

- ASC 오름차순

- DESC 내림차순

- 명시하지않으면 Default로 ASC

 

ORDER BY에서 정렬 두번 선언 되는경우

처음 나온것을 먼저 정렬하고 정렬한것중 동일값을 가지고 있는 것 끼리는 두번째 선언된 정렬기준으로 정렬한다.

 

Where 절과는 다르게 ORDER BY에서는 AS 사용이 가능하다.

ORDER BY는 서버 프로세스상에서 처리되는 작업이 아닌 결과 레코드를 developer에 보내주는 작업의 과정에 있기 때문에 변경된 컬럼명을 사용한 작업이 가능하다 .