PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 2. SQL 언어 | 다음 |
입력한 자료를 찾아보려면, 테이블을 질의해 보아야 하는데, 이것을 데이터베이스 용어로 쿼리라고 합니다. (주, 질의, 쿼리 같은 낯선 용어들이 쓰이지만, 여기서는 그냥 자료 조회라고 생각하고 넘어가면 됩니다) 이런 자료 조회를 할 때 사용하는 SQL 구문이 SELECT 구문입니다. 이 구문은 크게 세 부분으로 구성되는데, 첫번째는 원하는 자료의 칼럼들을 지정하고, 두번째는 그 칼럼들이 있는 테이블들 - from 절이라고 하고, 그 다음은 원하는 부분을 지정하는 조건절 - where 절이라고 합니다. 이 where 절은 선택적으로 사용됩니다. where 절이 생략되면 지정한 테이블의 모든 자료를 보여줍니다. 예제로 weather 테이블에 저장된 모든 자료를 보려면 다음과 같이 입력합니다.
SELECT * FROM weather;
여기서 * 문자는 "모든 칼럼"을 의미합니다. [1] 그래서, 아래 쿼리와 같은 결과를 보여줍니다:
SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
이 쿼리 결과는 다음과 같이 나올 것입니다:
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 rows)
물론 사용자가 직접 입력한 그 내용으로 말입니다. 그럼 다음 다른 예로:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
결과는:
city | temp_avg | date ---------------+----------+------------ San Francisco | 48 | 1994-11-27 San Francisco | 50 | 1994-11-29 Hayward | 45 | 1994-11-29 (3 rows)
각 도시의 일평균 기온을 구하는 방법입니다. 여기서 AS 예약어는 생략되어도 되고, 이것은 그 칼럼의 새로운 이름을 지정할 때 사용합니다.
쿼리 문장은 WHERE 절을 사용해서, 검색 결과의 조건을 지정할 수 있습니다. WHERE 절에 사용할 조건은 불린 조건(참이냐 거짓이냐) 들의 집합으로 구성됩니다. 일반적으로 불린 조건은 불린 연산자(AND, OR, NOT)를 이용해서, WHERE 절 전체의 조건을 구성합니다. 다음 예제는 San Francisco에서 비온 날을 찾는 구문입니다:
SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;
결과는:
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 (1 row)
출력 순서를 바꾸고 싶다면, 다음과 같이 정렬 조건을 추가합니다:
SELECT * FROM weather ORDER BY city;
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ Hayward | 37 | 54 | | 1994-11-29 San Francisco | 43 | 57 | 0 | 1994-11-29 San Francisco | 46 | 50 | 0.25 | 1994-11-27
이 예제에서 보듯이 위 결과의 정렬은 단지 도시 이름에 대해서만 정렬을 하지, 나머지 자료들 기준으로는 정렬하지 않습니다. 각 도시별로 기온 기준으로 다시 정렬 하려면 다음과 같이 합니다:
SELECT * FROM weather ORDER BY city, temp_lo;
같은 값에 대한 중복을 없애려면, 다음과 같이 합니다:
SELECT DISTINCT city FROM weather;
city --------------- Hayward San Francisco (2 rows)
다시, 이 쿼리의 결과에서 도시 이름별 정렬은 되지 않습니다. 그래서 정렬이 필요하다면, DISTINCT 조건과 함께, ORDER BY 절도 함께 사용해야 합니다: [2]
SELECT DISTINCT city FROM weather ORDER BY city;
[1] | SELECT * 구문은 임시로 조회할 때 유용하게 사용되지, 실재 응용 프로그램 내에서 사용할 때는 고려해야할 사항이 많습니다. 왜냐하면, 테이블의 칼럼이 있다가 없어지기도 하고, 그 칼럼이 바뀌기도 해서 원하는 결과가 항상 같을 수 없기 때문입니다. |
[2] | 몇 데이터베이스 시스템과, PostgreSQL 오래된 버전에서는 DISTINCT 조건을 사용하면 자동으로 그 칼럼에 대한 ORDER BY 조건이 적용되어 굳이 ORDER BY 절을 사용하지 않아도 되지만, 최근 PostgreSQL 버전에서는 DISTINCT 조건 만으로는 그 칼럼의 정렬을 보장하지 않습니다. |