30
SQL Workshop The Korean Statistical Society 1/30 전전전전전 전전∙전전전전전전전 SQL 실실

전북대학교 수학 ∙통계정보과학부

Embed Size (px)

DESCRIPTION

전북대학교 수학 ∙통계정보과학부. SQL 실습. 안 정 용. DBMS 표준 언어 이용자 ( 응용 프로그램 ) 와 DBMS 사이의 중간 다리 역할 담당 데이터 정의 , 제어 , 조작 등의 기능 포함. Database Management System. 고객정보 테이블에서 직업이 ‘ 학생 ’ 인 고객 검색 Select * from Customer_Info where job= ‘ 학생 ’. SQL. SQL 개요. SQL (Structured Query Language) 이란 ?. - PowerPoint PPT Presentation

Citation preview

Page 1: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

1/30

전북대학교 수학 통계정보과학부∙

SQL 실습

안 정 용

Page 2: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

2/30

SQL 개요 SQL 개요

• SQL(Structured Query Language) 이란 ?

• DBMS 표준 언어

• 이용자 ( 응용 프로그램 ) 와 DBMS 사이의 중간 다리 역할 담당• 데이터 정의 , 제어 , 조작 등의 기능 포함

SQLDatabase

ManagementSystem

• 고객정보 테이블에서 직업이 ‘학생’인 고객 검색

• Select * from Customer_Info where job=‘ 학생’

Page 3: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

3/30

• SQL 문장

· 데이터 정의문 - CREATE - DROP - ALTER

· 데이터베이스 객체 생성 , 삭제 , 갱신

- CREATE DATABASE ‘ 데이터베이스 _ 이름’

· 데이터 제어문 - GRANT - DENY - REVOKE

· 데이터베이스 객체 이용권한 부여

- GRANT CREATE TABLE TO ‘ 사용자 계정’

· 데이터 조작문 - SELECT - INSERT - UPDATE - DELETE

· 데이터 검색 , 삽입 , 갱신 , 삭제

- SELECT * FROM ‘ 테이블 _ 이름’

Page 4: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

4/30

데이터 정의문 데이터 정의문

• 데이터베이스 생성 및 삭제

· 데이터베이스 생성

예 : CREATE DATABASE TestDB

- TestDB 이름을 가진 데이터베이스 생성 - 데이터베이스의 크기 , 저장될 파일 이름 , 파일의 증가 단위 등을 지정할 수 있음 - 시스템에서 기본적으로 제공하는 것을 사용

· 데이터베이스 삭제

예 : DROP DATABASE TestDB

- TestDB 이름을 가진 데이터베이스 삭제

Page 5: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

5/30

• 테이블 생성 및 삭제

· 테이블 생성

CREATE TABLE 테이블 _ 이름 ( 필드 _ 이름 데이터 _ 타입 [ 제약조건 ] , 필드 _ 이름 데이터 _ 타입 [ 제약조건 ] , … 필드 _ 이름 데이터 _ 타입 [ 제약조건 ] )

- 데이터 _ 타입구분 데이터 타입 크기 (byte)

정수

intsmallinttinyintbit

4211

고정소수 numericdecimal

2~17

부동소수 floatreal

84

구분 데이터 타입 크기 (byte)

날짜 datetimesmalldatetime

84

문자char, varcharnchar, nvarchartext

0~80000~40000~2GB

이진 binaryimage

0~80000~2GB

화폐 moneysmallmoney

84

Page 6: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

6/30

- 제약조건구분 제약조건

기본 키 설정 primary key

외래 키 설정 foreign key references 참조 _ 테이블 _ 이름 ( 참조 _필드 )

널 값 허용하지 않을 때 not null

동일한 데이터 입력 방지 unique

기본 값 설정 default ‘ 기본 _ 값’

속성 속성명 데이터 타입 길이 제약사항

고객번호 CID char 6 PK

고객이름 Name char 10 not null

주소 Address char 20

전화번호 Tel char 15

생년월일 Bday datetime not null

주민등록번호 SID char 14 not null

직업 Job char 10

성별 Sex char 1 not null

결혼여부 Married bit

- 예 : 고객테이블

Page 7: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

