목차
1. 도메인 위임
1-1 하위 도메인 생성 및 연결
2. SQL 다양한 조건 검색
2-1 NULL과 비교 연산
2-2 BETWEEN_AND 연산자
2-3 IN연산자
2-4 LIKE연산자
3. PHP 배열
3-1 PHP 배열 준비
3-2 배열의 구조와 정의
1. 도메인 위임
1-1 하위 도메인 생성 및 연결
각 DNS 서버는 하위에 독립적인 하부 도메인을 더 둘 수 있다. 최상위 DNS 서버로부터 각 DNS 서버는 할당된 도메인에 대해 독립적이며 하위 도메인에 대한 권리를 가진다.
기존 DNS 서버에 하위 도메인 서버를 만들 경우 기존 서버 측에 할 설정은 다음과 같다.
① 기존 ast09.sec.zone 파일에 다음과 같이 하위 도메인에 대한 정보를 추가한다.
st.ast09.sec. IN NS ns.st.ast09.sec.
ns.st.ast09.sec. IN A 192.168.10.142
② 지정된 ip에 DNS 서버를 구성한다.
// 하위 도메인 서버의 zone 파일 //
$TTL 1D
@ IN SOA ns.st.st09.sec. root.ns.st.ast09.sec. (
1 ; Serial
1D ; Refresh
1H ; Retry
1W ; Expire
3H ) ; Minimum
; Name Server
IN NS ns.st.ast09.sec.
; Host address
IN A 192.168.10.142
ns IN A 192.168.10.142
www IN A 192.168.10.143
③ 상위 서버를 이용하여 하위에 등록된 도메인을 테스트한다.
2. SQL 다양한 조건 검색
2-1 NULL과 비교 연산
NULL은 값이 지정되지 않은 것이므로 비교 연산자(=, <, >)를 사용할 수 없다.
NULL에 대한 직접 검색은 다음 연산자를 이용한다.
‐ 컬럼 IS NULL
‐ 컬럼 IS NOT NUL
ex)
보너스가 결정되지 않은 사원을 검색한다.
SQL> SELECT * FROM emp WHERE comm IS NULL;
2-2 BETWEEN_AND 연산자
SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 BETWEEN 값1 AND 값2 ORDER BY 컬럼...
- '컬럼 >= 값1 AND 컬럼 <= 값2' 와 동일하다. (between_and가 가독성이 더 높다.)
‐ 컬럼의 값이 값1에서 값2 사이의 값을 검색한다.
‐ 값1은 반드시 값2보다 작아야 한다. (음수를 입력할 때 주의한다.)
ex)
1992년에서 1996년 사이에 입사한 사원을 검색한다.
SQL> SELECT * FROM emp WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31' ORDER BY hdate;
위와 같이 작성한 경우, 데이터베이스의 프로그래밍에 따라 잘못된 값이 나올 수 있다.
입사일자가 '시:분:초' 가 '00:00:00' 으로 설정되도록 프로그래밍되어 있는 경우, 1996/12/31:00:00:00 이후 입사한 사원은 검색되지 않는 문제가 발생한다.
이와 같은 문제를 방지하기 위해 프로그래밍할 때 필요없는 부분은 잘라내는 것이 중요하다.
2-3 IN연산자
SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 IN (값1, 값2 ...) ORDER BY 컬럼....
‐ 값 중에 일치하는 값이 하나라도 있으면 검색된다.
‐ OR 연산자와 = 연산자로 교환 가능하다. (IN 연산자의 가독성이 더 좋다.)
- 서브 쿼리, 파티션 등 여러 기능에 사용된다.
ex)
10, 20번 부서 사원을 검색한다.
SQL> SELECT * FROM emp WHERE dno IN ('10', '20') ORDER BY dno;
2-4 LIKE연산자
SELECT * | 컬럼, ... FROM 테이블 WHERE 컬럼 LIKE '리터럴' ORDER BY 컬럼...
‐ LIKE 연산자는 패턴 연산자의 일종으로 일부 문자열만을 이용해서 대상을 검색한다.
‐ 와일드 문자를 사용한다.
% : 문자열을 검색한다. 이때 공백도 포함한다.
_ : 문자를 검색한다.
예 | 설명 | 검색 대상 |
'이%' | '이'로 시작하는 모든 문자열 | 이, 이과, 이산대수, 이불 ... |
'%김%' | '김'이 들어가는 모든 문자열 | 김, 김장, 돌김, 되새김질 ... |
'_장' | '장'으로 끝나는 두 글자 단어 | 김장, 쌈장, 된장, 대장 ... |
'__화' | '화'로 끝나는 세 글자 단어 | 무궁화, 운동화, 들국화 ... |
'%이#%%' | ESCAPE 코드를 '#' 으로 지정한 경우, '이%' 가 포함된 문자열 | |
'_#%_' | ESCAPE 코드를 '#' 으로 지정한 경우, '%'가 포함된 세 글자 단어 |
ex)
이름이 '하늘'인 사원을 검색한다.
성과 이름이 각각 한 글자인 사원을 검색한다.
SQL> SELECT * FROM emp WHERE ename LIKE '%하늘';
SQL> SELECT * FROM emp WHERE ename LIKE '__';
단, 성과 이름이 한 컬럼에 저장되어 있으면 첫 문장과 같이 검색 시 성이 '하', 이름이 '늘' 인 사람도 검색되므로 원하는 검색결과에 맞지 않는다.
이러한 문제를 방지하기 위해 성과 이름을 다른 컬럼에 저장해야 한다.
3. PHP 배열
3-1 PHP 배열 준비
● 반복문 심화
for 문과 if 문을 조합하여 다음과 같이 입력한 수까지의 소수를 출력하는 프로그램을 작성해볼 수 있다.
// num까지의 소수 출력 HTML //
<html>
<head>
<title>소수판별.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<form method="post" action="sosu.php">
num까지의 소수를 출력한다 : <input type="text" name="num"><br>
<input type="submit" name="확인" value="확인">
<input type="reset" name="취소" value="취소"><br>
</form>
<hr>
<? show_source(__FILE__); ?>
</html>
// num까지의 소수 출력 PHP //
<html>
<head>
<title>소수판별.php</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<?
$num = $_POST["num"]; // 소수여부 판별
$k = 0;
if($num <= 1 ) {
echo("
<script>
window.alert('1보다 큰 값을 입력하세요');
history.go(-1);
</script>
");
exit;
}
echo ("{$num}까지의 소수: ");
for($a = 2; $a <= $num; $a++){
for($i = 2; $a % $i != 0; $i++){
}
if($a == $i){
echo("{$a} ");
$k += 1;
}
}
echo("<br>{$num}까지 소수의 개수는 {$k}개이다.");
?>
<hr><p>
<? show_source(__FILE__); ?>
</body>
</html>
●테이블 생성
for 문을 사용하여 사용자가 원하는 행과 열의 개수를 입력받아 다음과 같이 테이블을 생성할 수 있다.
// 값을 입력받아 테이블 생성 HTML //
<html>
<head>
<title>행렬.html 입력 폼파일</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<form method="post" action="table.php">
행 : <input type="text" name="num"><br>
열 : <input type="text" name="num2"><br>
<input type="submit" name="확인" value="확인">
<input type="reset" name="취소" value="취소"><br>
</form>
<hr>
<? show_source(__FILE__); ?>
</html>
// 값을 입력받아 테이블 생성 PHP //
<html>
<head>
<title>행렬.php</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<table border = '1'>
<?
$a = $_POST["num"];
$b = $_POST["num2"];
for($i = 1; $i <= $a; $i++){ // 행
echo("<tr>");
for ($j = 1; $j <= $b; $j++){ // 열
echo("<td width = 100, height = 30> </td>");
}
echo("</tr>");
}
?>
</table>
</body>
</html>
3-2 배열의 구조와 정의
배열은 간단히 여러 개의 변수를 모아서 정의하는 것을 의미한다. 배열은 구조에 따라 1차원 배열과 2차원 이상의 다차원 배열로 나뉜다.
● 1차원 배열
1차원 배열은 가장 기본적인 배열 구조로 선형으로 나열된 변수와 동일하다.
$ar[1] = 'abc';
$ar[2] = 'def';
$ar[3] = 'ghi';
//요소 //값
배열은 배열의 이름과 키값 그리고 값을 가진다. 위의 문장에서 ar은 배열의 이름, 대괄호 안의 숫자는 배열의 키값(= 첨자), 할당된 'abc'는 배열에 저장된 값이다.
$ar과 같이 배열의 키값이 정수인 배열을 스칼라 배열이라고 한다. 그러나 배열의 키값에 반드시 숫자만 이용하는 것은 아니다. 키값은 필요하다면 다음과 같이 문자를 사용하는 것도 가능하다.
$row[sno] = 'S01009';
$row[sname] = '관우';
$row[syear] = 4;
위와 같이 배열의 키값이 문자인것을 연관 배열이라고 한다.
$ar1 = array(1,2,3);
$ar2 = array(3 => "abc", 4 => "def", "ghi");
$ar3 = array("a" => "ab", "k" => "a2", 0 => 23);
위의 array()는 배열을 생성하는 함수이다. 배열의 키값은 지정할 수도, 안 할 수도 있다. 생성된 $ar1, $ar2, $ar3의 구조는 다음과 같다.
$ar = array(1,2,3,4,5);
for($i = 0; $i < 5; $i++) => for ($i = 0; $i < count($ar); $i++)
{
. . . . .
}
위와 같이 배열의 요소 수만큼 반복문을 실행시키는 문장의 경우 count() 함수를 이용하여 요소의 수를 직접 세지 않고 반복문을 만들 수 있다.
배열과 반복문을 활용하여 다음과 같이 배열 내의 소수를 출력하는 프로그램을 작성할 수 있다.
// 배열 내의 소수 출력 PHP //
<html>
<head>
<title>ar02-2.php</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<?
$ar = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
$cn = count($ar);
for($i=0; $i<$cn; $i++){
$value = $ar[$i];
if($value > 1){
for($j = 2; $value % $j != 0; $j++){}
if($value == $j) echo("$value ");
}
}
?>
<hr><p>
<? show_source(__FILE__); ?>
</body>
</html>
● 2차원 배열
2차원 배열은 엑셀과 같은 스프레드시트 프로그램에서 보는 것처럼 행과 열을 가진 배열을 의미한다. 2차원 배열은 이전에 사용한 1차원 배열과 달리 키값이 두 개인 배열로 각각의 키값은 행과 열을 의미한다.
$ar[0][0] = "a"; $ar[0][1] = "b"; $ar[0][2] = "c"; / $ar[행][열]
$ar[1][0] = "d"; $ar[1][1] = "e"; $ar[1][2] = "f";
$ar[2][0] = "g"; $ar[2][1] = "h"; $ar[2][2] = "i";
// array() 함수를 이용한 같은 작업 //
$ar = array(array("a","b","c"), array("d","e","f"),array("g","h","i"))
2차원 배열은 1차원 배열을 쌓아놓은 형태로, 2차원 배열에 count($ar)을 실행하면 행의 개수가 출력되고 count($ar[0])을 실행하면 0행의 요소 개수가 출력된다.
- count($ar) : 1차원 배열을 몇 개 쌓았는지 출력한다. (2차원 배열의 행 개수를 출력한다.)
- count($ar[0]) : 그 행의 배열 요소가 몇 개인지 출력한다.
다음과 같이 키값을 문자로 하여 2차원 배열을 생성할 수 있다.
$ar = array(array(학번 => "123456",이름 => "유비", 학과 => "화학"),
array(학번 => "123457",이름 => "관우", 학과 => "화학"),
array(학번 => "123458",이름 => "장비", 학과 => "화학"))
학번 | 이름 | 학과 | |
$ar[0] | 123456 | 유비 | 화학 |
$ar[1] | 123457 | 관우 | 화학 |
$ar[2] | 123458 | 장비 | 화학 |
2차원 배열을 다룰 때 $ar을 다룰 수도 있지만 필요 하다면 $ar[0], $ar[1], $ar[2]와 같은 1차원 배열로 바꿔 문제를 다룰 수도 있다.
다음과 같이 2차원 배열의 행의 수를 확인한 후, 행을 순서대로 읽어서 출력할 수 있다.
$count = count($ar);
for($i = 0; $i < $count; $i++) {
echo("row = $i : {$ar[$i]['학번']} - {$ar[$i]['이름']} - {$ar[$i]['학과']} <br>");
}
'일일 정리' 카테고리의 다른 글
APACHE, 자기 참조 조인과 외부 조인, 단일 행 서브 쿼리 (0) | 2025.02.26 |
---|---|
JOIN - 등가 조인과 비등가 조인, 조인문 작성 요령 (0) | 2025.02.25 |
다수의 도메인 서버, sqlplus 출력 제어, 연결 연산자와 중복 제거, 정렬을 이용한 자료 검색, WHERE 절을 이용한 조건 검색 (0) | 2025.02.20 |
Authoritative DNS 서버, 데이터베이스, SELECT 문의 이해 (0) | 2025.02.20 |
DNS, 원격 데스크톱, SQL(ORACLE, TNS) (0) | 2025.02.18 |