질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL

Slides:



Advertisements
Similar presentations
1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
Advertisements

널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null.
SQLite 소개 및 안드로이드에서의 사용법
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 언어 SQL.
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
Perfect! 대용량 데이터베이스 튜닝Ⅱ.
소리가 작으면 이어폰 사용 권장!.
관계 대수와 SQL.
오라클 데이터베이스 성능 튜닝.
Database & Internet Computing Laboratory 한 양 대 학 교
Chapter 5 SQL: 확장된 질의, 주장, 트리거, 뷰.
제 5 장 인덱스 생성 및 관리.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
Chapter 05 SQL 인젝션 공격.
JDBC 프로그래밍 이수지 이동주 1.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
Chapter 01 데이터베이스 시스템.
11장. 데이터베이스 서버 구축과 운영.
요약 정보 만들기.
오라클 데이터베이스 성능 튜닝.
롯데마트 CRM 데이터 분석 교육 2014년 12월 > RE::VISION 전용준 리비젼컨설팅 대표
롯데마트 CRM 데이터 분석 교육 2014년 12월 > RE::VISION 전용준 리비젼컨설팅 대표
기초 T-SQL.
트랜잭션과 잠금 트랜잭션 처리 메커니즘을 자세히 이해한다. 트랜잭션의 종류를 파악한다.
Chapter 05 데이터베이스 프로그래밍.
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
SQL Server 2000 세미나 Profiler를 이용한 문제해결
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
단일 테이블 조회를 위한 SELECT 문을 이해한다. 열 제약조건과 행 제약조건을 이해한다. 결과 집합 변경 방법을 이해한다.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
1장. 데이터베이스 시스템 컴퓨터를 사용하여 정보를 수집하고 분석하는데 데이터베이스 기술이 활용되고 있음
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL (structured query language)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
SQL Query in the SSMS : DB, Table
1장. SELECT 문장을 이용하여 원하는 데이터 가져오기
JSP 게시판 구현.
View(뷰) 1 가상 테이블(Virtual Relation)
데이터베이스 (Database) SQL 추가 기능: 주장, 뷰, 프로그래밍 기법 문양세 강원대학교 IT대학 컴퓨터과학전공.
Database 중고차 매매 DB 비즈니스IT 윤동섭.
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
                              데이터베이스 설계 및 실습 #4 - loadcompany 만들기 한국외국어대학교 DaPS 연구실                              
컬럼 대칭키 암호화 작업(SQL 2008) ① 마스터 키 생성 ② 인증서 생성 초기 한번만 실행 ③ 대칭키 생성
문양세 (1st version: 문성우) (revised by 손시운)
06. SQL 명지대학교 ICT 융합대학 김정호.
제 8장 데이터베이스.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
Stored program 장종원
쿼리 활용하기 1 담당교수 : 박흠 실용컴퓨터 데이터베이스 기초 Access 담당교수 박흠.
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Presentation transcript:

질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL

3.1 질의어와 SQL Structured Query Language IBM의 System R project에서 개발된 Sequel이란 언어에 기초 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어 현재 대부분의 관계형 DBMS가 SQL2를 지원 현재 객체지향 DBMS를 지원하기 위해 SQL3가 개발되었으나 일부에서만 지원 본 교재에서는 SQL2를 기준으로 함 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음 SQL은 자연어와 유사하고 절차적 언어이므로 사용하기 용이함 Copyright  2002 by S.-g. Lee and J.-y. Chang

DDL & DML SQL은 크게 DDL과 DML로 구성됨 데이터 정의 언어 (Data Definition Language: DDL) 데이타 저장 구조를 명시하는 언어 릴레이션의 스키마 정의, 수정, 삭제 인덱스(index) 생성, 삭제 데이터 조작 언어 (Data Manipulation Language: DML) 사용자가 데이타를 접근하고 조작할 수 있게 하는 언어 튜플의 삽입(insert), 삭제(delete), 수정(update) Copyright  2002 by S.-g. Lee and J.-y. Chang

