기본적인 질의문 (SELECT)
기본적인 질의문
(형식)
SELECT 컬럼목록 FROM 테이블명
SELECT는 테이블에서 원하는 컬럼을 지정하여 데이터를 불러오는 명령입니다. 참고로 SELECT와 UPDATE는 작업 대상이 컬럼 단위이며, INSERT와 DELETE는 로우 단위가 작업 대상입니다. SELECT, INSERT, UPDATE, DELETE를 일컬어 데이터 관리어(DML; Data Management Language)라고 합니다.
SELECT문에서 컬럼 목록은 컬럼을 쉼표(,)로 구분하며 컬럼 목록외에도 수식을 이용하여 계산된 결과를 출력할 수 있습니다.
(사용예)
SELECT * FROM board_data -- board_data 테이블의 모든 데이터를 추출
SELECT title FROM board_data -- board_data 테이블에서 title 컬럼의 데이터들만 추출
SELECT hitcnt + 10 FROM board_data
-- hitcnt 컬럼의 데이터에 일괄적으로 10을 더하여 추출, hitcnt 컬럼의 값은 불변별칭(Alias)
마지막 예에서 컬럼의 이름이 "hitcnt + 1"으로 표시되었을 것입니다. 이런 이름의 컬럼 이름은 JDBC를 이용하여 자바에서 사용하기에 적합하지 않기 때문에 다른 이름이 필요할 것입니다. 이렇게 다른 이름을 컬럼 이름으로 표시하는 기능을 "알리아스"라고 합니다.
(사용예)
SELECT hitcnt + 10 AS result FROM board_data
-- "hitcnt + 10"이라는 컬럼명 대신 "result"가 표시SELCT * FROM board_data AS brd;
-- "board_data"라는 테이블 이름을 "brd"라는 알리아스로 사용테이블에도 알리아스를 지정할 수 있습니다. 테이블 알리아스는 조인(JOIN) 연산에서 자주 볼 수 있습니다.
추출결과 정렬하기
(형식)
SELECT 컬럼 목록
FROM 테이블명 ORDER BY 컬럼명 [ASC | DESC]컬럼명을 기준으로 오름차순(ASC)과 내림차순(DESC)으로 추출을 합니다. 디폴트로 오름차순을 하기 때문에 ASC는 생략합니다. 2개 이상 컬럼을 기준으로 정렬하기를 원할 경우 쉼표(,)로 구분하여 입력합니다.
(사용예)
SELECT * FROM board_data ORDER BY writer ASC, no DESC;
작성자를 기준으로 오름차순하여 출력하고 같은 이름일 경우 번호순으로 내림차순하여 출력합니다.
조건절을 이용한 데이터 추출
WHERE절을 사용하여 컬럼을 통째로 가져오지 않고 일부를 걸러낼 수 있습니다.
(형식)
SELECT 컬럼 목록 FROM 테이블명 WHERE 조건문
비교 연산자와 논리 연산자를 이용하여 조건문을 작성할 수 있습니다.
비교 연산자
값을 비교하여 조건을 만족하면 "1"을 만족하지 않으면 "0"을 출력합니다.
= (같다)
!= 혹은 <> (같지않다)
> (크다)
>= (크거나 같다)
< (작다)
<= (작거나 같다)
<=> (NULL과 비교)
일반적으로 NULL과의 비교는 무조건 NULL이 출력되는데 이 연산을 사용하면 NULL인지를 비교할 수 있다.
(사용예)
SELECT 1 <=> 1, 1 <=> NULL, NULL <=> NULL;
IS NULL (NULL인지 확인)
(사용예)
SELECT seq, title, writer, wdate FROM board_data WHERE writer IS NULL ORER BY no DESC;
writer 컬럼의 값이 NULL인 로우들만 출력합니다.
BETWEEN 최소값 AND 최대값 (최소값에서 최대값 사이의 구간)
IN (값1, 값2, ...) (집합에 포함된 값 중 하나 이상 포함)
LIKE (와일드카드 문자인 "%"와 "_"를 사용하여 비교)
논리 연산자
NOT 혹은 !
AND 혹은 &&
두 결과가 모두 "1"일 경우만 "1"을 출력합니다. 결과 중 NULL이 있으면 NULL을 출력합니다.
OR 혹은 ||
두 결과중 하나 이상이 "1"인 경우 "1"을 출력합니다.
XOR
두 결과가 같지 않을 경우 "1", 같을 경우 "0"을 출력합니다.
그룹으로 묶어서 출력하기
출력된 컬럼 값의 중복을 허용하지 않도록 하기 위해 "DISTINCT" 예약어를 사용하여 출력합니다. 출력 순서를 기준로 첫 번째 컬럼에 대해 한 번만 사용할 수 있습니다.
(사용예)
SELECT DISTINCT sido, gugun FROM ziptable;
GROUP BY절
데이터를 출력하다 보면 각 시도별로 구군이 몇 개씩 있는지를 알고 싶을 경우가 있습니다. 이를 위해 COUNT()와 같은 그룹함수를 제공하며 그룹함수와 함께 그룹별로 결과를 출력할 수 있도록 GROUP BY절을 제공합니다.
(사용예)
SELECT sido, COUNT(gugun)
FROM ziptable
WHERE sido IN ('서울', '인천')
GROUP BY sido;HAVING절
GROUP BY절에 의해 그룹으로 묶인 결과물 중 그룹 함수 등을 이용한 값에 대한 조건이 필요할 경우 사용합니다.
(사용예) 부서(depid)별 평균 급여(salary) 중 3500이상인 부서
SELECT depid, AVG(salary)
FROM staff
GROUP BY depid
HAVING AVG(salary) >= 3500;그룹 함수
[주요 그룹 함수들] 함수 설명 AVG() 지정된 컬럼 값들의 평균을 리턴 COUNT(DISTINCT) 중복되지 않는 컬럼 값을 갖는 행의 수를 리턴 COUNT() 컬럼을 지정할 경우는 컬럼의 값이 NULL이 아닌 인수들의 행 수를 리턴하고 "*"를 지정할 경우는 모든 행 수를 리턴 GROUP_CONCAT() 지정된 컬럼에서 NULL이 아닌 값을 쉼표(,)로 연결하여 출력 MAX(DISTINCT)
MIN(DISTINCT)
MAX()
MIN()컬럼에서 중복되지 않는 가장 긴 문자열을 리턴, 숫자 값의 경우 최대 최소값 리턴 STD() 컬럼 값들의 표준 편차 리턴 SUM() 컬럼 값들의 합을 리턴
'연구개발 > MYSQL' 카테고리의 다른 글
MySQL 함수 - 날짜 관련 함수 (0) | 2013.01.11 |
---|---|
MySQL 함수 - 수학 함수 (0) | 2013.01.11 |
MySQL 함수 - 문자열 관련 함수들 (0) | 2013.01.11 |
테이블의 생성과 변경 (0) | 2013.01.11 |
mysql 계정생성 권한설정 (0) | 2013.01.04 |