본문으로 바로가기

MySQL SELECT 문 - php와 관련하여

category Security/Web 2007. 7. 15. 02:26
반응형
1. 기본 select 문
select * from 테이블명

2. where 조건절 포함
select * from 테이블명 where 필드명1 = '필드밸류1 and 필드명2 = '필드밸류2'....

3. limit
select * from 테이블명 limit 시작점, 끝점

4. 카운트 구하기
select count(필드명 or *) from 테이블명

5. 중복되지 않는 값구하기
select distinct(필드명) from 테이블명

6. max값 구하기
select max(필드명) from 테이블명



---------------------------------------------

목표

 - SQL select 문의 기능 설명

 - 기본 select 문 실행

 - SQL 문과 iSQL*Plus 명령 구별

 

SQL select 문의 기능

 : select문은 데이터 베이스에서 정보를 검색합니다. SELECT문을 사용하여 다음을 수

   행할 수 있습니다.

   - 프로젝션 : SQL의 프로젝션 기능을 사용하면 테이블에서 질의 결과로 반환될 열을

    사용자 가 필요한 만큼 선택할 수 있습니다.

   - 선택 : SQL의 선택기능을 사용하면 테이블에서 질의 결과로 반환될 행(row)을 선택

    할 수 있으며 다양한 조건을 사용하여 표시할 행을 제한할 수 있습니다.

   - 조인 : SQL의 조인 기능을 사용하면 서로 다른 테이블 간에 링크를 생성하여 각 테이

    블에 저장된 데이터를 함께 가져올 수 있습니다. 조인에 대한 내용은 다른 단원에서

    자세히 설명합니다.

 

기본 SELECT문

SELECT * |{[DISTINCT] cloumn|expression [alias],...}

FROM table;

 - SELECT는 표시할 대상열을 지정합니다.

 - *는 모든열을 의미 합니다. 각 column명을 입력하여도 됩니다.

 - DISTINCT는 중복되는 열을 생략합니다.

 - column|expression은 지정한 열 또는 표현식을 선택합니다.

 - alias는 선택된 열에 다른 머리글 이름을 붙여 줍니다.

 - FROM은 대상 열을 포함하는 해당 테이블을 지정합니다.

 

모든 열 선택

SELECT * FROM table;

 - select 키워드 뒤에 (*)를 사용하면 테이블에 있는 데이터의 모든 열을 표시할 수 있습

    니다.

 

특정 열 선택

SELECT department_id, location_id FROM table;

 - 위에서 말한 (*)대신 특정열(구분자 ","사용)을 주어도 select문이 실행 됩니다.

 

SQL문 작성

 - SQL문은 대소문자를 구분하지 않습니다.

 - SQL문은 하나 이상의 줄에 입력할 수 있습니다.

 - 키워드는 약어로 쓰거나 여러 줄에 나눠 쓸 수 없습니다.

 - 절은 일반적으로 서로 다른 줄에 씁니다.

 - 들여쓰기를 사용하면 SQL문을 좀 더 읽기 쉽게 작성할 수 있습니다.

 - 일반적으로 키워드는 대문자로 입력하고 테이블 이름, 열 등 다른단어는 모두 소문자

    로 입력합니다.

 

널 값 정의

 - 널 값은 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값,  적용할 수 없는 값.

 - 널은 0또는 공백과 다릅니다.

SELECT last_name, job_id, salary, commission_pct

FROM employees;

 : 한 행의 특정 열에 데이터 값이 없으면 그 값을 널이라고 하거나 널을 포함한다고 합

   니다. 널은 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값을

   의미하며 0이나 공백과는 다릅니다. 0은 숫자고 공백은 하나의 문자입니다.

 : 모든 데이터 유형의 열에는 널이 포함될 수 있습니다. 하지만 NOT NULL및 PRIMARY

   KEY등의 제약 조건이 지정된 열에는 널을 사용할 수 없습니다.

 : EMPLOYEES테이블의 COMMISSION_PCT열의 경우 영업과장과 영업사원만이 커미션

   을 받을 수 있습니다. 다른 사원들은 커미션을 받을 수 없는데, 이 경우 널을 사용합니

   다.

 

산술식의 널 값

 - 널 값을 포함하는 산술식은 널로 평가됩니다.

SELECT last_name, 12*salary*commission_pct

FROM employees;

 : 산술식에서 열의 값이 널이면 결과는 널입니다. 예를 들어, 숫자를 0으로 나누면 오류

   가 발생하지만 널로 나누면 결과는 널이거나 알 수 없습니다.

 

