Download presentation
Presentation is loading. Please wait.
1
SQL: 데이터 정의, 제약사항, 기본 질의와 갱신
데이터베이스 (Databases) SQL: 데이터 정의, 제약사항, 기본 질의와 갱신 문양세 강원대학교 IT대학 컴퓨터과학전공
2
COMPANY 데이터베이스 SQL Part1
3
기본 SQL 강의 순서 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
4
SQL 개요 SQL의 유래 (Wiki) SQL의 진화 (Wiki) SQL 사용 용어
SQL Part1 SQL의 유래 (Wiki) Structured Query Language IBM 연구소에서 설계 및 구현 데이터 정의어와 조작어를 모두 포함 SQL의 진화 (Wiki) 1986: SQL1(SQL-86) 1992: SQL2(SQL-92) 현재의 표준: SQL3라고 불렸던 SQL-99 SQL 사용 용어 릴레이션 = 테이블 투플 = 행 애트리뷰트 = 열
5
SQL에서 스키마와 카타로그 SQL Part1 SQL 스키마 스키마 이름으로 식별 스키마 각 원소에 대한 기술문 뿐 아니라 스키마를 소유하는 사용자나 계정과 관련된 권한부여 식별자도 포함함 스키마 원소: 테이블, 제약조건, 뷰(가상테이블), 도메인, 권한부여 등 CREATE SCHEMA 문을 이용하여 생성함 예: JSMITH라는 권한부여 식별자를 갖는 사용자 소유의 스키마 COMPANY를 생성 CREATE SCHEMA COMPANY AUTHORIZATION JSMITH ; 카탈로그 특별 스키마인 “INFORMATION_SCHEMA”에 포함하며, 이는 카타로그 내 모든 스키마들과 이들 스키마 내 모든 원소 기술문들에 대한 정보를 제공함
6
CREATE TABLE 사용법 새로운 릴레이션을 생성하는 데 사용 릴레이션의 이름 명시
SQL Part1 새로운 릴레이션을 생성하는 데 사용 릴레이션의 이름 명시 애트리뷰트 이름, 값집합, NOT NULL 제약조건 명시 키, 엔티티 무결성, 참조 무결성 제약조건 명시 예: CREATE TABLE EMPLOYEE… (스키마 표현을 생략) CREATE TABLE COMPANY.EMPLOYEE… (스키마를 명시적으로 표현) SCHEMA
7
CREATE TABLE 사용 예제 (1/6) CREATE TABLE EMPLOYEE
SQL Part1 CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, MINIT CHAR, LNAME VARCHAR(15) NOT NULL, SSN CHAR(9) NOT NULL, BDATE DATE, ADDRESS VARCHAR(30), SEX CHAR, SALARY DECIMAL(10, 2), SUPERSSN CHAR(9), DNO INT NOT NULL, PRIMARY KEY (SSN), FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN), FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER)) ;
8
CREATE TABLE 사용 예제 (2/6) CREATE TABLE DEPARTMENT
SQL Part1 CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL, MGRSTARTDATE DATE, PRIMARY KEY (DNUMBER), UNIQUE (DNAME), FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN)) ;
9
CREATE TABLE 사용 예제 (3/6) CREATE TABLE DEPT_LOCATONS
SQL Part1 CREATE TABLE DEPT_LOCATONS ( DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATON), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER));
10
CREATE TABLE 사용 예제 (4/6) CREATE TABLE PROJECT
SQL Part1 CREATE TABLE PROJECT ( PNAME VARCHAR(15) NOT NULL, PNUMBER INT NOT NULL, PLOCATION VARCHAR(15), DNUM INT NOT NULL, PRIMARY KEY (PNUMBER), UNIQUE (PNAME), FOREIGN KEY (DNUM) REFERENCES DEPARTMENT (DNUMBER)) ;
11
CREATE TABLE 사용 예제 (5/6) CREATE TABLE WORKS_ON
SQL Part1 CREATE TABLE WORKS_ON ( ESSN CHAR(9) NOT NULL, PNO INT NOT NULL, HOURS DECIMAL(3, 1) NOT NULL, PRIMARY KEY (ESSN, PNO), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (PNO) REFERENCES PROJECT (PNUMBER)) ; * DECIMAL(3,1): 에서 3는 세 자리, 1은 최소 한 시간
12
CREATE TABLE 사용 예제 (6/6) CREATE TABLE DEPENDENT
SQL Part1 CREATE TABLE DEPENDENT ( ESSN CHAR(9) NOT NULL, DEPENDENT_NAME VARCHAR(15) NOT NULL, SEX CHAR, BDATE DATE, REATIONSHIP VARCHAR(8), PRIMARY KEY (ESSN, DEPENDENT_NAME), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN)) ;
13
SQL에서 애트리뷰트 타입과 도메인 (1/2) 애트리뷰트의 데이터 타입 정수: INTEGER, INT, SMALLINT
SQL Part1 애트리뷰트의 데이터 타입 정수: INTEGER, INT, SMALLINT 실수: FLOAT, REAL, DOUBLE PRECISION 고정길이 문자열: CHAR(n), CHARACTER(n) 가변길이 문자열: VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n) (문자열 연결 연산:||, 예: ‘abc’||’XYZ’는 ‘abcXYZ’와 동일함) 비트열: BIT(n) -- 고정길이, BIT VARYING(n) -- 가변길이 불리언: BOOLEAN -- True, False, Unknown 날짜와 시간: DATE(YYYY-MM-DD), TIME(HH:MM:SS) 타임스탬프: DATE+TIME+초의 소수점 이하 자리 (예: :12: )
14
SQL에서 애트리뷰트 타입과 도메인 (2/2) CREATE DOMAIN 새로운 도메인(즉, 데이터 타입)을 생성하는 데 사용
SQL Part1 CREATE DOMAIN 새로운 도메인(즉, 데이터 타입)을 생성하는 데 사용 도메인의 이름과 데이터 타입 명시 새로 생성된 도메인을 테이블 생성 시 데이터 타입으로 사용 가능 예: CRAETE DOMAIN SSN_TYPE AS CHAR(9) 새롭게 생성된 SSN_TYPE을 테이블 생성 시 데이터 타입으로 변경 가능 C언어에서 typedef에 해당함
15
기본 SQL 강의 순서 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
16
애트리뷰트 제약조건과 디폴트 값 명시 SQL은 애트리뷰트 값으로 NULL을 허용함 디폴트 값 명시
SQL Part1 SQL은 애트리뷰트 값으로 NULL을 허용함 NOT NULL 제약조건을 지정하여 애트리뷰트에 NULL값을 허용하지 않을 수도 있음 예: CREATE TABLE DEPARTMENT ( DNUMBER INT NOT NULL, …) ; 디폴트 값 명시 DEFAULT문을 이용하여 애트리뷰트의 디폴트 값을 명시 예: CREATE TABLE EMPLOYEE ( DNO INT DEFAULT 1, …) ;
17
키와 참조 무결성 제약조건의 명시 (1/2) PRIMARY KEY 절 UNIQUE 절
SQL Part1 PRIMARY KEY 절 릴레이션의 기본 키를 구성하는 하나 이상의 애트리뷰트들을 명시 예: CREATE TABLE DEPARTMENT ( DNUMBER INTEGER PRIMARY KEY, …) ; DEPARTMENT의 기본 키로 DNUMBER를 설정 UNIQUE 절 대체키(또는 보조키)를 명시 예: DNAME VARCHAR(15) UNIQUE; DNAME은 유일해야 함(즉 대체키 또는 보조키 이어야 함)을 명시
18
키와 참조 무결성 제약조건의 명시 (2/2) FOREIGN KEY 절 참조 무결성 지정
SQL Part1 FOREIGN KEY 절 참조 무결성 지정 외래 키를 정의할 때 참조 무결성의 위반 시 취할 동작을 명시할 수 있음 위반의 종류: ON DELETE, ON UPDATE 동작의 종류: SET NULL, SET DEFAULT, CASCADE 예: ON DELETE CASCADE: 삭제되는 투플을 참조하고 있는 모든 투플을 삭제 ON UPDATE CASCADE: 수정되는 투플을 참조하는 모든 투플의 외래키 값을 수정된 투플의 새롭게 갱신된 기본키 값으로 수정
19
제약조건에 이름 부여 SQL Part1 CONSTRAINT 절에 이름 부여 예: CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN), ON DELETE SET NULL ON UPDATE CASCADE;
20
키 제약조건과 디폴트 값 명시 예 (1/3) CREATE TABLE EMPLOYEE
SQL Part1 CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, … DNO INT NOT NULL DEFAULT 1, CONSTRAINT EMPPK PRIMARY KEY (SSN), CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT EMPDEPTFK FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER) ON DELETE SET DEFAULT ON UPDATE CASCADE) ;
21
키 제약조건과 디폴트 값 명시 예 (2/3) CREATE TABLE DEPARTMENT
SQL Part1 CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL DEFAULT “ ” MGRSTARTDATE DATE, CONSTRAINT DEPTPK PRIMARY KEY (DNUMBER), CONSTRAINT DEPTSK UNIQUE (DNAME), CONSTRAINT DEPTMGRFK FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN) ON DELETE SET DEFAULT ON UPDATE CASCADE) ; 해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 기본값으로 변경하라
22
키 제약조건과 디폴트 값 명시 예 (3/3) CREATE TABLE DEPT_LOCATONS
SQL Part1 CREATE TABLE DEPT_LOCATONS ( DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATON), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER) ON DELETE CASCADE ON UPDATE CASCADE) ; 해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 삭제하라 해당 투플이 변경되면 그 투플을 참조하고 있는 모든 투플을 변경하라
23
CHECK를 이용한 제약조건 명시 테이블(투플 기반) 제약조건 명시 도메인 값 제약 CREATE TABLE 문 끝 부분에 명시
SQL Part1 테이블(투플 기반) 제약조건 명시 CREATE TABLE 문 끝 부분에 명시 예: 매니저의 시작날짜가 부서의 창설일보다 늦은 값을 가져야 한다. CHECK(DEPT_CREATE_DATE < MGRSTARTDATE); 도메인 값 제약 CHECK문을 이용하여 애트리뷰트의 값집합을 제약 예: CREATE TABLE DEPARTMENT ( DNUMBER INT CHECK(DNUMBER > 0 AND DNUMBER < 21), …) ;
24
기본 SQL 강의 순서 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
25
SQL의 기본 질의 – SELECT문 데이터베이스에서 정보를 검색하는 기본 문장
SQL Part1 데이터베이스에서 정보를 검색하는 기본 문장 여기서의 SELECT문은 관계대수의 실렉트 연산과 동일하지는 않음 제6장에서 논의할 관계 모델과는 달리 SQL의 테이블 (릴레이션)은 모든 애트리뷰트들의 값이 동일한 투플을 하나 이상 가질 수도 있음 따라서 SQL 테이블은 투플들의 집합이 아니라 투플들의 다중집합 (multi-set or bag)임 사용자는 키 제약조건이나 DISTINCT 선택사항을 사용하여 SQL 릴레이션들을 집합으로 제한할 수 있음
26
SELECT-FROM-WHERE 구조 SQL Part1 SELECT 문의 구조자료 SELECT <애트리뷰트 목록> FROM <테이블 목록> WHERE <조건> <애트리뷰트 목록>: 질의 결과에 나타나는 애트리뷰트 이름 목록 <테이블 목록>: 질의 대상이 되는 릴레이션 목록 <조건>: 질의 결과의 투플들이 만족해야 하는 조건(부울)식 SQL 질의와 관계 대수 SQL은 관계 대수의 SELECT, PROJECT, JOIN 명령으로 표현 가능함 SELECT 절: 프로젝션 애트리뷰트에 해당 WHERE 절: 선택조건, 조인조건에 해당 SQL 질의의 결과 동일한 속성값을 가지는 투플들이 중복될 수 있음 (DISTINCT 사용하면 …)
27
SELECT-FROM-WHERE 예제 (1/3)
SQL Part1 질의 0 이름이 ‘John B. Smith’인 사원의 생일(BDATE)과 주소(ADDRESS)를 검색하시오. SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME=‘John’ AND MINIT=‘B’ AND LNAME=‘Smith’ ; 관계대수 표현 ΠBDATE, ADDRESS(σFNAME=‘John’ AND MINIT=‘B’ AND LNAME=‘Smith’(EMPLOYEE))
28
SELECT-FROM-WHERE 예제 (2/3)
SQL Part1 질의 1 ‘Research’ 부서에서 일하는 모든 사원의 이름(FNAME, LNAME)과 주소를 검색하시오. SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME=‘Research’ AND DNUMBER=DNO ; 관계대수 연산 SELECT-PROJECT-JOIN과 유사 SELECT 절은 관계 대수의 PROJECT 연산에 해당 WHERE 절에서 DNAME=‘Research’은 선택조건, 관계대수에서 SELECT 연산에 해당 WHERE 절에서 DNUMBER=DNO는 조인조건, 관계대수의 JOIN 연산에 해당
29
SELECT-FROM-WHERE 예제 (3/3)
SQL Part1 질의 2 ‘Stafford’에 위치한 모든 프로젝트에 대하여 프로젝트 번호, 담당부서 번호, 부서 관리자의 성, 주소, 생일을 검색하라. SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=‘Stafford’ ; 두 개의 조인조건이 존재 조인조건 DNUM=DNUMBER는 프로젝트와 담당 부서를 조인 조인조건 MGRSSN=SSN은 부서와 담당 관리자를 조인
30
모호한 애트리뷰트 이름과 별명 사용 (1/3) 동일한 이름을 갖는 애트리뷰트의 사용 질의 1A
SQL Part1 동일한 이름을 갖는 애트리뷰트의 사용 서로 다른 릴레이션에서 동일한 이름을 갖는 애트리뷰트가 사용될 수 있음 릴레이션 이름과 함께 애트리뷰트 이름을 사용함으로써 모호함을 방지해야 함 질의 작성 시 릴레이션 이름 다음에 점(.)을 두고 애트리뷰트 이름을 명시함 질의 1A ‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오. SELECT FNAME, EMPLOYEE.NAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DEPARTMENT.NAME=‘Research’ AND DEPARTMENT.DNUMBER=EMPLOYEE.DNUMBER ;
31
모호한 애트리뷰트 이름과 별명 사용 (2/3) 동일한 릴레이션을 두 번 참조하는 경우 질의 8
SQL Part1 동일한 릴레이션을 두 번 참조하는 경우 동일한 릴레이션을 두 번 참조하는 경우에도 모호성이 발생함 이 경우에도 모호함을 방지하기 위하여 릴레이션 이름의 별명을 애트리뷰트 이름 앞에 붙여서 사용함 질의 8 종업원에 대해, 종업원의 성과 이름, 직속 감독자의 성과 이름을 검색하시오. SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE E, EMPLOYEE S // EMPLOYEE에 대한 별명 // EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN ; 위 예는 EMPLOYEE에 대해서 두 개의 별명(alias) E와 S를 선언하여 사용함
32
모호한 애트리뷰트 이름과 별명 사용 (3/3) 릴레이션에 대한 별명
SQL Part1 릴레이션에 대한 별명 키워드 AS의 이용 From 절의 릴레이션 이름 바로 다음에 오거나, EMPLOYEE AS E 처럼 키워드 AS를 이용해서 릴레이션과 연관시킴 애트리뷰트 이름 재명명 질의 내에서 별명을 주어 릴레이션의 애트리뷰트를 재명명할 수도 있음 EMPLOYEE AS E(FN, MI, LN, SSN, BD, ADDR, SEX, SAL, SSSN, DNO) ; 별명 FN은 FNAME, MI은 MINIT, LN은 LNAME 대신 이용 질의 1B – 별명을 이용하여 질의 1A를 간단히 나타낼 수 있음 SELECT E.FNAME, E.NAME, E.ADDRESS FROM EMPLOYEE E, DEPARTMENT D // EMPLOYEE AS E, DEPARTMENT AS D WHERE D.NAME=‘Research’ AND D.DNUMBER=E.DNO ;
33
WHERE의 생략과 ‘’의 사용 (1/3) WHERE 절의 생략 질의 9 질의 10
SQL Part1 WHERE 절의 생략 SQL에서 WHERE 절을 생략하면 투플 선택에 대한 조건이 없다는 것을 의미함 FROM 절에 있는 테이블의 모든 투플이 조건을 만족하게 됨 질의 9 데이터베이스에서 EMPLOYEE의 모든 SSN을 선택하시오. SELECT SSN FROM EMPLOYEE ; 질의 10 EMPLOYEE의 SSN과 DEPARTMENT의 DNAME의 모든 조합을 선택하시오. SELECT SSN, DNAME FROM EMPLOYEE, DEPARTMENT ;
34
WHERE의 생략과 ‘’의 사용 (2/3) 선택된 투플들의 모든 애트리뷰트 값들을 검색하는 경우 질의 1C
SQL Part1 선택된 투플들의 모든 애트리뷰트 값들을 검색하는 경우 모든 애트리뷰트 이름을 명시적으로 열거하지 않고 단지 ‘’를 사용함 질의 1C 5번 DEPARTMENT에서 일하는 EMPLOYEE 투플들의 모든 애트리뷰트 값들을 검색하라 SELECT FROM EMPLOYEE WHERE DNO=5 ;
35
WHERE의 생략과 ‘’의 사용 (3/3) 질의 1D 질의 10A
SQL Part1 질의 1D ‘Research’ 부서에서 일하는 모든 종업원들에 대하여 EMPLOYEE의 모든 애트리뷰트들과 DEPARTMENT의 모든 애트리뷰트들을 검색하라. SELECT FROM EMPLOYEE, DEPARTMENT WHERE DNAME=‘Research’ AND DNO=DNUMBER ; 질의 10A 릴레이션 EMPLOYEE와 DEPARTMENT의 카티션 프로덕트 결과를 모두 검색하라. FROM EMPLOYEE, DEPARTMENT ;
36
SQL에서 집합으로서의 테이블 (1/3) 투플의 중복허용 질의 11 질의 11A
SQL Part1 투플의 중복허용 릴레이션이나 질의의 결과로 중복된 투플들이 나타날 수 있으므로, SQL에서는 일반적으로 릴레이션을 집합으로 취급하지 않음 중복된 투플의 삭제 SELECT 항목에서 키워드 DISTINCT를 사용 DISTINCT는 질의 결과에서 유일한 투플들만 남기라는 의미의 키워드임 질의 11 모든 사원의 급여를 검색하라. (ALL 생략 가능) SELECT ALL SALARY FROM EMPLOYEE ; 질의 11A 모든 사원의 구별되는 급여를 검색하라. SELECT DISTINCT SALARY FROM EMPLOYEE ;
37
SQL에서 집합으로서의 테이블 (2/3) SQL에서의 집합 연산 질의 4A
SQL Part1 SQL에서의 집합 연산 합집합(UNION), 차집합(EXCEPT), 교집합(INTERSECT) 릴레이션에 대한 집합 연산의 결과는 투플들의 다중집합임 Note: The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL. 질의 4A 성이 'Smith'인 종업원(일반 직원 혹은 프로젝트를 담당하는 부서의 관리자)이 참여하는 프로젝트의 프로젝트 번호 목록을 작성하시오. ( SELECT DISTINCT PNUMBER // Smith가 관리자인 projects FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith') UNION ( SELECT DISTINCT PNUMBER // Smith가 참여하는 projects FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='Smith') ;
38
SQL에서 집합으로서의 테이블 (3/3) 다중집합 연산: UNION ALL, EXCEPT ALL, INTERSECT ALL
SQL Part1 다중집합 연산: UNION ALL, EXCEPT ALL, INTERSECT ALL 연산 결과는 중복을 제거하지 않은 다중집합임
39
부분 문자열 패턴 비교와 산술 연산자 (1/3) 문자열에 대한 비교
SQL Part1 문자열에 대한 비교 SQL은 LIKE 비교 연산자를 사용하여 문자열(혹은 부분 문자열)에 대해 비교조건을 적용할 수 있음 부분 문자열을 표현할 때 ‘%’는 임의의 개수의 문자를 의미하고, ‘_’는 임의의 한 문자를 의미함
40
부분 문자열 패턴 비교와 산술 연산자 (2/3) 질의 12 질의 12 A
SQL-99 질의 12 주소가 Houston, Texas인 모든 종업원을 검색하시오. SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE '%Houston, TX%’ ; [WHERE ADDRESS LIKE ‘*Houston, TX*’ ;] // 다른 버전의 예 질의 12 A 1950년대에 태어난 모든 사원을 검색하라. WHERE BDATE LIKE ‘__5________’ ; [WHERE BDATE LIKE ‘??5????????’ ;] // 다른 버전의 예
41
부분 문자열 패턴 비교와 산술 연산자 (3/3) 질의內 산술식 허용 질의 13 질의 14
SQL Part1 질의內 산술식 허용 질의 13 ‘ProductX’ 프로젝트에 참여하는 모든 사원의 급여를 10% 올린 경우의 급여를 검색하라. SELECT E.FNAME, E.LNAME, 1.1*E.SALARY AS INCREASED_SAL FROM EMPLOYEE AS E, WORKS_ON AS W, PROJECT AS P WHERE E.SSN=W.ESSN AND W.PNO=P.PNUMBER AND P.PNAME=‘ProductX’ ; 질의 14 급여가 30,000$에서 40,000$ 사이에 있는 5번 부서의 모든 사원을 검색하라. SELECT * FROM EMPLOYEE WHERE (SALARY BETWEEN AND 40000) AND DNO=5
42
질의 결과의 정렬 (1/2) 질의 결과의 정렬 ORDER BY 절 하나 이상의 애트리뷰트 값 순서로 질의 결과 투플을 정렬
SQL-99 질의 결과의 정렬 ORDER BY 절 하나 이상의 애트리뷰트 값 순서로 질의 결과 투플을 정렬 Default 정렬은 오름차순(ASC)임 키워드 DESC: 내림차순으로 정렬 – Descending 키워드 ASC: 오름차순 정렬 – Ascending 예: ORDER BY DNAME DESC, LNAME ASC, FNAME ASC
43
질의 결과의 정렬 (2/2) SQL Part1 질의 15 프로젝트에 참여하는 종업원을 부서의 알파벳 순서대로, 각 부서 내에서는 성과 이름의 알파벳 순서대로 출력하시오. SELECT DNAME, LNAME, FNAME, PNAME FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME, FNAME ; 정렬 순서 변경 예제: ORDER BY DNAME DESC , LNAME ASC, FNAME ASC;
44
기본 SQL 강의 순서 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
45
삽입, 삭제, 갱신 구문 SQL Part1 INSERT 명령 DELETE 명령 UPDATE 명령
46
INSERT 구문 (1/3) INSERT의 간단한 형식은 릴레이션에 투플 하나를 추가하는 것임
SQL Part1 INSERT의 간단한 형식은 릴레이션에 투플 하나를 추가하는 것임 삽입하는 투플 값은 CREATE TABLE 명령에서 지정한 애트리뷰트 순서와 동일하게 지정해야 함 U1: INSERT INTO EMPLOYEE VALUES (‘Richard’,‘K’,‘Marini’,‘ ’,‘30-DEC-52’, ‘98 Oak Forest, Katy, TX’,‘M’,37000,‘ ’,4) ; 값들의 순서를 애트리뷰트 순서와 다르게 지정하려면 INSERT 문장에서 애트리뷰트 이름을 명시해야 함 U1A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO, SSN) VALUES (FNAME=‘Richard’, LNAME=‘Marini’,DNO= 4, SSN=‘ ’) ; 이름을 명시하지 않은 애트리뷰트들은 NULL이나 DEFAULT 값을 가짐
47
INSERT 구문 (2/3) 무결성 조건 DDL에서 무결성 제약조건을 지정할 수 있으며, 이 경우 이를 만족해야 함
SQL Part1 무결성 조건 DDL에서 무결성 제약조건을 지정할 수 있으며, 이 경우 이를 만족해야 함 그러나 DBMS에 따라서 효율성 때문에 일부 제약조건들을 지원하지 않을 수 있음 2번 부서가 존재하지 않으므로 삽입이 될 수 없음 U2: INSERT INTO EMPLOYEE (FNAME, LNAME, SSN, DNO) VALUES (‘Robert’, ‘Hatcher’, ‘ ’, 2) ; 기본키인 SSN이 Null값이므로 삽입이 될 수 없음 U2A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO) VALUES (‘Robert’, ‘Hatcher’, 5) ;
48
INSERT 구문 (3/3) SELECT와 결합된 INSERT 명령
SQL Part1 SELECT와 결합된 INSERT 명령 질의의 결과로 생성된 다중 투플을 또 다른 릴레이션에 삽입하는 경우에 SELECT와 INSERT가 결합된 문장을 사용함 U3A: CREATE TABLE WORKS_ON_INFO ( EMP_NAME VARCHAR(15), PROJ_NAME VARCHAR(15), HOURS_PER_WEEK DECIMAL(3,1) ) ; U3B: INSERT INTO WORKS_ON_INFO (EMP_NAME, PROJ_NAME, HOURS_PER_WEEK) SELECT E.LNAME, P.PNAME, W.HOURS FROM PROJECT P, WORKS_ON W, EMPLOYEE E WHERE P.PNUMBER=W.PNO AND W.ESSN=E.SSN;
49
COMPANY 데이터베이스 SQL Part1
50
DELETE 구문 DELETE 명령은 릴레이션에서 투플(들)을 제거하는 명령임
SQL Part1 DELETE 명령은 릴레이션에서 투플(들)을 제거하는 명령임 삭제할 투플에 대한 조건은 WHERE 절에서 명시함 한번의 DELETE 명령으로 WHERE 절의 조건을 만족하는 투플을 모두 삭제함 U4A: DELETE FROM EMPLOYEE WHERE LNAME=‘Brown’ ; U4B: DELETE FROM EMPLOYEE WHERE SSN=‘ ’ ; U4C: DELETE FROM EMPLOYEE WHERE DNO=5; WHERE 절을 생략한 경우에는 테이블내의 모든 투플을 삭제하며, 테이블은 데이터베이스 내에서 빈 테이블로 남게 됨 U4D: DELETE FROM EMPLOYEE;
51
UPDATE 구문 (1/2) UPDATE 명령은 투플의 애트리뷰트 값을 수정하기 위해 사용함
SQL Part1 UPDATE 명령은 투플의 애트리뷰트 값을 수정하기 위해 사용함 WHERE 절은 한 릴레이션에서 수정할 투플을 선택하는데 사용됨 SET절은 변경할 애트리뷰트와 그들의 새로운 값을 명시함 예: PROJECT 테이블에서 PNUMBER가 10인 투플에 대하여 PLOCATION을 ‘Bellaire’로 변경하고, 담당 부서인 DNUM을 5로 변경하라. U5: UPDATE PROJECT SET PLOCATION=‘Bellaire’, DNUM=5 WHERE PNUMBER=10 ;
52
UPDATE 구문 (2/2) SQL Part1 예: ‘Research’ 부서(DNO=5)에 있는 모든 종업원들의 봉급을 10% 인상하라. U6: UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE DNO = 5 ;
53
기본 SQL 강의 순서 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
54
SQL의 기타 기능 권한 기능 호스트 언어와 결합되어 사용 트랜잭션 기능 VIEW 관련 명령어 (TABLE과 유사)
SQL Part1 권한 기능 SQL은 데이터베이스 사용자에게 권한을 부여하고 취소하는 기능을 제공함 호스트 언어와 결합되어 사용 SQL은 C, C++, JAVA, PASCAL 등과 같은 범용 프로그래밍 언어 내에서 사용될 수 있음 Embedded SQL/C, C++, COBOL, JAVA, PASCAL 트랜잭션 기능 SQL은 트랜잭션 제어 명령문을 가짐 – 동시성 제어와 회복 VIEW 관련 명령어 (TABLE과 유사) 기타 유용한 명령어 상용 DBMS는 SQL 명령 이외에도 물리적 데이터베이스 설계 매개변수와 릴레이션들을 위한 파일 구조, 인덱스와 같은 접근경로를 명시하기 위한 명령어의 집합을 가지고 있음
55
권한 기능의 예제 화면 SQL Part1
56
Embedded SQL 예제: C SQL Part1
57
Embedded SQL 예제: PHP <html> <body> <?PHP
SQL Part1 <html> <body> <?PHP $conn = mysql_connect (‘localhost’, ‘root’, ‘apmsetup’); $db_status = mysql_select_db (‘goods’); if (!$db_status) { error (“DB_ERROR”); exit; } $query = “INSERT INTO fruit VALUES “ . “(‘$name’, $price, ‘$color’, ‘$country’)”; $result = mysql_query ($query); if ($result) print “입력되었습니다.<br>”; else print “입력되지 않았습니다.<br>”; ?> </body> </html>
58
트랜젹션 제어 명령문 SQL Part1
59
SQL VIEW (1/2) View의 특성 명령어
SQL Part1 View의 특성 SQL에서 뷰는 다른 테이블들에서 유도된 “가상” 테이블 - 실제로 저장되지는 않음 기본 테이블들의 열로 구성 뷰에 대한 질의는 아무런 제한을 받지 않음 몇 개 연산들을 뷰로 표현하여 사용하는데 편리함 데이터 접근제어로 보안성 제공 뷰에 적용할 수 있는 갱신(삽입, 삭제) 연산들은 제한됨 -- 물리적인 형태로 저장되지는 않기 때문에, 뷰는 일반적인 Alter 문으로 변경할 수 없음 명령어 뷰를 정의하는 SQL 명령: CREATE VIEW <view-name> 뷰를 삭제하는 SQL 명령: DROP VIEW <view-name>
60
SQL VIEW (2/2) SQL Part1
61
기타 명령어 (인덱스 생성/삭제) SQL Part1
62
요약 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의
SQL Part1 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서의 기본 검색 질의 SQL에서 삽입, 삭제, 갱신문 SQL의 기타기능
Similar presentations