SELECT
-테이블에 입력된 레코드를 가져오는 구문

SELECT 컬럼이름 FROM 테이블이름 WHERE 조건

SELECT no,name FROM student WHERE no=2
결과는
 
no name
      2 한 혁


테이블의 모든 컬럼의 값을 가져오게 하려 한다면, 가져올 컬럼이름대신에 *을 사용해주면 된다.
SELECT * FROM student WHERE no =2;
->no가 2인 레코드의 모든 컬럼에 해당하는 값을 가져온다

SELECT * FROM student WHERE no >=2;
->no가 2보다 크거나 같은 레코드를 모두 가져와라




PHP에서 SELECT 활용
connect.php
<?
$connect=mysql_connect("localhost", "asdf", "1234"); //mySQL에 접속
$mysql = mysql_select_db ("asdf_db", $connect); //db선택
?>

index.php
<?
include "connect.php"; //mysql접속

$query="SELECT * FROM student WHERE no >= 2;"; //꺼내오기 쿼리문
$result=mysql_query($query, $connect); //쿼리문입력

while ($data = mysql_fetch_array ($result)) { //연관배열의 형태로 데이터를 변환
//여기서 $data의 연관배열은 $data[컬럼이름]의 형태
//예로, no컬럼의 값은 $data[no]에 저장된다
 echo "$data[no] $data[name] $data[year] <br>";

}
?>

위의 예제를 테이블과 같은 형태로 출력하고 싶다면 아래와 같이 수정하자
<table border=1>
<?
include "connect.php"; //mysql접속

$query="SELECT * FROM student WHERE no >= 2;"; //꺼내오기 쿼리문
$result=mysql_query($query, $connect); //쿼리문입력

while ($data = mysql_fetch_array ($result)) { //연관배열의 형태로 데이터를 변환
//여기서 $data의 연관배열은 $data[컬럼이름]의 형태
//예로, no컬럼의 값은 $data[no]에 저장된다
 echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[year]</td></tr> <br>";

}
?>
</table>


만약 가져올 레코드의 개수가 하나라면 while문을 사용해줄 필요가 없다
연관배열에 가져온 레코드 중 첫번째 레코드의 내용이 저장되기 때문이다
<?
include "connect.php"; //mysql접속

$query="SELECT * FROM student WHERE no = 1;"; //꺼내오기 쿼리문
$result=mysql_query($query, $connect); //쿼리문입력

$data = mysql_fetch_array ($result));  //연관배열의 형태로 데이터를 변환
 echo "$data[no] $data[name] $data[year] ";

}
?>



ORDER BY
-꺼내온 레코드들을 정렬해 주는 역할

SELECT * FROM 테이블이름 WHERE 조건 ORDER BY 컬럼이름 ASC

ASC:오름차순 (생략가능)
DESC:내림차순

<table border=1>
<?
include "connect.php"; //mysql접속

$query="SELECT * FROM student ORDER BY year DESC;"; //꺼내오기 쿼리문
$result=mysql_query($query, $connect); //쿼리문입력

while ($data = mysql_fetch_array ($result)) { //연관배열의 형태로 데이터를 변환
//여기서 $data의 연관배열은 $data[컬럼이름]의 형태
//예로, no컬럼의 값은 $data[no]에 저장된다
 echo "<tr><td>$data[no]</td><td>$data[name]</td><td>$data[year]</td></tr> <br>";

}
?>
</table>

두개 이상의 컬럼에 대해 순차적으로 ORDER BY를 적용하려면 ,로 컬럼이름을 연결하여 사용하면 된다
SELECT * FROM student ORDER BY year DESC, no DESC




LIMIT
-가져오는 레코드의 개수를 제한하는 구문

SELECT * FROM 테이블이름 WHERE 조건 ORDER BY 컬럼이름 LIMIT 갯수


SELECT * FROM 테이블이름 LIMIT 위치,갯수
-> 여기서 위치는 가져올 레코드의 가장 첫번째 레코드가 0이 되며, 가장 첫레코드부터 2개의 레코드를 가져오고자 한다면
LIMIT 0,2를 넣어주면 된다. 이는 LIMIT 2와 같다

하지만 LIMIT 1,2 라고 한다면
두번째 레코드부터 2개의 레코드를 가져오기 때문에 첫번째 레코드는 무시하고 no가 2,3인 레코드만을 가져온다

게시판에 유용하게 쓰일 수 있는데
총 20개의 글이 있을때, 한 페이지당 10개의 글 목록을 보여주려면
첫 페이지는 LIMIT 0,10
2페이지에는 LIMIT 10,10 으로 하면된다




DISTINCT
-가져올 레코드의 값들이 중복될때 그 중 하나만을 가져오는 역할

SELECT DISTINCT 컬럼이름 FROM 테이블이름

예로
student 의 year라는 컬럼에 1996, 1996, 1997 이라는 레코드가 저장되어 있는데
이 컬럼에 입력된 값에는 어떤 것들이 있는지 알고 싶을 때 사용한다
물론 그 결과는 1996과 1997이 된다
즉 중복되는 값은 무시하고 다른 어떤 값이 있는지를 계속해서 찾게된다

DISTINCT는 컬럼이름 대신 *를 사용할 수 없고
여러개의 컬럼을 동시에 가져올 수 없다
물론 WHERE , ORDER BY 는 사용이 가능하다

<table border=1>
<?
include "connect.php"; //mysql접속

$query="SELECT DISTINCT year FROM student ;"; //꺼내오기 쿼리문
$result=mysql_query($query, $connect); //쿼리문입력

while ($data = mysql_fetch_array ($result)) { //연관배열의 형태로 데이터를 변환
//여기서 $data의 연관배열은 $data[컬럼이름]의 형태
//예로, no컬럼의 값은 $data[no]에 저장된다
 echo "<tr><td>$data[year]</td></tr> ";

}
?>
</table>
DISTINCT는 레코드의 수가 많은 테이블에서 어떠한 값들이 저장되어 있는지, 그 값의 종ㄹ에 대해 알고 싶을때 유용하게 쓰이는 구문으로
예로, 메일링리스트와 같은 프로그램에서 같은 이메일 주소가 등록되었을때 중복된 메일 발송을 막기 위해 유용하게 사용될 수 있다.


























+ Recent posts