열 별칭 정의

 - 열 머리글의 이름을 변경합니다.

 - 계산식에 대한 열머리를 지정할 때 유용합니다.

 - 열 이름 바로 뒤에 사용합니다. 열 이름과 별칭 사이에 선택적으로 AS키워드를 사용

   할 수 있습니다.

 - 공백 또는 특수 문자가 있거나 대소문자를 구분할 경우 큰 따옴표를 사용합니다.

 : 질의 결과를 표시할 때 iSQL*Plus는 일반적으로 선택한 열의 이름을 열 머리글로 사용합니다. 이러한 머리글은 내용을 제대로 설명하지 못하므로 이해하기 어렵습니다. 열 별칭을 사용하면 열 머리글을 변경할 수 있습니다.

 : SELECT목록에서 열 다음에 공백을 구분자로 사용하여 별칭을 지정합니다. 기본적으

   로 별칭 머리글은 대문자로 표시됩니다. 별칭이 공백 또는 특수 문자(# 또는 $등)를 포

   함하거나 대소문자를 구분할 경우에는 큰 따옴표("")로 묶어야 합니다.

 

열 별칭 사용

SELECT last_name AS name, commission_pct comm

FROM employees;

 - 모든 사원의 이름과 커미션 비율을 표시합니다. 예제에서는 선택 사항인 AS키워드가

   열 별칭 이름 앞에 사용되었는데 질의 결과는 AS 키워드의 사용에 관계없이 동일합니

   다. 또한 SQL문에 열 별칭인 name및 comm이 소문자로 되어 있지만 질의 결과가 열 머

   리글이 대문자로 표시됩니다.

SELECT last_name AS "name", salary*12 "Annual Salary"

FROM employees;

 - 모든 사원이 이름과 연봉을 표시합니다. Annual Salary에는 공백이 포함되어 있으므로

   큰 따옴표로 묶여 있습니다. 출력 결과를 보면 열 머리글이 열 별칭과 같음을 알 수 있

   습니다.

 

연결 연산자

 - 열 또는 문자열을 다른 열에 연결합니다.

 - 두 개의 세로선(||)으로 표시합니다.

 - 문자식에 해당하는 결과 열을 생성합니다.

 

연결 연산자 사용

SELECT last_name || job_id AS "Employees"

FROM employees;

 - LAST_NAME과 JOB_ID가 연결되고 별칭으로 Employees가 지정되었습니다.

 - 사원의 이름과 업무 코드가 결합되어 하나의 열로 출력됩니다.

 - 별칭 이름 앞의 AS키워드로 인해 SELECT절을 파악하기가 쉽습니다.

 

리터럴 문자열

 - 리터럴은 SELECT목록에 포함된 문자, 숫자 또는 날짜입니다.

 - 날짜 및 문자 리터럴 값은 작은 따옴표로 묶어야 합니다.

 - 각 문자열은 각 행(row)이 반환될 때마다 한 번씩 출력됩니다.

 : 리터럴은 열 이름이나 열 별칭이 아니면서 SELECT목록에 포함된 문자, 숫자 또는 날

   짜이며 각 행이 반환될 때마다 출력됩니다. 자유로운 형식의 텍스트인 리터럴 문자열

   은 질의 결과에 포함되어 SELECT목록의 열과 동일하게 취급됩니다. 날짜 및 문자 리

   터럴은 반드시 작은 따옴표(' ')로 묶어야 하지만 숫자 리터럴은 묶지 않아도 됩니다.

 

리터럴 문자열 사용 

SELECT last_name || ' is a ' || job_id

        AS "Employee Details"

FROM employees;

 - 모든 사원의 이름과 업무 코드를 표시하며 열 머리글은 Employee Details입니다.

   SELECT문에서 작은 따옴표 사이에 공백을 두어 출력 결과를 알아보기 쉽도록 하였습

   니다.

 

중복 행

 - 질의는 기본적으로 중복 행을 포함한 모든 행을 표시합니다. 

SELECT DEPARTMENT_ID

FROM employees;

 : 특별히 표시하지 않는 한 iSQL*Plus는 중복 행을 제거하지 않은 상태로 질의 결과를

  표시합니다. 예제는 EMPLOYEES테이블의 모든 부서 번호를 표시하며 부서 번호가 반

  복되어 있음을 볼 수 있습니다.

 

중복 행 제거

  - SELECT절에서 DISTINCT키워드를 사용하여 중복행을 제거합니다. 

SELECT DISTINCT department_id

FROM employees;

 : 결과에서 중복 행을 제거하려면 SELECT절에서 SELECT키워드 바로 다음에 DISTINCT

   키워드를 넣어야 합니다. 예제에서 EMPLOYEES 테이블에는 실제로 행이 20개 포함되

   어 있지만 고유한 부서 번호는 7개 뿐이다.

 : DISTINCT수식자 다음에 여러 열을 지정할 수 있습니다 DISTINCT수식자는 선택한 모든

  열에 영향을 주므로 결과에는 모든 가능한 열 조합 중 고유한 열 조합이 모두 표시됩니

  다.


테이블 구조 표시 

DESC[RIBE] tablename

 - 이 명령은 열이름과 데이터 유형뿐 아니라 열에 반드시 데이터가 포함되어야 하는지

   여부도 표시합니다.

 : tablename - 사용자가 액세스할 수 있는 기존 테이블, 뷰 또는 동의어의 이름입니다.

 

* 데이터 유형         설명

  NUMBER(p,s)    최대 자릿수가 P이고 소수점 이하 자릿수가 s인 숫자 값입니다.

  VARCHAR2(s)    최대 크기가 s인 가변 길이 문자 값입니다.

  DATE                B.C.4712년 1월 1일 ~ A.D.9999년 12월 31일 사이의 날짜 및 시간 값.

  CHAR(s)           크기가 s인 고정 길이 문자 값입니다.


반응형

'Security > Web' 카테고리의 다른 글

SQL-INJECTION (GOOD!)  (0) 2007.07.15
Command Injection Flaws  (0) 2007.07.15
네이버카페 모든글보기(등급무시)  (3) 2007.07.14
XSS  (0) 2007.06.14
Anti Game Hacking 의 원리, 그리고 Codes  (0) 2007.04.01