3.2 기본 SQL 기본 구조 SELECT A1, A 2, …, A n FROM r1, r 2, …, r n WHERE P - A1, A2, …, An : 추출될 속성 리스트 - r1, r 2, …, r n : 릴레이션 리스트 - P : 검색되는 튜플들에 대한 조건 이 질의어는 다음과 같은 관계 대수와 동일한 의미를 가짐.  A1, A2, ..., An(P (r1 x r2 x ... x rm)) Copyright  2002 by S.-g. Lee and J.-y. Chang

SELECT 절 학생 릴레이션에서 모든 학생의 주소를 추출하는 SQL SELECT 주소 FROM 학생 왼쪽과 동일한 질의 : 중복 제거 (DISTINCT) SELECT DISTINCT 주소 FROM 학생 Copyright  2002 by S.-g. Lee and J.-y. Chang

SELECT절에는 속성 이름 이외에 수식도 가능함 모든 속성을 추출할 때에는 *를 사용 예) 학생 릴레이션에서 모든 속성을 추출하는 질의 SELECT * FROM 학생 SELECT절에는 속성 이름 이외에 수식도 가능함 예) 교수 릴레이션으로 부터 이름과 재직년도를 찾는 질의 SELECT 이름, 2001-임용년도 FROM 교수 Copyright  2002 by S.-g. Lee and J.-y. Chang

FROM절에 두개 이상의 릴레이션이 포함된 질의(조인 질의) 예) 학생들의 학번과 그들의 소속학과를 검색하는 질의 SELECT 학생.학번, 학과.학과명 FROM 학생, 학과 WHERE 학생.학과번호 = 학과.학과번호 같은 이름의 속성이 두개 이상의 릴레이션에 나타나면 이를 구별하기 위해 “릴레이션.속성”과 같이 표현함 위의 질의는 다음의 관계 대수의 조인과 같은 의미를 가짐.  학생.학번, 학과.학과명 (학생  학생.학과번호 = 학과.학과번호 학과) Copyright  2002 by S.-g. Lee and J.-y. Chang

Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 전산과 2학년 학생들의 학번을 검색하는 질의 SELECT 학생.학번 FROM 학생, 학과 WHERE 학생.학과번호 = 학과.학과번호 and 학생.학년 = 2 and 학과.학과명 = “전산과” Copyright  2002 by S.-g. Lee and J.-y. Chang

튜플의 순서 지정(ORDER BY) ORDER BY 출력되는 튜플의 순서를 제어 ORDER BY A1, A 2, …, A n 예)학생 릴레이션에서 학과번호가 302인 학생의 이름과 학번을 찾는데 결과 릴레이션에 대해 이름의 오름차순 (ASCENDING)으로, 같은 이름에 대해서는 학번의 내림차순 (DESCENDING)으로 정렬 SELECT 이름, 학번 FROM 학생 WHERE 학생.학과번호 = 302 ORDER BY 이름 ASC, 학번 DESC 주의: ORDER BY절에 나타나는 속성은 반드시 SELECT절에 명시되어야 함 Copyright  2002 by S.-g. Lee and J.-y. Chang

재명명 연산 속성에 대한 재명명(select절의 속성에 새로운 이름 부여) 릴레이션에 대한 재명명 SELECT 이름 AS 교수이름, 2001-임용년도 AS 재직년도 FROM 교수 릴레이션에 대한 재명명 FROM절의 릴레이션 이름을 재명명 예) 최성희 교수가 강의하는 과목의 교과목번호를 검색하는 질의 SELECT DISTINCT S.교과목번호 FROM 교수 AS P, 강좌 AS S WHERE P.이름 = ‘최성희’ and P.교수번호 = S.교수번호 P나 S같이 재명명된 이름을 별명(alias) or 튜플변수(tuple variable)라고함 Copyright  2002 by S.-g. Lee and J.-y. Chang

재명명 연산 릴레이션에 대한 재명명의 다른 예 고희석 교수보다 먼저 임용된 교수에 대한 검색 교수 릴레이션 간의 조인이 필요 이때는 재명명이 필수적 SELECT T.이름 FROM 교수 T, 교수 S WHERE T.임용년도 < S.임용년도 and S.이름 = “고희석” Copyright  2002 by S.-g. Lee and J.-y. Chang