7/30

- 예 : 고객테이블 생성

CREATE TABLE Customer_Info( CID char(6) PRIMARY KEY, Name char(10) not null, Address char(20) , Tel char(15) , Bday datetime not null, SID char(14) not null, Job char(10) , Sex char(1) not null, Married bit)

CREATE TABLE Customer_Info( CID char(6) not null, Name char(10) not null, Address char(20) , Tel char(15) , Bday datetime not null, SID char(14) not null, Job char(10) , Sex char(1) not null, Married bit, PRIMARY KEY (CID))

Page 8: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

8/30

· 테이블 변경 : 필드 추가 / 제거 , 데이터 타입 또는 크기 변경

예 : ALTER TABLE Customer_Info ALTER COLUMN NAME char(20)

- Customer_Info 테이블의 Name 필드의 크기를 20 으로 변경

· 테이블 제거

예 : DROP TABLE Customer_Info

- Customer_Info 테이블 제거

※ 기본 키나 외래 키가 포함되면 삭제 순서를 고려 - Customer_OnlineInfo, Customer_Info 에서 삭제 순서는 ?

DROP TABLE Customer_OnlineInfo DROP TABLE Customer_Info

Page 9: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

9/30

실습 환경 실습 환경

• 실습 환경

• Server Computer, DBMS : COMPSTAT 서버 이용 ( 전북대학교 )• Client 환경 : Web browser 이용

• 테이블 구성

Page 10: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

10/30

• 예제 데이터

• 실습 사이트

• compstat.chonbuk.ac.kr/dbbook

CID Name Address Tel Bday SID Job Sex Married

100001100002100003100004100005100006

:

김민주정영미최소영박진재이순석박진희

:

서울시 ..경기도 ..제주도 ..강원도 ..

충남 ..서울시 ..

:

423-8627321-4568624-2172543-9467254-9124459-2187

:

75-7-177-2-1

80-1-2560-5-282-6-175-4-5

:

75..77..80..60..82..75..

:

공무원회사원

학생공무원회사원회사원

:

111001:

010100:

- Table : Customer_Info

CID LID LPW EMail Jday

100001100002100003100005100006100008

:

champgimme

mac001black

soyoungjini:

cham999sweetpluto

white007sosomovie

:

[email protected]@[email protected]

[email protected]

[email protected] :

2000/2/12000/3/42000/4/1

2000/1/102000/2/22000/7/2

:

- Table : Customer_OnlineInfo

SaleID PID SID CID SDay Amount

123456789:

124012201230124012503010121012401230

:

211211211211211211211211211

:

100001100001100006100002100006100011100010100002100010

:

2000/3/32000/4/12000/4/42000/4/52000/4/62000/4/9

2000/4/112000/4/112000/4/12

:

18000130005000

18000100003000021000180005000

:

- Table : Sales

Page 11: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

11/30

데이터 조작문 데이터 조작문

• 데이터 검색 : SELECT 문

· 여러 테이블을 조합해서 사용자가 원하는 필드와 레코드를 추출

· 일반적인 형식 SELECT [DISTINCT] 필드 _ 리스트 FROM 테이블 _ 이름 [WHERE 조건 ] [GROUP BY 필드 _ 리스트 ] [HAVING 조건 ] [ORDER BY 필드 _ 리스트 [ASC|DESC] ]

- SELECT : 검색하고자 하는 필드 이름 명시

- FROM : 검색 테이블 이름 명시

- WHERE : 검색할 데이터의 검색 조건 지정

- GROUP BY : 그룹화 ( 분할 ) 하고자 하는 필드 이름 명시

- HAVING : GROUP BY 에서 명세된 그룹에 대한 검색 조건 명시

- ORDER BY : 정렬하고자 하는 기준 필드 이름 명시

Page 12: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

12/30

(1) 테이블의 일부 또는 전체 필드 검색

- 예 : 테이블 Customer_Info 에서 고객번호 , 이름 , 직업 필드의 데이터 검색

SELECT CID, Name, Job FROM Customer_Info

- 예 : 테이블 Customer_OnlineInfo 에서 전체 필드의 데이터 검색

SELECT ( all ) * FROM Customer_OnlineInfo

