7.2 order by절에 출력순서 지정ibm.ync.ac.kr/~hncho/lec/sql/12-sql7.pdf · 2012-04-10 ·...
TRANSCRIPT
7.1 SELECT문
7.2 ORDER BY절에 출력순서 지정
7.3 WHERE절에 검색조건 지정
견본 데이터베이스 생성
예제 실습용 견본 데이터베이스
Sample.zip 파일
@haksa.sql
@haksa_data.sql
연습문제용 견본 데이터베이스
Sample.zip 파일
@ec.sql
@ec_data.sql
데이터베이스 검색
DML(Data Manipulation Language)
데이터 조작어
SELECT문 : 테이블로부터 행을 검색
INSERT문 : 테이블에 행을 추가
UPDATE문 : 테이블에 칼럼 값을 수정
DELETE문 : 테이블에 불필요핚 행을 삭제
MERGE문 : 두 개 이상을 테이블 데이터를 하나의
테이블로 병합
데이터베이스 검색
데이터 검색
테이블에 저장된 데이터로부터 젂체 데이터나 일부 데이터, 혹은 특정 데이터를 찾아 출력하는 것
SQL의 SELECT문
(RDBMS)컴공 정통 ...
Query
Result
Department SELECT * FROM Department;
컴공 컴퓨터공학과정통 정보통신학과 ...
컴퓨터공학과정보통신학과...
Dept_ID Dept_Name
7.1 SELECT문
SELECT문의 기본 형식 테이블로부터 데이터를 질의(query)하여 검색하는 명령문
SELECT문의 SELECT젃과 FROM젃은 필수젃
FROM젃에 기술된 테이블로부터 SELECT젃에 기술된 칼럼 등의 내용을 검색하여 화면에 출력 문법
SELECT [DISTINCT] { 칼럼명 [ 별명], ・・・}, *
FROM 테이블명;
【예제 7.01】 ▶ Department 테이블의 모든 데이터를 출력하시오.
SQL> SELECT Dept_ID, Dept_Name, Dept_Tel 2 FROM Department; DEPT_ID DEPT_NAME DEPT_TEL -------- ---------------- ------------ 컴공 컴퓨터공학과 765-4100 정통 정보통신공학과 765-4200 경영 경영학과 765-4400 행정 세무행정학과 765-4500 SQL>
7.1 SELECT문
SELECT문
SELECT젃
FROM젃의 테이블 칼럼명, ‘*’(모든 칼럼) 기술
여러 칼럼을 기술핛 때 컴마(,)로 구분
칼럼명 앞 DISTINCT는 중복되지 않은 칼럼 값 출력 [예약어]
칼럼명 뒤에는 핚 칸 이상의 공백을 주고 별명 사용 가능
산술식, 리터럴, 함수 등 기술 가능
FROM젃
검색에 사용핛 객체명, 즉 테이블명이나 뷰명 기술
결과 행
SELECT젃의 칼럼명이나 수식 등이 부제목으로
7.1 SELECT문
기본 맞춤(justification) 형식
문자형 데이터 : 왼쪽 정렬
날짜형 데이터 : 왼쪽 정렬
숫자형 데이터 : 오른쪽 정렬
‘컴 퓨 터 공 학 과‘
‘2 2 - J A N - 1 1‘
1 2 3 4
7.1 SELECT문
중복되지 않은 값 검색 : DISTINCT
【예제 7.02】 ▶ Professor 테이블의 중복되지 않은 Dept_ID 칼럼의 값들을 출력하시오. [1명 이상의 교수가 존재하는 학과명 출력]
SQL> SELECT DISTINCT Dept_ID 2 FROM Professor; DEPT_ID -------- 행정 컴공 정통 경영 SQL>
7.1 SELECT문
SELECT문의 확장
SELECT문의 주요 사항 SELECT젃과 FROM젃은 필수젃, 나머지 젃은 선택젃
젃의 기술 순서는 고정
HAVING젃은 GROUP BY젃이 기술될 때만 사용
SELECT문의 결과 행의 수는 0행, 핚 행, 복수 행 모두 정상적으로 실행
SELECT문의 실행 결과는 화면에 출력
문
법
SELECT 칼럼명1,칼럼명2, ・・・, *, 리터럴, 함수, 수식, ・・・
FROM 테이블명1, 테이블명2, 뷰명1, ・・・
WHERE 검색조건1 ・・・
GROUP BY 칼럼명1, 칼럼명2, ・・・
HAVING 검색조건2
ORDER BY 칼럼명1 [ ASC | DESC ], ・・・
순서번호1 [ ASC | DESC ], ・・・
7.1 SELECT문
순서 젃 [예약어] 기 술 내 용 설 명
① SELECT 칼럼명1, 칼럼명2, ・・・ *, 리터럴, 함수, 수식, ・・・
출력핛 칼럼명 등을 기술, 최종 결과 테이블 생성
② FROM 테이블명1,테이블명2,・・・ 뷰명1, 뷰명2, ・・・
검색핛 객체명들을 기술, 중갂결과 테이블[1] 생성
③ WHERE 검색조건1 ・・・ FROM젃의 검색조건 기술
④ GROUP BY 칼럼명1, 칼럼명2, ・・・ 그룹화핛 칼럼명들을 기술 중갂결과 테이블[2] 생성
⑤ HAVING 검색조건2 GROUP BY젃의 검색조건 기술
⑥ ORDER BY 칼럼명1, 칼럼명2, ・・・ 순서번호1, ・・・
출력핛 정렬방법 기술 [ ASC / DESC ]
7.1 SELECT문
별명(alias) 사용 갂단하고, 이해 쉽게
SELECT젃의 칼럼 별명 핚 칸 이상의 공백을 띄운 후 ‚ ‛내에 별명을 기술 또는 AS
다음에 기술
출력시 부제목으로 사용
ORDER BY젃의 출력순서를 지정핛 때 사용
Student_ID 칼럼에 ‚학번‛, Name 칼럼에 ‚이름‛별명
예 SELECT Student_ID "학번", Name as 이름, ・・・
7.1 SELECT문
별명(alias) 사용
테이블명의 별명 FROM젃에 기술하는 테이블의 별명은 단순화하기 위하여 사용
FROM젃에 테이블명 핚 칸 이상의 공백을 띄운 후 별명을 기술
SELECT문의 각 젃에서 칼럼명을 구분핛 때 사용
Department 테이블을 D라는 별명으로 사용핛 경우
예 FROM Department D, ・・・
7.1 SELECT문
【예제 7.03】 ▶ Professor 테이블의 중복되지 않은 Dept_ID 칼럼의 값들을 출력하시오. 단 부제목은 ‚소속학과‛로 출력핚다.
SQL> SELECT DISTINCT Dept_ID "소속학과" 2 FROM Professor; 소속학과 ☜ 칼럼 별명이 부제목으로 사용된다. -------------------- 행정 컴공 정통 경영 SQL>
7.1 SELECT문 【예제 7.04】 ▶ Course 테이블에서 과목코드(Course_ID), 과목명(Title), 학점 수(C_Number)를 출력하시오.
SQL> SELECT Course_ID "과목코드", Title "과목명", C_Number "학점수" 2 FROM Course; 과목코드 과목명 학점수 ---------- ---------------- ---------- L1011 컴퓨터구조 2 L1012 웹디자인 2 L1021 데이터베이스 2 L1022 정보통신개론 2 L1031 SQL 3 ・・・・・ 14 개의 행이 선택되었습니다. SQL>
7.2 ORDER BY절에 출력순서 지정
정렬방법 두가지 오름차순 정렬(ascending Sort)
출력순서를 지정하는 분류 키(sort key)를 작은 값부터 큰 값으로 정렬
숫자형은 0부터 9, 영문자는 A부터 Z, 핚글은 ‘가나다・・・’순
내림차순 정렬(descending Sort) 출력순서를 지정하는 분류 키를 큰 값부터 작은 값으로 정렬
숫자형은 9부터 0, 영문자는 Z부터 A, 핚글은 ‘하파타・・・’순
오름차순 정렬 내림차순 정렬
7.2 ORDER BY절에 출력순서 지정
ORDER BY젃
문법 ORDER BY 칼럼명1 [ASC | DESC], 칼럼명2 [ASC | DESC], ・・・ 순서번호1 [ASC | DESC], 순서번호2 [ASC | DESC], ・・・
1. FROM젃에 기술핚 테이블의 칼럼명, SELECT젃에 기술된 칼럼명, 산술식 등의 순서번호로 출력되는 데이터를 정렬
2. ORDER BY젃에는 테이블의 칼럼명, 순서번호, SELECT젃의 별명은 기술핛 수 있으나, 수식이나 함수, 리터럴 등은 기술핛 수 없다.
3. 정렬 방법 지정은 칼럼명이나 순서번호를 우선순위로 기술 4. 오름차순 정렬은 ASC, 내림차순 정렬은 DESC를 기술핚다. 단,
오름차순 정렬 방법은 생략핛 수 있다.
우선순위순
7.2 ORDER BY절에 출력순서 지정
【예제 7.05】 ▶ Course 테이블에서 과목코드(Course_ID), 과목명(Title), 학점수(C_Number)를 과목명(Title) 오름차순으로 출력하시오.
SQL> SELECT Course_ID "과목코드", Title "과목명", C_Number "학점수" 2 FROM Course 3 ORDER BY Title; 과목코드 과목명 학점수 ---------- ---------------- ---------- L1042 Delphi 3 L1031 SQL 3 L0011 TOEIC연구 2 L2031 게임이론 3 L1021 데이터베이스 2 ・・・・・ 14 개의 행이 선택되었습니다. SQL>
순서번호 1 2 3
SELECT A * 100, B + 500 C - 30
FROM Temp
ORDER BY 1 ASC, 3 DESC;
7.2 ORDER BY절에 출력순서 지정
【예제 7.06】 ▶ Course 테이블에서 과목코드(Course_ID), 과목명(Title), 학점 수(C_Number), 과목별 수강료(학점수 * 30000 + 추가수강료)를 출력하되, 과목별 수강료를 내림차순, 과목코드는 오름차순으로 출력하시오.
SQL> UPDATE Course 2 SET Course_Fees = 0 3 WHERE Course_fees IS NULL; 9 행이 갱신되었습니다. SQL> SELECT Course_ID, Title "과목명", C_Number "학점", 2 C_Number * 30000 + Course_Fees "과목별 수강료" 3 FROM Course 4 ORDER BY 4 DESC, Course_ID ASC; COURSE_ID 과목명 학점 과목별 수강료 ---------- ---------------- ---------- ------------- L1042 Delphi 3 140000 L2031 게임이론 3 140000 L1031 SQL 3 120000 L1052 전자상거래 3 120000 L1032 자바프로그래밍 3 90000 ・・・・・ 14 개의 행이 선택되었습니다. SQL>
7.3 WHERE절에 검색조건 지정
WHERE젃 FROM젃에 기술된 테이블에서 일부 데이터나 특정 데이터를 검
색하기 위핚 조건을 지정
테이블의 행들은 WHERE젃의 검색조건이 참(True)이 되는 행에 대해서만 반홖
문법 WHERE expr1 연산자 expr2
• 칼럼명 • 리터럴 • 수식 • 함수
• 칼럼명 • 리터럴 • 수식 • 함수
• 관계연산자 • 논리연산자 • SQL연산자 • IS NULL 연산자
예1: WHERE Name = ‘홍길동’
예2: WHERE Year = 2 AND Name = ‘홍길동’
7.3 WHERE절에 검색조건 지정
연산자
산술연산자
수식에 사용, 사칙연산(+, -, *, /)
관계연산자
관계식에 사용, 크기 비교 (>, >=, <, <=, =,<>, !=)
논리연산자
논리식에 사용, 논리연산(AND, OR, NOT)
SQL 연산자
LIKE 연산자
IN 연산자
BETWEEN 연산자
IS NULL 연산자
7.3 WHERE절에 검색조건 지정
산술연산자
숫자형 연산
산술 연산자 의 미 연산 우선 순위 표현식
+ 더하기 2 expr1 + expr2
- 빼기 2 expr1 - expr2
* 곱하기 1 expr1 * expr2
/ 나누기 1 expr1 / expr2
【예제 7.07】 ▶ 125 * 32 + 12500 의 수식을 계산하시오.
SQL> SELECT 125 * 32 + 12500 FROM DUAL; 125*32+12500 ------------ 16500 SQL>
▣ Dual 테이블이란? 단일 행의 단일 칼럼을 가지는 오라클 데이터베이스의 더미(dummy) 테이블 일시적인 산술 연산이나 일시적인 처리를 위해 사용
7.3 WHERE절에 검색조건 지정
관계연산자
두 개의 다른 값의 크기를 비교핛 때 사용 관계연산자 의미 표현식
> 크다 expr1 > expr2
>= 크거나 같다 expr1 >= expr2
< 작다 expr1 < expr2
<= 작거나 같다 expr1 <= expr2
= 같다 expr1 = expr2
<>, != 같지 않다 expr1 != expr2
expr1 관계연산자 expr2 검색조건 결과 출력유무
11 =
11 참 (True) 출력핚다
22 거짓 (False) 출력안핚다
Null 알 수 없음(Unknown) 출력안핚다
7.3 WHERE절에 검색조건 지정 【예제 7.08】 ▶ Professor 테이블로부터 ‘컴공’ 학과의 교수명을 출력하시오.
SQL> SELECT Professor_ID, Name, Position, Dept_ID 2 FROM Professor 3 WHERE Dept_ID = '컴공'; PROFES NAME POSITION DEPT_ID ------ -------- ---------- -------- P11 신기술 교수 컴공 P12 이대호 부교수 컴공 P13 유소연 전임강사 컴공
SQL> 【예제 7.09】
▶ Course 테이블로부터 추가 수강료가 30000원 이상인 과목명을 출력하되, 추가 수강료를 내림차순으로 출력하시오.
SQL> SELECT Course_ID, Title, C_Number, Course_Fees 2 FROM Course 3 WHERE Course_Fees >= 30000 4 ORDER BY Course_Fees DESC; COURSE_ID TITLE C_NUMBER COURSE_FEES ---------- ---------------- ---------- ----------- L1042 Delphi 3 50000 L2031 게임이론 3 50000 L1052 전자상거래 3 30000 L1031 SQL 3 30000 SQL>
7.3 WHERE절에 검색조건 지정 논리연산자
논리 값을 갖는 복수 개의 조건식에 대하여 AND, OR 연산자를 사용 하나의 조건식에 대하여 NOT 논리연산자를 사용
조건식1 조건식2 논리곱 논리합 부정(조건식1)
참 참 참 참 거짓
참 거짓 거짓 참 거짓
참 알수없음 알수없음 참 거짓
거짓 참 거짓 참 참
거짓 거짓 거짓 거짓 참
거짓 알수없음 거짓 알수없음 참
알수없음 참 알수없음 참 알수없음
알수없음 거짓 거짓 거짓 알수없음
알수없음 알수없음 알수없음 알수없음 알수없음
조건식1 AND 조건식2
조건식1 OR 조건식2
NOT 조건식1
7.3 WHERE절에 검색조건 지정 【예제 7.10】 ▶ Student 테이블에서 ‘컴공’학과 2학년 학생의 학과, 학년, 이름을 출력하시오.
SQL> SELECT Dept_ID, Year, Name 2 FROM Student 3 WHERE Dept_ID = '컴공' AND Year = '2'; DEPT_ID YE NAME -------- -- -------- 컴공 2 이정민 컴공 2 박주영 SQL>
조건식1 AND 조건식2 조건식1 OR 조건식2 NOT 조건식1
모두 만족 둘 중에 하나 만족 만족하지 않을 때
7.3 WHERE절에 검색조건 지정
연결연산자
문자형 자료들을 결합 표현식 expr1 || expr2
【예제 7.11】 ▶ Professor 테이블로부터 소속학과, 교수명, 젂화번호를 자연어로 출력하되, 학과코드(Dept_ID)순으로 출력하시오.
SQL> SELECT Dept_ID || '학과의 ' || Name || '교수 전화번호는 ' || 2 Telephone || '이다.' 3 FROM Professor 4 ORDER BY Dept_ID; DEPT_ID||'학과의'||NAME||'교수전화번호는'||TELEPHONE||'이다.' --------------------------------------------------------------- 경영학과의 안연홍교수 전화번호는 765-4411이다. 정통학과의 박지성교수 전화번호는 765-4211이다. 정통학과의 이상혁교수 전화번호는 765-4213이다. 정통학과의 김하늘교수 전화번호는 765-4212이다. 컴공학과의 신기술교수 전화번호는 765-4111이다. ・・・・・ 8 개의 행이 선택되었습니다. SQL>
7.3 WHERE절에 검색조건 지정
LIKE 연산자 문자열의 문자 패턴에 의해서 검색
‘문자 패턴’에 사용되는 대체 문자(wild card)
% 기호는 모든 문자 대체
_ (underbar) 기호는 핚 문자 대체
예:
Name 칼럼에서 ‘홍’씨 성을 검색
WHERE Name LIKE ‘홍%’
‘길동’의 이름 검색
WHERE Name LIKE '_길동’
영문자의 문자 패턴으로upper() 또는 lower()함수 사용하면 대소문자 모두 검색 가능
표현식 expr LIKE '문자패턴‘
7.3 WHERE절에 검색조건 지정 【예제 7.12】 ▶ Student 테이블로부터 ‘이’씨 성의 학생 명단을 출력하시오.
SQL> SELECT Dept_ID, Year, Student_ID, Name 2 FROM Student 3 WHERE Name LIKE '이%'; DEPT_ID YE STUDENT_ID NAME -------- -- -------------- -------- 컴공 2 C0901 이정민 정통 2 T0901 이정필 행정 1 A1001 이미나 SQL>
【예제 7.13】 ▶ Student 테이블로부터 성명(Name) 칼럼의 중갂 글자가 ‘정’자인 학생을 검색하여 출력하시오.
SQL> SELECT Dept_ID, Year, Student_ID, Name 2 FROM Student 3 WHERE Name LIKE '_정_‘; DEPT_ID YE STUDENT_ID NAME -------- -- -------------- -------- 컴공 2 C0901 이정민 정통 2 T0901 이정필 SQL>
7.3 WHERE절에 검색조건 지정
IN 연산자 가능핚 값들의 목록과 비교
가능핚 값의 목록중 하나일 때 참(True), 그렇지 않으면 거짓(false)
표현식 expr IN (값1, 값2, ・・・)
【예제 7.14】 ▶ Professor 테이블에서 학과 코드(Dept_ID)가 ‘컴공’, ‘정통‘ 학과에 재직중인 교수의 명단을 학과코드순으로 출력하시오.
SQL> SELECT Dept_ID, Professor_ID, Name, Position 2 FROM Professor 3 WHERE Dept_ID IN ('컴공', '정통') 4 ORDER BY Dept_ID; DEPT_ID PROFES NAME POSITION -------- ------ -------- ---------- 정통 P22 김하늘 조교수 정통 P21 박지성 부교수 정통 P23 이상혁 전임강사 컴공 P12 이대호 부교수 컴공 P11 신기술 교수 컴공 P13 유소연 전임강사 6 개의 행이 선택되었습니다. SQL>
【예제 7.15】 ▶ 예제 7.14를 관계연산자와 논리연산자로 검색하시오.
SQL> SELECT Dept_ID, Professor_ID, Name, Position 2 FROM P rofessor 3 WHERE Dept_ID = '컴공' OR Dept_ID = '정통' 4 ORDER BY Dept_ID; … SQL>
7.3 WHERE절에 검색조건 지정
BETWEEN~AND~ 연산자 지정된 범위의 최소값부터 최대값 이내의 범위에 포함되는가를 검색
범위내의 값이면 참이 되고, 그렇지 않으면 거짓
비교핛 값은 숫자형, 문자형, 또는 날짜형 데이터
표현식 expr BETWEEN 최소값 AND 최대값
【예제 7.16】 ▶ SG_Scores 테이블에서 성적(Score)이 90점부터 94점까지의 범위내 성적을 성적순으로 출력하시오.
SQL> SELECT Student_ID, Course_ID, Score 2 FROM SG_Scores 3 WHERE Score BETWEEN 90 AND 94 4 ORDER BY Score; STUDENT_ID COURSE_ID SCORE -------------- ---------- ---------- C0802 L1032 90 C0901 L1041 93 C0901 L1032 93 C0902 L1012 94 SQL>
7.3 WHERE절에 검색조건 지정
IS NULL 연산자 expr 값이 Null이면 참이 되고, 그렇지 않으면 거짓
부정은 IS NOT NULL 연산자
표현식 Expr IS NULL
【예제 7.18】 ▶ Course 테이블로부터 추가수강료가 널(Null)인 행을 검색하여 출력하시오.
SQL> UPDATE Course 2 SET Course_Fees = NULL 3 WHERE Course_Fees = 0; 9 행이 갱신되었습니다. SQL>
SQL> SELECT * 2 FROM Course 3 WHERE Course_Fees IS NULL 4 ORDER BY Title; COURSE_ID TITLE C_NUMBER PROFES COURSE_FEES ---------- ---------------- ---------- ------ ----------- L0011 TOEIC연구 2 L1021 데이터베이스 2 P12 L0013 문학개론 2 L0012 문학과 여행 2 L1051 웹서버관리 2 P11 ・・・・・ 9 개의 행이 선택되었습니다. SQL>