쿼리

by 김현석

쿼리(Query, 질의)

- 쿼리는 테이블이나 다른 쿼리를 대상으로, 사용자가 원하는 데이터를 추출 및 조합해서 사용 가능하다.

- 쿼리는 테이블의 내용을 검색하는 선택 쿼리와 실제 테이블을 조작하는 실행 쿼리가 있다.

- 쿼리를 실행하기 위해 SQL문을 사용


SQL과 친행지기

1. 정렬

SELECT [DISTINCT] 필드명 --> distinct는 중복 데이터를 제외시키는 조건자

FROM 테이블명(쿼리명)

WHERE 조건식

ORDER BY 필드명 정렬방식;

---> 오름차순: 생략 또는 Asc

---> 내림차순: Desc

2. 그룹

SELECT [DISTINCT] 필드명

FROM 테이블명(쿼리명)

WHERE 조건식

GROUP BY 필드명

HAVING 그룹조건;



학생(필드) 수상명단(필드) <학생> 테이블에서 아래의 예제를 작성하시오

학번(키) 학번 1) 학번, 주민등록번호 검색

이름 이름 SELECT 학번, 주민등록번호

주민등록번호 학년 FROM 학생;

학년 2) 모든 필드를 검색

국어 SELECT * -> *는 모든 필드 검색 시 사용

영어 FROM 학생;

수학 3) 이름을 검색하되, 중복 레코드는 한번만 표시

주소 SELECT DISTINCT 이름 ---> 중복 데이터를 제외시키는 DISTINCT 사용

FROM 학생;

4) 국어, 수학, 영어 점수의 합을 '총점'이라는 필드로 표시해서 검색

SELECT (국어+수학+영어) AS총점 -> 어떤 필드명으로 지정시 AS

FROM 학생;

5) 학년이 2학년인 학생의 이름, 주민등록번호 검색

SELECT 이름, 주민등록번호

FROM 학생

WHERE 학번=2;

6) 국어 점수가 80점 이상인 학생의 학번, 이름을 검색하되 학년을 기준으로 오름차순 정렬

SELECT 학번, 이름

FROM 학생

WHERE 국어>=80

ORDER BY 학년 Asc;

7) 국어점수가 60점 이상인 학생의 모든 필드를 검색하고, 학년을 기준으로 오름차순, 학년이 같을 때는 국어 점수를 기준으로 내림차순

SELECT *

FROM 학생

WHERE 국어 >=60

ORDER BY 학년 Asc, 국어 Desc

8) 학년, 학생 수 계산 (학생수는 '학번' 필드를 이용하고, 필드명은 '학생수')

SELECT 학년, COUNT(학번) AS 학생수

FROM 학생

GROUP BY 학년; ---> GROUP BY 절을 이용하면 개수, 합계와 같은 집계 함수를 사 용해서 요약값을 생성할 수 있다.

9) 영어점수가 50점 이상인 학생의 학년, 학생 수를 계산

(학생 수는 '학번' 필드를 이용하고, 필드명은 '학생수')

SELECT 학년, COUNT(학번) AS 학생수

FROM 학생

WHERE 영어 >=50

GROUP BY 학년;

10) 수학점수가 50점 이상인 학생의 학년별 학생수가 2명 이상인 학년만 검색

(학생수는 '학번' 필드를 이용하고, 필드명은 '학생수')

SELECT 학년, COUNT(학번) AS 학생수

FROM 학생

WHERE 수학 50>=

GROUP BY 학년

HAVING COUNT(학번) >=2; -> GROUP BY 절에 대한 조건식은 HAVING 절을 사용한다. 학년별로 그룹을 짜기 위해서 학년으로 GROUP BY 묶고 그 밑에 그 그룹의 조건인 HAVING 을 쓴다.

11) 주소가 '서울', '부산', '광주' 중 하나인 학생의 이름, 주소를 검색

SELECT 이름, 주소

FROM 학생

WHERE 주소 IN ("서울", "부산", "광주"); ---> IN을 쓰면 이중 하나인 것으로 나옴 OR 결과와 동일하게 나옴 (=== WHERE 주소="서울" OR 주소="부산" OR 주소="광주";)

12) 수학점수가 70점 이상 90점 이하인 학생의 이름, 수학, 영어 점수를 검색

SELECT 이름, 수학, 영어

FROM 학생

WHERE 수학 BETWEEN 70 AND 90; (===WHERE 수학 >=70 AND 수학 <=90;)

13) 지역이 '제주도'와 '울릉도'를 제외한 학생의 모든 필드를 검색

SELECT *

FROM 학생

WHERE 주소 NOT IN ("제주도","울릉도");

14) 이름이 "김"으로 시작하는 학생의 이름과 학번을 검색

SELECT 이름, 학번

FROM 학생

WHERE 이름 LIKE "김*";


하위쿼리

