목차
1. APACHE
1-1 APACHE 개요
1-2 APACHE 설치
2. 자기 참조 조인과 외부 조인
2-1 자기 참조 조인
2-2 외부 조인
3. 단일 행 서브 쿼리
3-1 서브 쿼리
3-2 단일 행 서브 쿼리
3-3 단일 행 서브 쿼리의 문제
1. APACHE
1-1 APACHE 개요
● 아파치
- 공식 홈페이지: www.apache.org
Welcome to The Apache Software Foundation
Plus One is the ASF's monthly bulletin to showcase major milestones, news, events, and activities across the ASF project ecosystem. At the bottom of the blog, you can subscribe to get real-time notifications when a new edition is released.
www.apache.org
- 오픈소스로, 가장 높은 웹 서버 소프트웨어 시장 점유율을 가진다.
- 빠른 버그패치와 공개로 보안성이 뛰어나다.
- 거의 모든 플랫폼을 지원한다.
- 웹서버가 제공하는 거의 모든 기능 테스트가 가능하다.
1-2 APACHE 설치
● 사전 준비- 패키지 업데이트
# dnf install -y gcc gcc-c++ cmake apr apr-util zlib-devel wget net-tools expat-devel
● 설치 과정
① httpd‐2.2.34.tar.gz 버전을 /usr/local/ 에 다운받는다.
② # cd /usr/local/
③ # tar xvfz httpd‐2.2.34.tar.gz
- tar: 여러 파일/디렉토리를 하나로 묶는다.
- gzip: 용량을 줄인다.
④ # cd ./httpd‐2.2.34
- 압축을 풀면 파일 이름과 동일한 디렉토리가 생긴다. 여러 파일을 압축했다가 풀면 여러 디렉토리가 잔뜩 생기므로 파일 압축 시에는 한 디렉토리에 모아놓고 그 디렉토리를 압축하도록 한다.
⑤ # ./configure ‐‐prefix=/app/apache ‐‐enable‐so
⑥ # make
⑦ # make install
● 주요 구성 파일
- 실행 데몬: /app/apache/bin/httpd
- 관리 스크립트: /app/apache/bin/apachectl
- 설정 파일: /app/apache/conf/httpd.conf
httpd.conf 파일에는 기본 설정이 들어있다.
conf/extra 에도 설정이 들어있으나 httpd.conf에서 include 기능을 이용하여 extra의 내용을 불러오는 방식으로 사용한다.
※ include: 파일을 불러와 사용하는 기능. 매번 쓰는 파일의 내용을 저장하고 필요할 때마다 불러오는 방식으로 사용한다.
- 초기 서비스 파일: /app/apache/htdocs/index.html
index.html 파일을 서버가 브라우저에 전달해 브라우저를 출력한다.
● APACHE 서버 구동
# /app/apache/bin/apachectl start (stop | restart)
(systemctl에서처럼 enable로 계속 시스템이 돌아가도록 하는 것은 원래 리눅스에 있던 프로그램에 대해서만 가능하다.)
위의 명령어로 아파치 서버를 구동하여 다음과 같이 해당 서버 주소에서 구동을 확인할 수 있다.
사진은 /app/apache/htdocs/index.html 파일에서 내용을 수정한 것으로, 아무런 설정도 하지 않은 첫 화면에는 It works! 가 출력된다.
아파치 서버 구동 시 다음과 같은 메시지가 출력될 수 있다.
서버에 대해 ServerName을 명시적으로 설정하지 않았기 때문에 발생하는 메시지로, /app/apache/conf/httpd.conf에 'ServerName localhost'를 추가하면 메시지가 출력되지 않는다.
2. 자기 참조 조인과 외부 조인
2-1 자기 참조 조인
SELECT 별명1.컬럼1, ... 별명2.컬럼1, ...
FROM 테이블별명1, 테이블별명2, ...
WHERE 조인_조건
AND 일반_조건;
- 동일한 테이블을 자기 참조에 의해 조인한다.
- 별명1과 별명2는 동일 테이블에 대한 별명이지만 각각 별도의 테이블처럼 사용한다.
- 하나의 테이블에 다른 별명을 설정하여 마치 여러 개의 테이블 간 조인하는 것처럼 문장을 구현한다.
ex)
각 사원과 이를 관리하는 사원의 정보를 검색한다.
SQL> SELECT e1.eno, e1.ename, e1.mgr, e2.eno, e2.ename
2 FROM emp e1, emp e2
3 WHERE e1.mgr = e2.eno;
사수 번호 e1.mgr이 e2.eno와 같으므로 e2가 사수 테이블, e1이 부사수 테이블임을 알 수 있다.
2-2 외부 조인
SELECT 컬럼, 컬럼, ...
FROM 테이블1, 테이블2, ...
WHERE 조인_조건(+)
AND 일반_조건
- 조인 조건에 일치하지 않는 데이터도 출력한다.
- 조인 결과물 해석에 있어 오해를 방지하며 결과의 무결성을 보장한다.
- '+' 기호는 데이터가 나와야함에도 조인 조건에 맞지 않아 데이터가 나오지 않는 쪽에 붙인다.
ex)
각 부서별로 사원의 명단을 검색한다.
SQL> SELECT d.dno 부서번호, dname 부서명, ename 사원명
2 FROM dept d, emp e
3 WHERE d.dno = e.dno
4 ORDER BY 1;
SQL> SELECT d.dno 부서번호, dname 부서명, ename 사원명
2 FROM dept d, emp e
3 WHERE d.dno = e.dno(+)
4 ORDER BY 1;
첫 번째와 두 번째 문장에서의 차이는 '+' 기호의 유무뿐이다.
첫 번째 문장의 결과로는 사원이 없는 부서가 출력되지 않는 잘못된 결과값이 출력된다.
두 번째 문장의 결과로는 사원이 없는 부서도 출력되는 옳은 결과값이 출력된다.
3. 단일 행 서브 쿼리
3-1 서브 쿼리
서브 쿼리는 SQL 문에 완전한 SELECT 문이 포함된 것이다.
- 본래 SQL 문: 메인 쿼리(처음 시작하는 SELECT 문)
- 내부 SELECT 문: 서브 쿼리 (첫 SELECT 문 다음으로 나오는 SELECT 문)
- SELECT 문을 겹쳐 쓰는 경우는 보통 2번, 많으면 3번 정도이다. 더 많아질 수록 가독성이 떨어진다.
서브 쿼리는 응용 프로그램으로 대치 가능하지만 성능이나 비용 면에서 월등하다.
● 서브 쿼리의 종류
- 단일 행 서브 쿼리
: 서브 쿼리가 하나의 컬럼에서 하나의 행만 검색한다.
: 풀네임은 '단일 열 단일 행 서브쿼리'이다. 즉, 단 하나의 데이터를 검색한다.
: 전체 서브 쿼리의 90% 정도를 차지한다.
- 다중 행 서브 쿼리
: 서브 쿼리가 하나의 컬럼에서 여러 개의 행을 검색한다.
- 다중 열 서브 쿼리
: 서브 쿼리가 여러 컬럼에서 행을 검색한다.
3-2 단일 행 서브 쿼리
SELECT 컬럼...
FROM 테이블
WHERE 컬럼단일_행_연산자(SELECT 문장 : Sub query문)
. . .;
- 단일 행 연산자가 사용되므로 반드시 서브 쿼리의 결과 값은 한 개만 검색돼야 한다.
- 서브 쿼리는 반드시 괄호로 묶는다.
- 서브 쿼리가 메인 쿼리 보다 먼저 실행된다.
※ 단일 행 연산자: =, <, >, <=, >=, !=
ex)
남궁연호보다 급여를 많이 받는 사원을 검색한다.
문시현과 부서가 다르고 동일한 업무를 하는 사원의 정보를 검색한다.
SQL> SELECT eno 사번, ename 이름
2 FROM emp
3 WHERE sal > (SELECT sal
4 FROM emp
5 WHERE ename = '남궁연호');
SQL> SELECT eno 사번, ename 이름, dno 부서번호, job 업무
2 FROM emp
3 WHERE dno != (SELECT dno FROM emp WHERE ename = '문시현')
4 AND job = (SELECT job FROM emp WHERE ename = '문시현');
3-3 단일 행 서브 쿼리의 문제
서브 쿼리에서 2개 이상의 행의 검색된 경우 에러가 발생한다.
ex)
김선유보다 급여를 많이 받는 사원을 검색한다.
SQL> SELECT eno 사번, ename 이름
2 FROM emp
3 WHERE sal > (SELECT sal
4 FROM emp
5 WHERE ename = '김선유');
위와 같은 문장을 작성했을 때, 김선유라는 사람이 2명 이상이라면 서브 쿼리에서 2개 이상의 행이 검색되므로 에러가 발생한다.
● 예측이 어려운 단일 행 서브 쿼리 수정 방법
- '=' 연산자는 'IN' 연산자로 바꾼다.
- 부등호가 포함된 연산자는 '>any', '>=all' 과 같이 any, all 다중 행 연산자를 추가한다.
(>any 의 경우 가장 작은 값 보다만 크면 되며, >all 의 경우 가장 큰 값보다 크면 된다.)
- Max(), Min()과 같은 그룹 함수를 사용한다.
(Max()함수는 가장 큰값을, Min()함수는 가장 작은 값을 데이터로 리턴한다.)
서브 쿼리와 조인은 사용자의 편의에 따라 마음대로 골라 사용하면 된다.
'일일 정리' 카테고리의 다른 글
단일 행 함수 - 숫자 함수와 날짜 연산, PHP - 2차원 배열 (0) | 2025.02.28 |
---|---|
APACHE - httpd.conf, 다중 행/열 서브 쿼리, 집합 연산자, 단일 행 함수와 문자 함수 (2) | 2025.02.27 |
JOIN - 등가 조인과 비등가 조인, 조인문 작성 요령 (0) | 2025.02.25 |
도메인 위임, SQL 다양한 조건 검색, PHP 배열(배열의 구조와 정의) (0) | 2025.02.23 |
다수의 도메인 서버, sqlplus 출력 제어, 연결 연산자와 중복 제거, 정렬을 이용한 자료 검색, WHERE 절을 이용한 조건 검색 (0) | 2025.02.20 |