문자열 비교 WHERE 절에서 문자명을 비교하는 기능을 제공 두개의 특수문자 사용 문자열 패턴의 예 속성이름 LIKE 문자열패턴 속성이름이 문자열패턴에 명시된 형태를 갖는지를 나타냄 두개의 특수문자 사용 ‘%’ : 임의의 개수의 문자열을 대체한다. ‘_’ : 임의의 한 개 문자로 대체한다. 문자열 패턴의 예 “%서울%” : “서울”이라는 단어가 포함된 문자열  “서울%” : “서울”로 시작되는 문자열  “_ _ _” : 정확히 세 문자로 구성된 문자열  “_ _ _%” : 최소한 세 문자 이상으로 구성된 문자열 Copyright  2002 by S.-g. Lee and J.-y. Chang

문자열 비교 예) 김씨 성을 가진 학생들의 이름을 찾는 질의 SELECT 이름 FROM 학생 WHERE 이름 LIKE “김%” 예)남학생을 찾는 질의 SELECT 이름 WHERE 주민등록번호 LIKE “%-1%” 만약 ‘%’나 ‘_’가 포함된 문자열을 나타내려면 앞에 \를 사용함(escape문자) 예) “25\%%” : “25%”로 시작되는 문자열 Copyright  2002 by S.-g. Lee and J.-y. Chang

3.3 고급 SQL COUNT : 값들의 개수 집계 함수를 이용한 SQL SUM : 값들의 합 AVG : 평균값 Aggregate function(집계 함수) : 속성 값들로부터 통계적 연산 등을 통해 하나의 값을 계산하는 기능이 요구될 때 이용. COUNT : 값들의 개수 SUM : 값들의 합 AVG : 평균값 MAX : 가장 큰 값 MIN : 가장 작은 값 Copyright  2002 by S.-g. Lee and J.-y. Chang

SELECT COUNT(DISTINCT강의실) 학번이 “01302-001”인 학생이 수강한 과목의 총 학점 수가 얼마인지 나타내는 질의 SELECT SUM(교과목.학점) FROM 수강, 교과목 WHERE 수강.학번 = “01302-001” and 수강.교과목번호 = 교과목.교과목번호 2001년 2학기에 개설된 강좌에 사용되는 강의실은 모두 몇 개인가를 나타내는 질의 SELECT COUNT(DISTINCT강의실) FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 여기서 DISTINCT를 사용하지 않으면 중복된 강의실도 모두 포함되므로 이를 제거하려면 DISTINCT를 반드시 넣어야 됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

SELECT COUNT(*) 교과목번호가 “302.551”인 강좌가 몇 번 개설되었는지를 찾는 질의 FROM 강좌 WHERE 교과목번호 = “302.551” *는 COUNT의 대상이 튜플임을 의미함(속성의 수가 아니라 튜플의 수) 중복된 튜플도 포함됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

GROUP BY 절 튜플들을 여러 그룹으로 나누어 그룹별로 집계함수를 적용하는 방법 예) 2001년 2학기에 각 학생이 수강하는 총학점 수를 구하는 질의 2001년 2학기에 해당하는 튜플들에 대해 각 학생별로 그룹화하여 각 그룹에 대해서 학점수를 더함 GROUP BY절을 이용하여 그룹화합 GROUP BY A1, A2, …, An SELECT 수강.학번, SUM(교과목.학점) FROM 수강, 교과목 WHERE 수강.교과목번호 = 교과목.교과목번호 and 수강.연도 = 2001 and 수강.학기 = 2 GROUP BY 수강.학번 Copyright  2002 by S.-g. Lee and J.-y. Chang

최종 결과 학번별로 그룹화된 중간 결과 Copyright  2002 by S.-g. Lee and J.-y. Chang

Note : 집계 함수와 GROUP BY를 함께 사용할 때 SELECT절에 나타나는 속성들은 GROUP BY에 반드시 나타나야 한다. 다음의 질의는 잘못된 것임 SELECT 교과목번호, COUNT(강의실) FROM 강좌 WHERE 연도 = 1997 and 학기 = 2 Copyright  2002 by S.-g. Lee and J.-y. Chang

