[PHP] MYSQL select 구문, left join, where, order by 의미 및 사용법, 그누보드5

구피아 4년전 신고 

PHP에서 MYSQL과 연동되는 부분이 있어 정리해 봅니다.

 

mysql SELECT 구문인데요. 그누보드5 소스 코드를 보며 공부하다 보니 select 구문이 간간이 눈에 들어오더라고요.

 

처음에는 이것이 DB 관련 분야라 보기만 봐도 골치 아픈데다 아직 PHP 공부도 제대로 안 된터라 그냥 무시하고 넘어갈라고 했거든요.

 

근데 이게 그누보드5 소스 공부를 하다 보니 자꾸 눈에 밟히더라고요. ㅎㅎ

 

그래서 이번에 PHP 공부하면서 select 구문도 정리해 놓기로 했네요.

 

 

그누보드5 index.php 파일의 소스 코드를 살펴보면 아래와 같은 내용이 있습니다.

 

$sql = " select bo_table from `{$g5['board_table']}` a left join `{$g5['group_table']}` b on (a.gr_id=b.gr_id) where a.bo_device <> 'mobile' ";

 

공부를 안 한 상태에서 위 내용을 봤을 때는 복잡하고 무슨 의미인지 도통 모르겠던데 알고 나니 그다지 복잡해 보이지 않네요. ㅎㅎ

 

 

일단 select 구문의 기본 구조를 살펴보면 다음과 같습니다.

 

select column_name from table_name

 

무슨 의미냐면, table_name에서 column_name에 해당되는 칼럼만 불러 오라는 내용입니다.

 

만약, bo_table이라는 이름의 테이블에서 모든 칼럼의 내용을 불러 오고 싶다면

 

select * from bo_table 하면 됩니다.

 

참고로, column_name은 1개 이상 존재할 수 있습니다. 무슨 말이냐면...

 

select a, b, c, d, e from table.... 이런 식으로요.

 

 

[`{$g5['board_table']}` a]와 [`{$g5['group_table']}` b]는...

 

`{$g5['board_table']}`을 a, `{$g5['group_table']}`을 b라고 하겠다는 의미라고 하네요.

 

 

다시 정리해보면..

 

select * from table1 left join table2 on table1.gr_id = table2.gr_id;

 

위 형태의 구문을 아래의 형태로도 표현한다고 하네요. 서로 같은 내용입니다.

 

select * from table1 a left join table2 b on a.gr_id = b.gr_id;

 

 

LEFT JOIN 기본 구문

 

SELECT column FROM table1 LEFT JOIN table2 ON table1.col=table2.col;

 

left join 구문은 left 테이블을 기준으로 join 하라는 의미입니다. 단, left 테이블의 비교값과 다를 경우 join에서 제외.

 

위 구문에서 col은 table1과 table2에서 공통적으로 가지고 있는 컬럼을 의미입니다. 비교값이 다를 경우 NlULL로 표시됨.

 

table1

table2

col

name

col

age

1

aa

2

20

2

bb

3

cc

3

30

 

위 경우처럼 table1과 table2의 컬럼이 구성되어 있다고 했을 때

 

select * from table1 a left join table2 b on a.col = b.col 하면..

 

col

name

col

age

1

aa

NULL

NULL

2

bb

2

20

3

cc

3

30

 

이런 형태로 결과가 나온다고 하네요.

 

참고로 left join 구문 이외에도 inner join 구문과 right join 구문이 있다고 합니다.

 

inner join 구문은 left join 구문과 사용법이 같다고 하네요. 다른 점이 있다면 'left'가 'inner'로 바뀐 것이네요.

 

right join 구문 역시 사용법은 같다고 하네요. 다만 left join 구문과 반대라는 점만 다르다고 하네요.

 

 

where 구문

 

 - Mysql 테이블에서 레코드를 필터링. 기본 구문은 다음과 같습니다.

 

select * from table where field = 'sam'

 

무슨 뜻이냐면 table에서 field가 'sam'인 것만을 찾아서 보여달라는 의미입니다.

 

 

where 구문을 사용할 때, 한 가지 이상의 조건을 비교 검색해서 값을 가져오려고 하는 경우 다음과 같이 and 혹은 or 옵션을 사용합니다.

 

select * from users where name = 'Smith' and age = '20'

 

위 구문은 name 필드가 Smith이고, age 필드가 20인 레코드를 보여주게 됩니다.

 

 

select * from users where name = 'Smith' or age = '20'

 

위 구문은 name이 Smith이거나 age가 20인 레코드를 보여주게 됩니다.

 

and 옵션은 비교 대상들의 조건이 모두 만족되어야 하지만 or 옵션은 비교 대상 중 한 가지 조건만 만족되어도 내용을 가져오게 됩니다.

 

 

select * from users where name like 'Smith'

 

이전 구문들과 달리 위 구문에서는 "=" 대신 "like"를 사용한다는 점이 눈길을 끄는데요.

 

여기서 like의 의미는 'Smith'라는 단어가 들어있으면 모든 내용을 가져오라는 뜻입니다.

 

가령, SSmithold, Smith001 등등 단어에 'Smith'가 포함되어 있으면 몽땅 가져온다는 거죠.

 

 

order by 기본 구문

 

select * from table order by column ASC/DESC

 

order by는 column 순으로 내용을 정렬하라는 의미입니다.

 

asc내림차순을 의미하고 생략 가능하지만 desc오름차순을 의미하며 반드시 붙여줘야 합니다.

 

select * from customers order by name, age

 

name 순으로 정렬하며, 동일 name일 경우 age 순으로 정렬합니다. 내림차순이라 asc는 생략 가능합니다.

 

select * from customers order by name desc, age asc

 

위 구문은 name 순으로 오름차순(역순, 하파타카..., zyx.., 9876..)으로 정렬하며, 동일 name이 있을 경우 해당 name들에 대해서만 age 순으로 내림차순(정순, 가나다.., abc..., 1234..)으로 정렬합니다.


모바일 버전으로 보기