..

Search

12) SELECT

SELECT


SELECT

MySQL에서는 SELECT 문을 사용하여 테이블의 레코드를 선택할 수 있습니다.

문법

SELECT 필드이름

FROM 테이블이름

[WHERE 조건]

 

FROM 절은 레코드를 선택할 테이블의 이름을 명시합니다.

해당 테이블에서 선택하고 싶은 필드의 이름을 SELECT 키워드 바로 뒤에 명시하면 됩니다.

이때 WHERE 절을 사용하면, 선택할 레코드의 조건을 좀 더 상세히 설정할 수 있습니다.


테이블의 모든 필드 선택

SELECT 문과 함께 별표(*) 기호를 사용하면, 해당 테이블의 모든 필드를 선택할 수 있습니다.

문법

SELECT *

FROM 테이블이름

 

이 방식은 해당 테이블의 '모든 필드'를 선택해야 할 경우에 유용하게 사용할 수 있습니다.

 

다음 예제는 Reservation 테이블의 모든 필드를 선택하는 예제입니다.

예제

 

SELECT *

FROM Reservation;

 

코딩연습 ▶ 

실행 결과

 

MySQL 수업 예제에서 사용되는 Reservation 테이블과 Customer 테이블은 다음과 같습니다.


특정 조건의 레코드 선택

SELECT 문과 함께 WHERE 절을 사용하면, 검색할 레코드의 조건을 설정할 수 있습니다.

이러한 WHERE 절은 테이블의 크기가 매우 크거나, 특정 조건에 맞는 레코드만을 선택하고 싶을 때 유용하게 사용됩니다.

 

다음 예제는 Name 필드의 값이 '홍길동'인 레코드만을 선택하는 예제입니다.

예제

 

SELECT *

FROM Reservation

WHERE Name = '홍길동';

 

코딩연습 ▶ 

실행 결과

 

이러한 WHERE 절에는 여러 개의 조건을 같이 명시할 수도 있습니다.

이때 여러 개의 조건은 AND나 OR 연산자를 이용하여 연결합니다.

 

다음 예제는 ID 값이 3 이하이면서 ReserveDate 필드의 값이 2016년 2월 1일 이후인 레코드만을 선택하는 예제입니다.

예제

 

SELECT *

FROM Reservation

WHERE ID <= 3 AND ReserveDate > '2016-02-01';

 

코딩연습 ▶ 

실행 결과

 

MySQL에서 사용할 수 있는 연산자에 대한 더 자세한 사항은 MySQL 연산자 수업에서 확인할 수 있습니다.

 

MySQL 연산자 수업 확인 =>


특정 필드만을 선택

SELECT 키워드 다음에 필드 이름을 명시하면, 해당 테이블의 특정 필드만을 불러올 수 있습니다.

이때 쉼표(,)를 사용하여 여러 개의 필드 이름을 한 번에 명시할 수 있습니다.

 

다음 예제는 Reservation 테이블에서 Name 필드와 RoomNum 필드만을 선택하는 예제입니다.

예제


SELECT Name, RoomNum

FROM Reservation;

 

코딩연습 ▶ 

실행 결과

 

이때에도 WHERE 문을 사용하여 특정 조건을 만족하는 레코드만을 선택할 수 있습니다.

 

다음 예제는 ID 값이 3 이하이면서 ReserveDate 필드의 값이 2016년 2월 1일 이후인 레코드의 Name 필드와 ReserveDate 필드만을 선택하는 예제입니다.

예제

 

SELECT Name, ReserveDate 

FROM Reservation

WHERE ID <= 3 AND ReserveDate > '2016-02-01';

 

코딩연습 ▶ 

실행 결과


중복되는 값 제거

만약 같은 필드에 중복되는 값을 가지는 레코드가 있다면, DISTINCT 키워드를 사용하여 그 값이 한 번만 선택되도록 설정할 수 있습니다.

 

다음 예제는 Reservation 테이블에서 Name 필드를 선택하는 예제입니다.

이때 DISTINCT 키워드를 사용했기 때문에 중복된 값은 단 한 번만 선택됩니다.

예제


SELECT DISTINCT Name

FROM Reservation;

 

코딩연습 ▶ 

실행 결과


선택한 결과의 정렬

SELECT 문으로 선택한 결과를 ORDER BY 절을 사용하여 정렬할 수 있습니다.

ORDER BY 절의 기본 설정은 오름차순이며, ASC 키워드를 사용하여 직접 오름차순을 명시할 수도 있습니다.

 

다음 예제는 Reservation 테이블의 모든 레코드를 ReserveDate 필드의 오름차순으로 정렬하여 선택하는 예제입니다.

예제

 

SELECT * 

FROM Reservation

ORDER BY ReserveDate;

 

코딩연습 ▶ 

실행 결과

 

만약 내림차순으로 정렬하고자 할 때는 맨 마지막에 DESC 키워드를 추가하면 됩니다.

 

다음 예제는 Reservation 테이블의 모든 레코드를 ReserveDate 필드의 내림차순으로 정렬하여 선택하는 예제입니다.

예제

 

SELECT * 

FROM Reservation

ORDER BY ReserveDate DESC;

 

코딩연습 ▶ 

실행 결과

 

PHP에서 문자열 타입을 데이터로 가지는 필드를 정렬할 때는 기본적으로 대소문자를 구분하지 않습니다.

하지만 대소문자까지 구분하여 정렬하고 싶을 때는 ORDER BY BINARY 절을 사용하면 됩니다.

 

또한, 여러 필드의 데이트를 쉼표(,)를 사용하여 한 번에 정렬할 수도 있습니다.

 

다음 예제는 Reservation 테이블의 모든 레코드를 먼저 ReserveDate 필드의 내림차순으로 정렬한 뒤에, 또다시 RoomNum 필드의 내림차순으로 정렬하여 선택하는 예제입니다.

예제

 

SELECT *

FROM Reservation

ORDER BY ReserveDate DESC, RoomNum ASC;

 

코딩연습 ▶ 

실행 결과


별칭(alias)을 이용한 처리

MySQL에서는 테이블과 필드에 임시로 별칭(alias)을 부여하고, 해당 별칭을 SELECT 문에서 사용할 수 있습니다.

이러한 별칭(alias)은 복잡한 테이블 이름이나 필드의 이름을 좀 더 읽기 쉽도록 만들어 줍니다.

문법

1. SELECT 필드이름 AS 별칭

FROM 테이블이름;

 

2. SELECT 필드이름

FROM 테이블이름 AS 별칭;

 

위의 첫 번째 문법은 해당 필드에 새로운 별칭을 부여하고, 두 번째 문법은 해당 테이블에 새로운 별칭을 부여하는 문법입니다.

 

다음 예제는 Reservation 테이블의 RoomNum 필드와 Name 필드에 하나의 새로운 별칭을 부여하는 예제입니다.

예제

 

SELECT ReserveDate, CONCAT(RoomNum, " : ", Name) AS ReserveInfo

FROM Reservation;

 

코딩연습 ▶ 

실행 결과

 

CONCAT() 함수는 인수로 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환하는 함수입니다.

연습문제