HAVING 절 원하는 그룹에 대한 결과를 얻고 싶을 때 HAVING절을 이용하여 그룹에 대한 조건을 명시할 수 있음 예) 두 번 이상 강좌가 개설된 교과목에 대해서 교과목 번호과 지금까지의 수강인원의 합을 구하는 질의 SELECT 교과목번호, SUM(수강인원) FROM 강좌 GROUP BY 교과목번호 HAVING COUNT(*) >= 2 HAVING과 WHERE절은 모두 조건을 명시하지만, WHERE절 - 튜플들에 대한 조건을 명시, HAVING절 - 항상 GROUP BY와 같이 사용하며 각 GROUP에 대한 조건을 명시한다는 차이가 있음. Copyright  2002 by S.-g. Lee and J.-y. Chang

중첩 질의: SQL문을 다른 SQL문 내에 중첩하여 표현하는 질의 중첩질의 (nested query) 중첩 질의: SQL문을 다른 SQL문 내에 중첩하여 표현하는 질의 부질의(subquery) 또는 내부 질의(inner query) : 중첩 질의에서 내포된 질 외부 질의(outer query) : 부질의를 포함하는 외부의 질의 Copyright  2002 by S.-g. Lee and J.-y. Chang

질의 예 “56-218”인 강의실에서 개설된 강좌의 교과목명을 찾는 질의 SELECT 교과목명 FROM 교과목 WHERE 교과목번호 IN ( SELECT DISTINCT 교과목번호 FROM 강좌 WHERE 강의실 = “56-218” ) 부질의의 결과: 강의실이 56-218인 교과목번호의 집합 외부질의에서 각 교과목 튜플에 대해서 각 튜플의 교과목번호가 부질의 결과에 속하는지를 판단 IN 은 다음에 상수의 집합도 표현 가능 ( “302.553”, “302.553”, 302.562” ) Copyright  2002 by S.-g. Lee and J.-y. Chang

중첩질의는 다음과 같이 중첩되지않은 질의로 표현 가능 질의 예 중첩질의는 다음과 같이 중첩되지않은 질의로 표현 가능 SELECT DISTINCT 교과목명 FROM 교과목, 강좌 WHERE 교과목.교과목번호 = 강좌.교과목번호 and 강의실=“56-218” Copyright  2002 by S.-g. Lee and J.-y. Chang

질의 예 2001년 2학기에 개설되지 않은 교과목명을 찾는 질의 SELECT 교과목명 FROM 교과목 WHERE 교과목번호 NOT IN ( SELECT DISTINCT 교과목번호 FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 ) Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 가장 많은 수강생을 가진 강좌를 구하는 질의 하나의 값과 집합을 비교하는 연산자들 IN, NOT IN,  =SOME, <= SOME, <SOME, >SOME, >=SOME, <>SOME, =ALL, <=ALL, <ALL, >ALL, >=ALL, <>ALL SOME 대신에 ANY를 사용해도 무방 SOME: 집합내 임의의 값과 비교. ALL: 집합내 모든 값과 비교 예) =SOME: 집합내 임의의 값과 같은가를 나타냄, IN과 같은 의미 예) 가장 많은 수강생을 가진 강좌를 구하는 질의 SELECT 교과목번호, 연도, 학기, 교수번호 FROM 강좌 WHERE 수강인원 >= ALL (SELECT 수강인원 FROM 강좌) Copyright  2002 by S.-g. Lee and J.-y. Chang