또는

SELECT CID, LID, LPW, Email, Jday FROM Customer_OnlineInfo

Page 13: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

13/30

(2) 레코드의 중복 제거 : DISTINCT

- 예 : 제품 구입을 한 고객 모두 검색 Sales 테이블의 고객번호들을 중복 없이 검색

SELECT DISTINCT CID FROM Sales

(3) 레코드의 조건 검색 : WHERE

- 예 1 : Customer_Info 테이블에서 직업이 ‘회사원’인 고객의 고객번호 (CID), 이름 (Name), 직업 (job), 결혼여부 (married) 검색

SELECT CID, Name, Job, Married FROM Customer_Info WHERE Job = ' 회사원 '

Page 14: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

14/30

- 예 2 : Customer_OnlineInfo 테이블에서 전자우편주소 (Email) 가 널 값이 아닌 레코드 검색

SELECT * FROM Customer_OnlineInfo WHERE Email is not NULL

- 예 3 : Customer_Score 테이블에서 Score 가 100 이상이고 200 이하인 레코드 검색

SELECT * FROM Customer_Score WHERE Score>=100 and Score<=200

※ 비교 , 논리 연산자

논리연산자 의미AND 논리곱OR 논리합NOT 부정

비교연산자 의미= 같다> 크다< 작다>= 크거나 같다<= 작거나 같다<> 같지 않다

Page 15: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

15/30

- 예 4 : LIKE 연산자 이용 · 특정 패턴의 문자열 검색

SELECT * SELECT * FROM Customer_Info FROM Customer_OnlineInfo WHERE Name LIKE ' 김 %' WHERE Email LIKE '%hotmail%'

- 예 5 : IN 연산자 이용 · 검색하고자 하는 값의 집합 이용

SELECT CID, Name, Job FROM Customer_Info WHERE Job IN (' 회사원 ', ' 공무원 ', ' 학생 ')

Page 16: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

16/30

(4) 데이터의 그룹화 : GROUP BY - 특정 필드의 값에 따라 데이터 그룹화 , 일반적으로 SQL 함수와 같이 사용

- 예 : Customer_Info 테이블에서 직업별 고객 빈도수 검색

SELECT Job, count(*) as freq FROM Customer_Info GROUP BY Job

(5) 데이터 그룹화의 조건검색 : HAVING - 각 그룹에 대한 조건 검색 - HAVING 절 다음에는 SELECT 다음에 명시된 필드 ( 또는 함수 ) 에 대해서만 조건을 줄 수

있음

- 예 : 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

Page 17: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

17/30

(6) 출력 순서 명시 : ORDER BY - 질의 결과의 레코드 정렬

- 예 : Customer_Info 테이블에서 고객들을 생년월일 순으로 검색

SELECT CID, Name, Bday FROM Customer_Info ORDER BY Bday ( ASC )

(7) 상위 레코드 선택 : SELECT TOP - 예 : Customer_OnlineInfo 테이블에서 2000 년 이후 가입한 고객 중 먼저 가입한 5 명 검색

SELECT TOP 5 * FROM Customer_OnlineInfo WHERE year(Jday) >= 2000 ORDER BY Jday

Page 18: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

18/30

(8) 여러 테이블에서 데이터 검색 : JOIN

- 관계형 데이터베이스 설계 시에 데이터의 중복을 피하고 데이터의 정확성을 높이기 위해 개체와 관계를 여러 테이블로 나누어 설계 - 따라서 여러 테이블을 조합해야 원하는 데이터 검색할 수 있음

- INNER JOIN - OUTER JOIN - CROSS JOIN

Page 19: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

19/30

① INNER JOIN - 기본적인 조인형태 , 조인하고자 하는 테이블을 연결하는 필드의 값이 같은 레코드 선택

- 예 : 테이블 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 또는 SELECT Customer_Info.CID, Name, LID, EMail FROM Customer_Info, Customer_OnlineInfo WHERE Customer_Info.CID= Customer_OnlineInfo.CID ORDER BY Customer_Info.CID 또는 SELECT C.CID, Name, LID, EMail FROM Customer_Info AS C, Customer_OnlineInfo AS CO WHERE C.CID= CO.CID ORDER BY C.CID

