데이터베이스및 SQL 언어의기초 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 1 / 36
Part I 데이터베이스 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 2 / 36
데이터의구성및표현 개체 (entity): DB가표현하려는유형 / 무형적정보의대상속성 (attribute): 개체가갖는특성도메인 (domain): 한속성이취할수있는모든값개체인스턴스 (instance) 과개체집합개체타입 : 속성의이름만으로기술된개체의정의 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 3 / 36
관계 (relationship) relation(table): 데이터를저장하는 2 차원테이블 relationship: 어떤개체나속성들의관련성또는관계 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 4 / 36
관계의종류 속성관계 개체관계 ( 예 ) 질의 (query) 학번이 2000020182 인학생의지도교수는 누구인가? 를지도라는관계를통해서답 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 5 / 36
관계형데이터베이스구조 테이블의구조 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 6 / 36
관계형데이터베이스구조 테이블의특징각필드 (field) 는유일한이름을갖고순서는중요하지않음한테이블에있는모든레코드 (record) 는유일하고그순서는중요하지않음각속성은단일한값을갖고배열등과같은여러값을갖지못함속성과도메인 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 7 / 36
관계형데이터제약 키 (key) 키또는수퍼키 (super key): 레코드를유일하게식별할수있는속성의집합. 테이블에서유일한레코드를찾아내는주소역할 학생테이블 : ( 학번 ), ( 학번, 이름 ) 등 후보키 (candidate key): 유일성과최소성을가짐 학생테이블에서 ( 학번 ) 후보키가둘이상인경우하나를기본키 (primary key) 로사용하고 나머지는대체키 (alternative key) 로사용 ( 예 ) ( 학번, 주민등록번호, 이름 ) 의테이블 : ( 학번 ) 과 ( 주민등록번호 ) 외래키 (foreign key) 기본키 : 교수테이블 ( 교수번호 ), 학생테이블 : ( 학번 ) 학생테이블의 지도교수번호 는외래키로교수테이블과의연결 고리로사용 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 8 / 36
관계형데이터추출의기본적방법 선택 (select) 연산 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 9 / 36
추출 (project) 연산 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 10 / 36
조인 (join) 연산 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 11 / 36
데이터베이스객체 (database object) 뷰 (view): 하나이상의테이블로부터유도되어만들어진가상 테이블 (virtual table) 로데이터가실제저장되지않음 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 12 / 36
저장프로시저 (stored procedure): 미리컴파일해서저장해놓은 SQL 문장들로 macro 와비슷한역할 질의처리속도향상 업무처리루틴공유 네트워크트래픽감소 ( 예 ) 제품의판매현황파악등에요구되는통계량산출을위한 저장프로시저 트리거 (trigger): 테이블의데이터에변화가발생했을때 자동적으로수행되도록해놓은저장프로시저 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 13 / 36
Part II SQL 소개 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 14 / 36
SQL(Structured Query Language) 소개 IBM San Jose 연구소에서개발되어 1986년관계형 DBMS의표준언어로채택일반적으로 DBMS로부터데이터를질의 (query) 또는조회하기위한언어 ( 예 ) 학생테이블에서학과이름이 통계학과 인학생을모두검색특징대화식 / 내장언어레코드의집합단위로연산데이터의정의, 조작, 제어를지원자료접근을위한방식과경로등을지정할필요가없는비절차적언어 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 15 / 36
데이터정의문과제어문 데이터정의 SQL 문 CREATE: 새로운데이터베이스또는객체생성 DROP: 데이터베이스또는객체삭제 ALTER: 데이터베이스또는객체변경데이터제어 SQL 문 GRANT: 데이터베이스객체사용권부여 DENY: 데이터베이스객체사용권철회 REVOKE: GRANT 또는 DENY 권한설정취소 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 16 / 36
데이터조작문 데이터검색 : SELECT 문데이터추가 : INSERT 문데이터수정 : UPDATE 문데이터삭제 : DELETE 문 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 17 / 36
Part III SELECT 문 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 18 / 36
기본형 여러테이블을조합해서사용자가원하는필드와레코드를추출일반적인형식 SELECT [DISTINCT] 필드리스트 FROM 테이블이름 [WHERE 조건 ] [GROUP BY 필드리스트 ] [HAVING 조건 ] [ORDER BY 필드리스트 [ASC DESC]] 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 19 / 36
기능 테이블의일부필드검색 ( 예제1) Customer Info 에서고객번호, 이름, 직업필드의데이터를검색 SELECT CID, Name, Job FROM Customer Info 전체필드를검색 ( 예제2) Customer OnlineInfo 에서전체필드의데이터를검색 SELECT * FROM Customer OnlineInfo 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 20 / 36
DISTINCT ( 예제 ) 제품구입을한번이라도한적이있는고객들을 (Sales 테이블의고객번호들을중복없이 ) 모두검색 SELECT DISTINCT CID FROM Sales 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 21 / 36
WHERE 레코드조건검색 ( 예제 1) Customer Info에서직업이 회사원 인고객의고객번호 (CID), 이름 (Name), 직업 (job), 결혼여부 (married) 를검색 SELECT CID, Name, Job, Married FROM Customer Info WHERE Job = 회사원 ( 예제 2) Customer OnlineInfo에서전자우편주소가 null 값이아닌레코드를검색 SELECT * FROM Customer OnlineInfo WHERE Email is not NULL 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 22 / 36
비교및논리연산자 ( 예제 4) Customer Score 테이블에서고객점수가 100 이상이고 200 이하인레코드를검색 SELECT * FROM Customer Score WHERE Score >= 100 AND Score <= 200 ( 예제 5) Customer OnlineInfo테이블에서 Login ID 와 Password 를동일하게이용하는고객을검색 SELECT * FROM Customer OnlineInfo WHERE LID=LPW 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 23 / 36
LIKE 연산자 ( 예제 1) Customer Info 테이블에서 김 씨성을가진고객의고객번호, 이름, 주소를검색 SELECT CID, Name, Address FROM Customer Info WHERE Name LIKE 김 % ( 예제 2) Customer OnlineInfo 테이블에서 Email 로 hotmail 을이용하는고객검색 SELECT * FROM Customer OnlineInfo WHERE Email LIKE %hotmail% 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 24 / 36
IN 키워드 ( 예제 ) Customer Info 테이블에서직업이 회사원, 공무원 인고객검색 SELECT * FROM Customer Info WHERE Job IN ( 회사원, 공무원 ) 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 25 / 36
GROUP BY 데이터그룹화 ( 예제 1) Customer Info 테이블에서직업별고객빈도파악 SELECT Job, count(*) as freq FROM Customer Info GROUP BY Job ( 예제 2) Sales 테이블에서 2001년 4월의고객별구매회수를검색 SELECT CID, count(*) as freq FROM Sales WHERE year(sday)=2001 and month(sday) = 4 GROUP BY CID 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 26 / 36
HAVING 그룹화조건검색 ( 예제 1) Sales 테이블에서 2001년 4월의고객별구매회수 20회이상인고객검색 SELECT CID, count(*) as freq FROM Sales WHERE year(sday)=2001 and month(sday) = 4 GROUP BY CID HAVING count(*) >= 20 ( 예제 2) Score 테이블에서학생의평균점수가 90 이상인학생검색 SELECT ID, avg(score) as mean FROM Score GROUP BY ID HAVING avg(score) >= 90 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 27 / 36
ORDER BY 출력순서명시 ( 예제 1) Customer Info 테이블에서고객들을생년월일순으로검색 SELECT CID, Name, BDay FROM Customer Info ORDER BY BDay ( 예제 2) Score 테이블에서학생의평균점수를오름차순으로검색 SELECT ID, avg(score) as mean FROM Score GROUP BY ID ORDER BY avg(score) 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 28 / 36
레코드수제한 : SELECT TOP ( 예제 1) Score 테이블에서성적이상위 50% 인학생을내림차순으로검색 ( 단, 동점자포함 ) SELECT TOP 50 PERCENT WITH TIES * FROM Score ORDER BY Score DESC ( 예제 2) Customer Info 테이블에서 2000 년이후에가입한고객중가장빨리가입한고객 5명검색 SELECT TOP 5 * FROM Customer Info WHERE year(jday) >= 2000 ORDER BY JDay ASC 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 29 / 36
JOIN INNER JOIN ( 예제 1) 테이블 Customer Info, Customer OnlineInfo 에서고객번호, 이름, Login ID, 전자우편주소를고객순으로검색 SELECT Customer Info.CID, Name, LID, EMail FROM Customer Info INNER JOIN Customer OnlineInfo ON Customer Info.CID= Customer OnlineInfo.CID ORDER BY Customer Info.CID 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 30 / 36
테이블이름의별명 : AS SELECT C.CID, Name, LID, EMail FROM Customer Info AS C INNER JOIN Customer OnlineInfo AS CO ON C.CID=CO.CID ORDER BY C.CID 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 31 / 36
INNER JOIN과 WHERE ( 예제 ) Customer Info, Customer OnlineInfo에서 1980년이후출생자의고객번호, 이름, Login ID, 전자우편주소를고객 ID 순으로검색 ( 전자우편주소가 null값이면제외 ) SELECT C.CID, Name, LID, EMail FROM Customer Info AS C INNER JOIN Customer OnlineInfo AS CO ON C.CID=CO.CID WHERE year(bday) >= 1980 and Email is not NULL ORDER BY C.CID 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 32 / 36
OUTER JOIN ( 예제 1) 고객정보에온라인정보를합해서볼때 SELECT C.CID, Name, LID, EMail FROM Customer Info AS C LEFT JOIN Customer OnlineInfo AS CO ON C.CID=CO.CID ( 예제 2) 온라인정보에고객정보를합해서볼때 SELECT C.CID, Name, LID, EMail FROM Customer OnlineInfo AS CO RIGHT JOIN Customer Info AS C ON CO.CID=C.CID 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 33 / 36
CROSS JOIN 조인가능한모든조합 ( 예제 ) SELECT C.CID, Name, LID, EMail FROM Customer Info AS C CROSS JOIN Customer OnlineInfo AS CO WHERE C.CID= 100001 or C.CID= 100002 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 34 / 36
UNION 테이블연결검색 ( 예제 ) 테이블 Score 와 Grad Score 에서학번, 교과목번호, 성적을검색 SELECT ID, SubjectID, Score FROM Score UNION SELECT ID, SubjectID, Score FROM Grad Score 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 35 / 36
중첩질의 어떤질의의 WHERE 문안에완전한 SELECT 질의가포함되어있는형태 ( 예제 ) Customer Info 테이블에서 Email 주소를가지고있는고객명단검색 SELECT CID, Name FROM Customer Info WHERE CID IN ( SELECT CID FROM Customer onlineinfo WHERE Email is not null ) 박창이 ( 서울시립대학교통계학과 ) 데이터베이스및 SQL 언어의기초 36 / 36