중첩 질의 중에 질의의 결과가 빈(empty) 릴레이션인지 아니면 최소한 하나 이상의 튜플이 존재하는지를 조건으로 표현 EXISTS and NOT EXISTS 중첩 질의 중에 질의의 결과가 빈(empty) 릴레이션인지 아니면 최소한 하나 이상의 튜플이 존재하는지를 조건으로 표현 EXISTS : 최소한 한 개의 튜플이 존재하면 ‘참’ otherwise ‘거짓’ NOT EXISTS : 결과가 빈 릴레이션이면 ‘참’ otherwise ‘거짓’ 예) 교과목 릴레이션의 각 튜플의 교과목번호와 같은 값을 갖고 강의실이 “56-218”인 강좌 릴레이션의 튜플이 존재하면 해당 교과목 릴레이션의 튜플을 최종 결과로 선택하는 질의 SELECT 교과목명 FROM 교과목 WHERE EXISTS ( SELECT * FROM 강좌 WHERE 강의실 = “56-218” and 교과목.교과목번호=강좌.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

2001년 2학기에 개설되지 않은 교과목명을 출력하는 질의 SELECT 교과목명 FROM 교과목 WHERE NOT EXISTS ( SELECT * FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 and 교과목.교과목번호=강좌.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

관계대수의 합집합, 교집합, 차집합과 같은 기능 제공 피연산자는 호환가능해야 함 종류 집합 연산 관계대수의 합집합, 교집합, 차집합과 같은 기능 제공 피연산자는 호환가능해야 함 종류 Union / Intersect / Except 자동 중복제거 Union All / Intersect All / Except All 중복 제거 안됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 교수와 학생들에 대한 이름과 주소를 찾는 질의 (SELECT 이름, 주소 FROM 교수 ) UNION Copyright  2002 by S.-g. Lee and J.-y. Chang

전산개론을 수강한 전산과 학생의 학번을 찾는 SQL ( SELECT DISTINCT 학생.학번 FROM 학생, 학과 WHERE 학과.학과명 = “전산과” and 학과.학과번호 = 학생.학과번호) INTERSECT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “전산개론” and 교과목.교과목번호 = 수강.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

화일처리 과목을 수강하지 않은 전산과 2학년 학생을 찾는 질의 (SELECT DISTINCT 학생.학번 FROM 학과, 학생 WHERE 학과.학과명 = ‘전산과’ and 학과.학과번호 = 학생.학과번호 and 학생.학년 = 2) EXCEPT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “화일처리” and 교과목.교과목번호 = 수강.교과목번호 ) 동일한 질의 SELECT DISTINCT 학생.학번 FROM 학과, 학생, 수강, 교과목 WHERE 학과.학과명 = “전산과” and 학과.학과번호 = 학생.학과번호 and 학생.학번 = 수강.학번 and 수강.교과목번호 = 교과목.교과목번호 and 교과목.교과목명 = “전산개론” Copyright  2002 by S.-g. Lee and J.-y. Chang

화일처리 과목을 수강하지 않은 전산과 2학년 학생을 찾는 질의 ( SELECT DISTINCT 학생.학번 FROM 학과, 학생 WHERE 학과.학과명 = ‘전산과’ and 학과.학과번호 = 학생.학과번호 and 학생.학년 = 2 ) EXCEPT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “화일처리” and 교과목.교과목번호 = 수강.교과목번호 ) Copyright  2002 by S.-g. Lee and J.-y. Chang

널 값의 처리 속성의 값이 널(NULL)인 조건을 명시할 수 있는 방법 아직 성적이 부여되지 않은 학생을 찾는 질의 ‘속성 IS NULL’ : 속성 값이 널인가를 나타내는 조건 ‘속성 IS NOT NULL’ :Otherwise 아직 성적이 부여되지 않은 학생을 찾는 질의 SELECT 학번 FROM 수강 WHERE 성적 IS NULL 성적이 ‘A+’가 아닌 학생을 찾는 질의 SELECT 학번 WHERE 성적 <> “A+” 성적이 NULL인 튜플은 결과에 포함되는가? Copyright  2002 by S.-g. Lee and J.-y. Chang

널 값과 집계함수 수강 릴레이션에서 성적의 수를 세는 질의 SELECT COUNT(성적) FROM 수강 SUM, MIN, MAX, AVG도 널은 무시하고 계산 COUNT(*)는 특정 속성에 대한 연산이 아니라 튜플 전체에 대한 연산이므로 널 값의 존재 여부와는 무관 Copyright  2002 by S.-g. Lee and J.-y. Chang

3.4 데이터의 수정 데이타에 대한 검색을 지원하는 SQL은 database 상태를 변화시키지 않음. SQL의 DML중에서 튜플들을 삽입, 삭제, 수정하는 명령문 -> database의 상태가 변함. - 삽입(INSERT) - 삭제(DELETE) - 수정(UPDATE) Copyright  2002 by S.-g. Lee and J.-y. Chang