Page 20: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

20/30

② OUTER JOIN - 조인할 때 기준테이블을 설정하고 , 기준테이블의 모든 레코드와 다른 테이블에서 조인 조건을 만족하는 레코드 선택 - 기준테이블의 위치에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN 등이 있음

- 예 : 고객 정보에 온라인 정보를 추가해서 검색하고자 할 때 ( LEFT JOIN )

SELECT C.CID, Name, LID, EMail FROM Customer_Info AS C LEFT JOIN Customer_OnlineInfo AS CO ON C.CID= CO.CID 또는 SELECT C.CID, Name, LID, EMail FROM Customer_Info AS C, Customer_OnlineInfo AS CO WHERE C.CID *= CO.CID

- 예 : 고객 정보에 온라인 정보를 추가해서 검색하고자 할 때 ( RIGHT JOIN )

SELECT C.CID, Name, LID, EMail FROM Customer_OnlineInfo AS CO, Customer_Info AS C WHERE CO.CID =* C.CID

Page 21: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

21/30

(9) 중첩 질의 - WHERE 절에 완전한 하나의 SELECT 질의문이 포함되어 있는 형태 - 어떤 테이블내에 존재하는 레코드를 검색한 다음 이를 비교 조건에서 사용

- 예 : Customer_Info 테이블에도 존재하고 , Customer_Score 테이블에도 존재하는 고객 (온라인 고객이면서 구매 실적이 있는 고객 ) 의 명단 검색

SELECT CID, Name FROM Customer_Info as C WHERE EXISTS ( SELECT * FROM Customer_OnlineInfo as CO WHERE C.CID = CO.CID ) AND EXISTS ( SELECT * FROM Customer_Score as SC WHERE C.CID = SC.CID )

Page 22: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

22/30

• 데이터 삽입 : INSERT 문

· 테이블에 새로운 레코드 삽입

· 일반적인 형식 INSERT (INTO) [ ( 필드 _ 이름 [ , … n ] ) ] VALUES ( 데이터 [ , … n ] )

- 예 1 : Customer_Info 테이블에 고객 번호 , 고객 이름 , 생년월일 , 주민등록번호 , 성별이 (100005, ' 김철수 ', '82-6-1', '820601-1450512', 1) 인 레코드 삽입

INSERT INTO Customer_Info (CID, Name, Bday, SID, Sex) VALUES ('100005', ' 김철수 ', 82-6-1, '820601-1450512', 1)

- 예 2 : Customer_Info 테이블에서 남자 고객만 Customer_Male 테이블로 복사

INSERT INTO Customer_Male ( SELECT CID, Name, Address, Tel, Sex FROM Customer_Info WHERE Sex=0 )

Page 23: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

23/30

• 데이터 갱신 및 삭제 : UPDATE 문 , DELETE 문

- 예 1 : Customer_Info 테이블에서 고객번호가 100005 인 고객의 전화번호를 '254-4567', 직업을 ' 회사원 ' 으로 수정

UPDATE Customer_Info SET Tel='254-4567', Job=' 회사원 ' WHERE CID='100005'

- 예 2 : Customer_Info 테이블에서 고객번호가 100005 인 레코드를 삭제

DELETE Customer_Info WHERE CID='100005'

Page 24: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

24/30

SQL 함수 SQL 함수

• 스칼라 (Scalar) 함수

(1) 수학 함수

- 예 : 0 과 1 사이의 난수 생성

SELECT RAND() as RN

함 수 의 미

ABS(numeric_expr) 절대값

ACOS,ASIN,ATAN,ATN2,COS,COT,SIN,TAN(float_expr) 삼각함수 관련 값

CEILING, FLOOR(numeric_expr) ROUND(numeric_expr, length)

올림 , 내림반올림

EXP(float_expr)LOG, LOG10(float_expr)

지수자연로그 , 로그 값

RAND([seed]) 0 에서 1 사이의 난수

POWER(numeric_expr, length)SQRT(float_expr)

승자연로그 값

Page 25: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

25/30

(2) 문자열 함수

- 예 : Customer_OnlineInfo 테이블에서 LPW 필드의 길이 검색

