학습목표 학습목표 관계 데이터베이스에서 데이터 조작에 사용되는 명령어(DML)는 삽입(INSERT), 삭제(DELETE), 수정(UPDATE), 검색(SELECT) 이 있는데 이 중 사용 빈도가 가장 높은 것이 데이터의 검색에 사용되는 SELECT문 이며 이 명령문은 다양한 옵션과 기능이 있으므로 본 장에서는 여러 가지 예제를 통하여 SELECT문의 사용방법을 중점적으로 학습한다.
1. DML 개념 DML 개념 SELECT 테이블에서 기존의 레코드들을 검색 INSERT 테이블에 새로운 레코드를 삽입 데이터 조작어 (DML : Data Manipulation Language) 데이터베이스 스키마 내의 데이터 조작에 사용 데이터의 검색 , 삽입, 삭제, 수정에 사용. SQL의 3가지 언어 중 일반 사용자에게 가장 가까운 언어임. 응용 프로그램 내에서 데이터베이스를 조작하는 작업을 위해 고급프로그래밍 언어 (C, C++, 자바)와 같이 사용 가능 함. 데이터 조작어의 기능에 따른 분류 SELECT 테이블에서 기존의 레코드들을 검색 INSERT 테이블에 새로운 레코드를 삽입 DELETE 테이블에서 특정 레코드를 삭제 테이블에서 특정 레코드의 필드 값을 수정 UPDATE
2. 검색(SELECT 문) 검색(Select 문) <SELECT 문의 형식> 데이터 검색에 사용되는 명령어 SELECT 문은 여섯 개의 절로 구성 SELECT절과 FROM 절 필수 나머지는 선택사항 <SELECT 문의 형식> SELECT [DISTINCT] 필드1, 필드2, ... 필드N FROM 테이블1, 테이블2, ... 테이블N [WHERE 조건식 [ 중첩질의] ] [GROUP BY 필드1, 필드2, ... 필드N] [HAVING 조건식 ] [ORDER BY 필드1, 필드2,...필드N[ ASC| DESC]] ;
단순질의 3. 단순 질의 단순 질의는 레코드 제한이 없는 질의로 모든 항목 검색, 일부 항목 검색, 정렬(오름차순/내림차순), 중복제거, 상위 일부 검색 등이 있다.
단순질의 예제와 연습 테이블 예제 테이블 명 : 제품 테이블 구조 : 연습 테이블 명 : 고객 테이블 구조 : 필드명 품명 제품번호 품명 종류 계절 색상 단가 입고일자 형식 DECIMAL CHAR INT DATE 크기 30 20 5 연습 테이블 명 : 고객 테이블 구조 : 필드명 아이디 암호 이름 주민no 가입일자 성별 전화 우편번호 주소1 주소2 포인트 형식 char date int 크기 20 14 1 7 30
단순질의 3.1 모든 항목 검색 특정 테이블에서 모든 정보를 검색 ■ 실습 : “제품테이블에 속한 모든 필드의 내용을 검색하시오.” ■ 명령 : SELECT * FROM 제품 ■ 결과 : 연습 : 테이블 “고객”의 모든 내용을 검색하시오 정답 : SELECT * FROM 고객
■ 실습 : “제품테이블에서 제품번호, 품명, 단가 필드를 검색하시오.” 단순질의 3.2 일부 항목 검색 특정 테이블에서 특정 필드들만 검색 ■ 실습 : “제품테이블에서 제품번호, 품명, 단가 필드를 검색하시오.” ■ 명령 : SELECT 제품번호, 품명, 단가 FROM 제품 ■ 결과 : 연습 : 테이블 “고객”에서 아이디, 이름,포인트점수만 검색하시오 정답 : SELECT 아이디, 이름, 포인트 FROM 고객
단순질의 3.3 정렬(Order by) 검색 결과를 특정 필드의 값을 기준으로 정렬 오름차순과 내림차순 정렬 기본 정렬은 오름차순 정렬 두 개 이상의 항목을 이용한 이중 정렬 가능 정렬(이름 :오름차순) 소속 이름 나이 A반 이순신 23 B반 강미영 21 손성희 20 김영철 22 소속 이름 나이 B반 강미영 21 A반 김영철 22 손성희 20 이순신 23
1. 품명을 기준으로 정렬 -> 2. 품명, 단가항목 추출 단순질의 ■ 실습 : “ 제품테이블에서 품명을 기준으로 오름차순으로 정렬하여 품명, 단가를 검색하시오” ■ 명령 : SELECT 품명, 단가 FROM 제품 ORDER BY 품명 ■ 결과 : 1. 품명을 기준으로 정렬 -> 2. 품명, 단가항목 추출
단순질의 ■ 실습 : “제품테이블에서 먼저 종류를 기준으로 정렬한 뒤 다시 품명을 기준으로 정렬하여 종류, 제품번호, 품명, 단가의 값을 검색하시오. ” ■ 명령 : SELECT 종류, 제품번호, 품명, 단가 FROM 제품 ORDER BY 종류, 품명 ■ 결과 :
특정 값을 검색할 때 중복을 제거한다. 단순질의 3.4 중복 제거(Distinct) ■ 실습 : “ 제품테이블에서 제품의 종류를 검색하시오. ” ■ 명령 : SELECT DISTINCT 종류 FROM 제품 ■ 결과 : 연습 : 테이블 “고객”에서 우편번호의 종류를 검색하시오. 정답 : SELECT DISTINCT 우편번호 FROM 고객
대상 데이터 중에서 상위 또는 하위 몇 개 데이터만 검색 단순질의 3.5 상위 몇 개 검색(Top) 대상 데이터 중에서 상위 또는 하위 몇 개 데이터만 검색 ■ 실습 : “제품테이블에서 가장 최근에 입고된 신상품 5개의 품명, 단가, 입고일자를 검색하시오” ■ 명령 : SELECT TOP 5 품명, 단가, 입고일자 FROM 제품 ORDER BY 입고일자 DESC ■ 결과 : 연습 : 테이블 “고객”에서 포인트가 가장 적은 고객 10명을 검색하시오. 정답 : SELECT TOP 10 * FROM 고객 ORDER BY 포인트
4. 조건 질의 조건 질의 AND 비교연산자와 논리연산자,특수연산자, 수식 등을 사용 비교연산자와 논리연산자,특수연산자, 수식 등을 사용 레코드 제한을 적용한 검색으로 where 절 사용 ■ 비교 연산자의 종류 : >, <, =, >=, <=, <> ■ 논리 연산자의 종류 : AND, OR, NOT 소속 이름 나이 B반 손성희 20 A반 김영철 21 소속 이름 나이 A반 이순신 23 B반 강미영 22 손성희 20 김영철 21 조건(나이<=21) 소속 이름 나이 A반 이순신 23 김영철 21 조건(소속<>’B반’) 조건(소속=’B반’) AND 조건(나이>=22) 소속 이름 나이 B반 강미영 22
조건 질의 4.1 비교연산자 사용 ■ 실습 : “제품테이블에서 단가가 200000 보다 큰 제품의 품명, 단가, 계절을 검색하시오. “ ■ 명령 : SELECT 품명, 단가, 계절 FROM 제품 WHERE 단가 > 200000 ■ 결과 : 단가가 20000 보다 큰 제품들만 뽑아서 품명, 단가, 계절 필드 값을 출력한다
조건 질의 ■ 실습 : “ 제품테이블에서 입고일자가 ‘2004-09-05’ 이전인 제품의 제품번호,품명,단가, 입고일자를 검색하시오” ■ 명령 : SELECT 제품번호, 품명, 단가, 입고일자 FROM 제품 WHERE 입고일자 < ‘2004-09-05’ ■ 결과 : 연습 : 테이블 “고객”의 내용 중 포인트가 500이하인 고객을 모두 검색하시오 정답 : SELECT * FROM 고객 WHERE 포인트<= 500
조건 질의 ■ 실습 : “제품테이블에서 종류가 ‘정장’ 인 제품의 제품번호, 종류, 품명을 검색하시오.“ ■ 실습 : “제품테이블에서 종류가 ‘정장’ 인 제품의 제품번호, 종류, 품명을 검색하시오.“ ■ 명령 : SELECT 제품번호, 종류, 품명 FROM 제품 WHERE 종류=‘정장’ ■ 결과 : 연습 : 테이블 “고객”의 내용 중 포인트가 100000점에 해당하는 고객의 아이디,이름, 포인트를 출력하시오 정답 : SELECT 아이디, 이름 , 포인트 FROM 고객 WHERE 포인트=100000
■ 실습 : “ 제품테이블에서 종류가 단가가 250000원 이상 인 제품의 조건 질의 ■ 실습 : “ 제품테이블에서 종류가 단가가 250000원 이상 인 제품의 모든 정보를 검색하시오 ” ■ 명령 : SELECT * FROM 제품 WHERE 단가 >= 250000 ■ 결과 : 연습 : 테이블 “고객”에서 성별이 “F”인 고객의 아이디,이름을 출력하시오 정답 : SELECT 아이디, 이름 FROM 고객 WHERE 성별 = ‘F’
조건 질의 ■ 실습예제 :”제품테이블에서 계절이 '동‘ 이 아닌 제품의 제품번호, 품명, 단가, 계절을 검색하시오 “ ■ 명령 : SELECT 제품번호, 품명, 단가, 계절 FROM 제품 WHERE 계절<> '동‘ ■ 결과 : 연습 : 테이블 “고객”에서 포인트가 0이 아닌 고객의 아이디,이름, 포인트를 출력하시오 정답 : SELECT 아이디, 이름, 포인트 FROM 고객 WHERE 포인트 <> 0
조건 질의 4.2 논리 연산자 사용 AND OR ① AND : 2개 이상의 조건을 모두 만족하는 데이터 검색 ③ NOT : 지정한 조건을 만족하지 않는 레코드들만 검색 소속 이름 나이 A반 이순신 23 B반 강미영 22 손성희 20 김영철 21 조건(소속=’A반’) 소속 이름 나이 A반 이순신 23 AND 조건(나이>=22) 소속 이름 나이 A반 이순신 23 B반 강미영 22 김영철 21 조건(소속=’A반’) OR 조건(나이>=22)
조건 질의 ■ 실습 : “ 제품테이블에서 계절이 ‘춘’ 이고 단가가 100000이하인 제품의 제품번호, 품명, 단가, 계절을 검색하시오. “ ■ 명령 : SELECT 제품번호, 품명, 단가, 계절 FROM 제품 WHERE 단가 <= 100000 AND 계절 = '춘‘ ■ 결과 : 계절 = ‘춘’ 인 제품 단가<100000 인 제품 AND : 위의 결과를 모두 만족하는 제품
정답 : SELECT * FROM 고객 WHERE 성별= ‘F’ OR 가입일자 >= ‘2004-01-01’ 조건 질의 ■ 실습 : “ 제품테이블에서 계절이 ‘춘’ 또는 ’추‘ 에 해당하는 제품의 품명, 계절, 단가를 검색하시오.“ ■ 명령 : SELECT 제품명, 계절, 단가 FROM 제품 WHERE 계절='춘‘ OR 계절 = '추’ ■ 결과 : 연습 : 테이블 “고객”에서 성별이 ‘F’이거나 가입일자가 ‘2004-01-01’이후인 고객을 모두 출력하시오. 정답 : SELECT * FROM 고객 WHERE 성별= ‘F’ OR 가입일자 >= ‘2004-01-01’
조건 질의 ■ 실습 : “ 제품테이블에서 단가가 50000에서 300000원 사이에 속하지 않는 제품의 모든 정보를 검색하시오. “ ■ 명령 : SELECT * FROM 제품 WHERE NOT (단가 >= 50000 and 단가 <= 300000); ■ 결과 :
② BETWEEN : 특정 범위 내에 속하는 필드들 검색 조건 질의 4.3 특수연산자 사용 ① LIKE, % : 부분 문자열이 일치하는 필드들 검색 ② BETWEEN : 특정 범위 내에 속하는 필드들 검색 ③ IN : 주어진 조건 값들 중 하나 이상의 값과 일치하는 데이터 검색 소속 이름 나이 A반 이순신 23 B반 김미영 22 손성희 20 김영철 21 소속 이름 나이 B반 김미영 22 A반 김영철 21 LIKE(김%) BETWEEN (나이20~22) 소속 이름 나이 B반 김미영 22 손성희 20 A반 김영철 21 IN(나이23, 20, 18) 소속 이름 나이 A반 이순신 23 B반 손성희 20
조건 질의 ■ 실습 :”제품테이블에서 품명이 ‘점퍼‘로 끝나는 제품의 품명, 단가를 검색하시오. ” ■ 명령 : SELECT 품명, 단가 FROM 제품 WHERE 품명 LIKE '%점퍼‘ ■ 결과 : 연습 : 테이블 “고객”의 내용 중 이름이 “김”씨에 해당하는 고객의 아이디, 이름, 주소1 필드를 출력하시오 정답 : SELECT 아이디, 이름, 주소1 FROM 고객 WHERE 이름 LIKE ‘김%’;
조건 질의 ■ 실습 :” 제품테이블에서 단가가 50000 에서 100000 범위의 값인 제품의 품명, 단가, 종류를 검색하시오. ” ■ 명령 : SELECT 품명, 단가, 종류 FROM 제품 WHERE 단가 BETWEEN 50000 AND 100000 ■ 결과 : 연습 : 테이블 “고객”의 내용 중 포인트가 5000에서 10000점 사이에 속하는 고객을 모두 출력하시오 정답 : SELECT * FROM 고객 WHERE 포인트 BETWEEN 5000 AND 10000
조건 질의 ■실습 :”제품테이블에서 종류가 ‘정장’ 이나 ‘코트’ 인 제품의 종류, 품명, 단가를 검색하시오. ” ■ 명령 : SELECT 종류, 품명, 단가 FROM 제품 WHERE 종류 IN ('정장’, ’코트’); ■ 결과 : 연습 : 테이블 “고객”의 내용 중 우편번호가 ‘600-01’, ‘500-07’, ‘500-13’에 해당하는 고객의 아이디, 성명, 우편번호를 출력하시오 정답 : SELECT 아이디, 성명, 우편번호 FROM 고객 WHERE 우편번호 IN(‘600-01’,’500-07’,’500-13’)
조건 질의 4.4 수식 사용 산술연산자, 상수, 열 이름 등에 수식을 적용하여 검색 4.4 수식 사용 산술연산자, 상수, 열 이름 등에 수식을 적용하여 검색 ■ 실습 : “ 제품테이블에서 품명, 단가와 단가를 10% 인상한 값을 ‘단가인상’란 이름으로 검색하시오. ” ■ 명령 : SELECT 품명, 단가, 단가*1.1 as 단가인상 FROM 제품 ■ 결과 : 연습 : 테이블 “고객”에서 포인트를 각각 300점을 가산하여 아이디,이름, 포인트, 추가포인트를 검색하시오 정답 : SELECT 아이디,이름, 포인트, 포인트+300 AS 추가포인트 FROM 고객
WHERE (입고일자 – ‘2004-09-01’) > 30 조건 질의 ■ 실습 : “ 제품테이블에서 ‘2004-09-01’ 이후에 입고된 제품 중 30일이 지난 제품을 검색하시오. ■ 명령 : SELECT * FROM 제품 WHERE (입고일자 – ‘2004-09-01’) > 30 ■ 결과 : 연습 : 오늘을 기준으로 가입한지 30일이 지난 고객의 이름, 전화, 포인트를 출력하시오 정답 : SELECT 이름, 전화, 포인트 FROM 고객 WHERE (GETDATE() – 가입일자) > 30
조건 질의 ■ 실습 : “ 종류가 ‘바지’인 제품 중에서 품명과 색상을 하나로 하여 품명+색상, 단가를 검색하시오. ” ■ 명령 : SELECT 품명+색상, 단가 FROM 제품 WHERE 종류 = ‘바지’ ■ 결과 : 연습 : ’고객’테이블에서 이름, 주소1+주소2의 값을 주소로 하여 출력하시오. 정답 : SELECT 이름, 주소1+주소2 AS 주소 FROM 고객
조건 질의 4.5 NULL 항목 검색 항목에 값이 주어지지 않는 데이터 검색 ■ 실습 : “ 제품테이블에서 단가나 색상이 주어지지 않은 항목이 있으면 검색하시오. ” ■ 명령 : SELECT * FROM 제품 WHERE 단가 IS NULL OR 색상 IS NULL ■ 결과 : 연습 : ‘고객’ 테이블에서 주소1 이나 주소2가 없는 고객을 검색하시오. 정답 : SELECT * FROM 고객 WHERE 주소1 IS NULL OR 주소2 IS NULL
5. SQL의 함수 SQL의 함수 종류 함수명 의미 자료형 변환 CONVERT 문자, 숫자, 날짜 등 다양한 자료형을 원하는 다른 자료형으로 변환해 줌 숫자 함수 ABS 절대값 RAND 0과 1 사이의 임의 값 SIGN 양수, 음수, 0 문자 CHAR ASCII 코드에 해당하는 문자 LEFT/RIGHT 문자열의 왼/오른쪽 지정된 수의 글자 REPLACE 주어진 문자열로 치환 STR 숫자를 지정한 형식의 문자로 변환 날짜 GETDATE 현재 날짜와 시간 반환 DAY/MONTH/YEAR 날짜에서 일/월/년 반환 DATEADD 날짜에 주어진 값을 더함
SQL의 함수 5.1 문자함수 ■ 실습 :“종류가 ‘바지’인 제품 중 품명과 색상을 하나로 하여 품명+색상, 단가를 검색하시오. 단, 함수를 사용하여 출력을 보기 좋게 하시오 ” ■ 명령 : SELECT RTRIM(품명) + RTRIM(색상) AS 제품명, 단가 FROM 제품 WHERE 종류 = ‘바지’ ■ 결과 : 연습 : ‘고객’ 테이블에서 고객의 이름과 생년월일을 구하시오. (참고:주민번호를 이용해 생년월일을 구함) 정답 : SELECT 이름, SUBSTRING(주민번호, 1, 6) AS 생년월일 FROM 고객
SQL의 함수 5.2 숫자함수 ■ 실습 :제품테이블의 모든 제품의 단가를 2.5% 인상하되 100단위까지 반올림하여 품명, 종류, 단가를 출력하시오. ■ 명령 : SELECT 품명, 종류, ROUND(단가*1.025, -2) AS 인상단가 FROM 제품 ■ 결과 : 연습 : 1000 이하의 임의의 정수를 출력하시오. 정답 : SELECT STR(RAND( )*1000, 3, 0)
SQL의 함수 5.3 날짜함수 ■ 실습 : 오늘부터 100일째 되는 날을 구하시오. 5.3 날짜함수 ■ 실습 : 오늘부터 100일째 되는 날을 구하시오. ■ 명령 : SELECT DATEADD(DD, 100, GETDATE()) AS ‘100일째 되는 날’ ■ 결과 : 연습 : ‘고객’ 테이블에서 가입한지 1년이 된 고객의 정보를 검색하시오. 정답 : SELECT * FROM 고객 WHERE YEAR(GETDATE()) - YEAR(가입일자) = '1'
SQL의 함수 5.4 형 변환함수 ■ 실습 : 제품 테이블의 품명과 단가를 검색하되 단가 뒤에 모두 ‘원’ 이 붙은 형태로 출력하라. ■ 명령 : SELECT 품명, CONVERT(CHAR(10), 단가) + ‘원’ AS 금액 FROM 제품 ■ 결과 : 연습 : 고객의 주민등록 번호에서 출생년도와 예상학번을 찾아 출력하시오 정답 : SELECT 성명, LEFT(주민번호,2) AS 출생년도, CONVERT(INT, LEFT(주민번호,2)) + 1919 AS 예상학번 FROM 고객
답: 검색(또는 조회) 답: FROM 단원 요약 단원요약 1 ★ 데이터 조작어 (DML : Data Manipulation Language): DML은 데이터베이스 스키마 내의 데이터 조작에 사용되며, 데이터의 , 삽입, 삭제, 수정에 사용된다. 대화식으로 질의를 작성한 것을 SQL이라고 한다. ? 답: 검색(또는 조회) 단원요약 2 ★ 검색질의: SELECT문에서 SELECT절과 절은 반드시 사용 해야 하며, 기타 WHERE, GROUP BY, ORDER BY절 및 논리/관계/특수연산자, 그룹함수, 수식사용은 같은 선택사항은 필요한 경우에만 사용한다. ? 답: FROM
답: WHERE 답: LIKE, GETDATE() 단원 요약 단원요약 3 ★ 검색질의에서 특정 조건을 만족하는 데이터만을 검색하고자 할 때에 SELECT문의 절에 관계연산자( >, >=, <, <=, =,<> )를 추가하여야 하며, 2개 이상의 관계연산자를 사용하는 경우에는 논리연산자(AND, OR, NOT)를 함께 사용하여야 한다. ? 답: WHERE 단원요약 4 ★ 검색질의에서 수식을 사용하거나 특수 연산자를 사용하여 검색할 수 있다. 는 부분 문자열의 검색을 위해서 사용된다. 데이터의 형 변환이나 작업 결과의 재사용을 위해 숫자, 문자, 날짜 함수 등이 사용된다. 오늘의 날짜를 얻기 위해서 함수 를 사용한다. ? ? 답: LIKE, GETDATE()