- 쿼리(질의) 안에 작성한 SELECT문이다

15) <학생> 테이블에서 수상내역이 있는 학생의 학번, 이름을 검색(<수상명단> 테이블에 존재 하는 학생)

SELECT 학번, 이름

FROM 학생

WHERE 학번 IN (SELECT 학번 IN 수상내역);


* 함수(Access에서 자주 사용하거나 Excel과 모양이 다른 함수)

NOW() -> 현재 날짜와 시간 표시

DATE() -> 현재 날짜 표시

TIME() -> 현재 시간 표시

LEFT()

RIGHT()

MID()

LCASE() -> 소문자로 변환 (엑셀에서는 lower())

UCASE() -> 대문자로 변화 (엑셀에서는 upper())

INSTR() -> (문자열1, 문자열2) exINSTR("APPLE","P")=2 문자열1에서 문자열 2가 나타나는 위치를 변환해줌

IIF() -> 조건 작성 (엑셀에서는 IF)

AVG() -> 평균

SUM()

COUNT() -> 문자든 숫자든 그냥 개수를 알려주는 함수( 엑셀에서는 숫자가 있는 셀의 갯수를 구해줬음)

MIN()

MAX()


***** COUNT(*): 레코드수

***** COUNT(필드명): 널(NULL) 값을 제외한 레코드

***** & 결합 연산자 EX. FULL_NAME LIKE "*" & "오"; =========FULL_NAME LIKE "*오";



조인(JOIN)

- 두개 이상의 테이블을 하나의 테이블처럼 연결하여 사용하기 위한 방법을 정의한 것

- 조인에 사용되는 필드의 데이터 형식은 동일하거나 호환되어야 한다.

- 관계가 설정되지 않은 두 테이블 간에도 조인을 수행할 수 있다.

내부조인왼쪽 외부 조인오른쪽 외부조인

조인된 필드가 일치하는 행만 표시 왼쪽 테이블에서는 모든 레코드를 포함하고, 오른쪽 테이블에서는 모든 레코드를 포함하고,

오른쪽 테이블에서는 조인된 필드가 일치하는 왼쪽 테이블에서는 조인된 필드가 일치하는 레코드만 표시

레코드만 표시

SELECT 필드명 SELECT 필드명 SELECT 필드명

FROM 테이블1 INNER JOIN 테이블2 FROM 테이블1 LEFT JOIN 테이블2 FROM 테이블1 RIGHT JOIN 테이블2

ON 테이블1.필드 = 테이블2.필드 ON 테이블1. 필드 = 테이블2. 필드 ON 테이블1. 필드 = 테이블2.필드


실행쿼리

1. 추가(INSERT) 쿼리

- 테이블에 레코드를 추가할 때 사용한다.

a. 값을 직접 지정하여 추가 b. 다른 테이블의 레코드를 추출하여 추가

INSERT INTO 테이블명(필드명1. 필드명2,...) INSERT INTO 테이블명(필드명1, 필드명2,...)

VALUES(필드값1, 필드값2,...) SELECT 필드명

FROM 테이블명

WHERE 조건;

- 여러 개의 레코드를 동시에 추가할 수 있지만, 한번에 하나의 테이블에만 추가할 수 있다.

- 레코드의 전체 필드를 추가할 때는 필드 이름을 생략할 수 있다.

2. 갱신(UPDATE) 쿼리

- 지정한 조건을 만족하는 레코드의 필드값을 변경한다.

UPDATE 테이블명

SET 필드명1= 값1, 필드명2 =값2,...

WHERE 조건;

3. 삭제(DELETE) 쿼리

- 지정한 조건을 만족하는 레코드를 삭제한다.

DELETE *

FROM 테이블명

WHERE 조건;

기타쿼리

1. 크로스탭 쿼리

- 엑셀의 피벗 테이블 형태와 유사해 데이터의 요약 정보를 볼 때 적합한 쿼리

- 열과 행 방향의 표 형태로 데이터를 집계할 수 있다.

- 열 머리글은 한 개만 지정할 수 있고, 행 머리글은 세 개까지 지정할 수 있다.

2. 매개 변수 쿼리

- 쿼리 실행 시, 매개 변수 대화 상자로 사용자에게 조건을 입력 받아 실행하는 쿼리

- 매개 변수를 적용할 필드의 조건행에 매개 변수 대화 상자에 표시할 텍스트를 대괄호로 묶어서 입력한다.

3. 통합(Union) 쿼리

- 성격이 유사한 두 개의 테이블이나 쿼리에서 데이터를 통합하여 하나의 테이블로 만드는 쿼리

- 중복되는 레코드는 하나만 기록된다.

- 두 테이블의 필드의 개수는 동일해야한다.

SELECT 필드명

FROM 테이블1

UNION SELECT 필드명

FROM 테이블2;


keyword
작가의 이전글테이블