SELECT CID, LEN(LPW) as LengthofPassword FROM Customer_OnlineInfo

함 수 의 미

LEN(string_expr) 문자열의 길이 (즉 문자의 개수 )

LOWER, UPPER(char_expr) 소문자 , 대문자로 변환

LTRIM, RTRIM(char_expr) 문자열 좌측 , 우측 공백 제거

REPLACE(expr1,expr2, expr3)expr1에서 expr2 문자열을 찾아 expr3 문자열로 바꿔준다

LEFT,RIGHT(str_expr, int_expr) 문자열의 왼쪽 , 오른쪽에서부터 정해진 자리수 만큼의 부분

STR(float_expr[,length[,decimal]]) 숫자 값을 문자열로 변환

Page 26: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

26/30

(3) 날짜 함수

- 예 : Customer_Info 테이블에서 고객들의 나이를 내림차순으로 검색

SELECT CID, Name, year(GETDATE())-year(Bday) as Age FROM Customer_Info ORDER BY Age DESC

함 수 의 미

DATEADD(datepart, number, date) datapart 자리에 숫자를 더한다

DATEDIFF(datepart, date1, date2) 두 날짜간의 차이를 나타낸다

GETDATE() 시스템의 날짜와 시각을 반환한다

YEAR, MONTH, DAY(date) 날짜에서 년 , 월 , 일을 반환한다

Page 27: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

27/30

• 통계 관련 함수

(1) 집계 함수

- 예 : Customer_Info 테이블의 전체 레코드 수 , 고객 나이의 표준편차를 계산

SELECT COUNT(*) as countAll, STDEV( year(GETDATE())-year(Bday)) as sampleSTDEV STDEVP( year(GETDATE())-year(Bday)) as popSTDEV FROM Customer_Info

함 수 의 미

AVGSUM

평균값합계

COUNTCOUNT(*)

전체 레코드 수NULL 값을 포함한 전체 레코드 수

MINMAX

최소값최대값

STDEVSTDEVP

표본 표준편차모집단 표준편차

VARVARP

분산모집단 분산

Page 28: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

28/30

(2) 다차원 분석 연산자 : ROLLUP, CUBE, COMPUTE

- GROUP BY 와 함께 데이터에 대한 2차적 요약

- 예 : Customer_Info 테이블과 Sales 테이블을 JOIN 하여 고객별 , 제품별 평균 구매액 산출

SELECT Name, PID, AVG(Amount) as averAmount FROM Customer_Info as C INNER JOIN Sales as S ON C.CID=S.CID GROUP BY Name, PID WITH CUBE ORDER BY Name

Page 29: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

29/30

SQL 활용 예 SQL 활용 예

• ASP : 고객정보 입력

<html>

<%userId = Trim(Request("userid"))Password = Trim(Request("password"))userName = Trim(Request("username")) : :email = Trim(Request("email"))

sql= " Insert into db_Users Values ( '"&userId&"' ,'"&Password&"', '"&userName&"', … , '"&email&"' )"

Set DBConn = Server.CreateObject("ADODB.CONNECTION")DBConn.Open Session("Dsn")

DBConn.Execute sql

Dbconn.CloseSet Dbconn=Nothing

%>

</html>

사용자 입력 데이터

SQL 문장

DB 연결

SQL 문 실행

Page 30: 전북대학교 수학 ∙통계정보과학부

SQL Workshop

The Korean

Statistical Society

30/30

• ASP : 로그인

<html>

<%userID = Trim(Request.Form("UserID"))userPW = Trim(Request.Form("Password"))

sql = "Select * FROM db_Users "sql = sql & " WHERE LID = '"&userID&"' and LPW='"&userPW&"' "

set rs = Server.CreateObject("ADODB.Recordset")rs.Open sql, Session("Dsn")

if not rs.EOF thenResponse.Redirect "../start.asp" ‘ 사용자가 존재하면

else

Response.redirect "error.asp" ‘ 사용자가 존재하지 않으면end if

' 사용자가 존재하지 않으면 %>

</html>

사용자 입력 데이터

SQL 문장

DB 연결 및 SQL 문 실행