삽입 형식 예) 수강 릴레이션에 하나의 튜플을 삽입 INSERT INTO 수강 VALUES (“01302-001”, “302.562”, 2002, 1, “A+”) INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적) INSERT INTO 수강 (성적, 교과목번호, 년도, 학기, 학번) VALUES (“A+”, “302.562”, 2002, 1, “01302-001”) Copyright  2002 by S.-g. Lee and J.-y. Chang

수강 릴레이션에 성적 속성이 결정되지 않은 튜플 삽입 INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적) 수강 릴레이션에 성적 속성이 결정되지 않은 튜플 삽입 INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적) VALUES (“01302-001”, “302.562”, 2002, 1, NULL) INSERT INTO 수강 (학번, 교과목번호, 연도, 학기) VALUES (“01302-001”, “302.562”, 2002, 1) Copyright  2002 by S.-g. Lee and J.-y. Chang

학생 릴레이션에서 2학년 학생들의 학번, 이름, 주소를 검색해서 그 결과를 이학년생 릴레이션에 삽입하는 명령문 학생 릴레이션에서 2학년 학생들의 학번, 이름, 주소를 검색해서 그 결과를 이학년생 릴레이션에 삽입하는 명령문 릴레이션 가정 이학년생 (학번, 이름, 주소) INSERT INTO 이학년생(학번, 이름, 주소) SELECT 학번, 이름, 주소 FROM 학생 WHERE 학년 = 2 - 단, SELECT절에 명시된 속성들의 도메인과 이학년생 릴레이션의 속성에 대한 도메인이 일치해야 함 Copyright  2002 by S.-g. Lee and J.-y. Chang

삭제 형식 예) 강좌 릴레이션의 모든 튜플을 삭제 예) 강좌 릴레이션에서 화일처리에 대한 강좌들을 삭제하라는 명령문 DELETE FROM 강좌 단, 튜플들이 모두 삭제된다 하더라도 릴레이션은 삭제되지 않고 남아 빈 릴레이션이 됨 예) 강좌 릴레이션에서 화일처리에 대한 강좌들을 삭제하라는 명령문 DELETE FROM 강좌 WHERE 교과목번호 IN (SELECT 교과목번호 FROM 교과목 WHERE 교과목명 = “화일처리”) 예) 2001년에 개설된 강좌들을 삭제 DELETE FROM 강좌 WHERE 연도 = 2001 Copyright  2002 by S.-g. Lee and J.-y. Chang

갱신 튜플들의 속성값을 변경 예) 모든 학생들의 학년을 하나씩 증가 UPDATE 학생 SET절 모든 튜플들을 변경하거나 WHERE절을 이용하여 특정 조건에 맞는 튜플만을 변경 예) 모든 학생들의 학년을 하나씩 증가 UPDATE 학생 SET 학년 = 학년 + 1 SET절 SET 속성1=산술식1, …., 속성n = 산술식n 예) 교수 릴레이션의 모든 튜플에 대해서 학과번호를 303으로, 직위를 ‘교수’로 변경 UPDATE 교수 SET 학과 = 303, 직위 = “교수” Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 2002년 1학기에 개설된 전산개론 강좌의 강의실을 “56-218”로 변경 예) 학과번호가 302인 학생들의 학년을 1씩 증가 UPDATE 학생 SET 학년 = 학년 + 1 WHERE 학과번호 = 302 예) 2002년 1학기에 개설된 전산개론 강좌의 강의실을 “56-218”로 변경 UPDATE 강좌 SET 강의실 = “56-218” WHERE 연도 = 2002 and 학기 = 1 and 교과목번호 IN ( SELECT 교과목번호 FROM 교과목 WHERE 교과목명 = “전산개론”) Copyright  2002 by S.-g. Lee and J.-y. Chang

3.5 데이터 정의 언어 DDL(Data Definition Language) 생성 : CREATE 삭제 : DROP 릴레이션을 생성, 삭제, 변경하는 명령어로 구성 생성 : CREATE 삭제 : DROP 변경 : ALTER Copyright  2002 by S.-g. Lee and J.-y. Chang

릴레이션의 생성 형식 도메인 타입의 종류 Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 학과 릴레이션을 생성하는 명령문 CREATE TABLE 학과 (학과번호 int, 학과명 varchar(20), Copyright  2002 by S.-g. Lee and J.-y. Chang

예) 학생 릴레이션을 생성하는 명령문 학번과 주민등록번호, 학과번호 속성에는 널 값을 허용하지 않음. 학번은 기본 키로 정의되었으며 학과번호는 학과 릴레이션을 참조하는 외래 키로 정의 CREATE TABLE 학생 (학번 char(9) NOT NULL, 주민등록번호 char(14) NOT NULL, 이름 varchar(30), 학과번호 int NOT NULL, 주소 varchar(50), 전화번호 char(14), 학년 int, PRIMARY KEY (학번), FOREIGN KEY (학과번호) REFERENCES 학과)  Copyright  2002 by S.-g. Lee and J.-y. Chang

예제 데이타베이스의 정의 Copyright  2002 by S.-g. Lee and J.-y. Chang

Copyright  2002 by S.-g. Lee and J.-y. Chang

Copyright  2002 by S.-g. Lee and J.-y. Chang

릴레이션의 삭제 학생 릴레이션을 제거하는 명령문 DROP TABLE 학생 - 학생 릴레이션에 저장된 튜플 뿐만 아니라 학생 릴레이션 스키마 자체가 데이타베이스에서 삭제됨. Copyright  2002 by S.-g. Lee and J.-y. Chang

릴레이션의 수정 릴레이션에서 정의된 속성을 추가하거나 삭제할 경우에 사용 속성이 추가될 경우에는 기존의 데이타는 변경되지 않고 추가된 속성에 대한 값들은 모두 널 값이 할당 예) 학생 릴레이션에 나이 속성을 추가하려면 다음과 같이 추가될 속성 이름(나이)과 속성의 도메인(int)을 명령문에 표현 ALTER TABLE 학생 ADD 나이 int 예) 학생 릴레이션에서 주민등록 번호 속성을 제거 ALTER TABLE 학생 DROP 주민등록번호 Copyright  2002 by S.-g. Lee and J.-y. Chang

3.6 내장 SQL 일반 프로그램 언어를 이용한 데이터베이스 접근 필요 내장 SQL(embedded SQL) 일반 프로그램 언어를 이용한 데이터베이스 접근 필요 SQL은 언어가 제공하는 순환문, 치환문과 같은 프로그램 언어의 비선언적 구성 요소를 갖추고 있지 않음. 보고서 작성, 그래픽 사용자 환경과 같은 사용자 인터페이스 구현을 위해서는 프로그래밍 언어의 도움이 절대적으로 필요 내장 SQL(embedded SQL) SQL을 내장한 프로그램 언어(호스트 언어(host language))로 작성된 프로그램이 데이타베이스에 대한 연산 수행 전처리기(preprocessor) : precompiler 호스트 언어를 컴파일하기 전에 내장 SQL문을 컴파일이 가능한 함수 호출 등으로 변환 일반적으로 프로그램 언어는 집합을 다루는 변수를 제공하지 않음. 그러나 SQL의 결과는 집합 따라서 내장 SQL은 실행 결과를 한번에 하나의 튜플 씩 처리할 수있는 기능을 제공 (Cursor 개념) Copyright  2002 by S.-g. Lee and J.-y. Chang

커서: 결과 릴레이션의 튜플들을 하나씩 접근하기 위한 포인터 역할 호스트 언어의 변수 사용 - 변수이름 앞에 콜론(:)을 사용 형식 EXEC SQL 내장 SQL 명령문 ; 커서: 결과 릴레이션의 튜플들을 하나씩 접근하기 위한 포인터 역할 호스트 언어의 변수 사용 - 변수이름 앞에 콜론(:)을 사용 예) EXEC SQL DECLARE c COUSOR FOR SELECT 이름, 학번 FROM 학생 WHERE 학생.학과번호 = :dept_num ; CURSOR EXEC SQL OPEN c ; EXEC SQL FETCH c INTO :name :num ; EXEC SQL CLOSE c ; Copyright  2002 by S.-g. Lee and J.-y. Chang

Copyright  2002 by S.-g. Lee and J.-y. Chang

Copyright  2002 by S.-g. Lee and J.-y. Chang

내장된 SQL 프로그램 처리 절차 Copyright  2002 by S.-g. Lee and J.-y. Chang