STUDENT(Id, Name, Dept)
<202300001, "Park", "Media">
CREATE TABLE COMPANY.EMPLOYEE
또는 CREATE TABLE COMPANY
CONSTRAINT
구문으로 constraint에 이름을 붙일수도 있음:CREATE TABLE EMPLOYEE(
Ssn CHAR(9) NOT NULL,
...
CONSTRAINT EMPPK
PRIMARY KEY (Ssn),
CONSTRAINT EMPSUPERFK
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
ON DELETE SET NULL
ON UPDATE CASCADE
);
ALTER TABLE
해 FK를 추가하면 된다.SELECT <attribute list> FROM <table list> WHERE <condition>;
.FROM EMPLOYEE, DEPARTMENT
쿼리는 두 테이블 사이 모든 쌍이 포함된 테이블을 만듦. 즉, EMPLOYEE
와 DEPARTMENT
의 cartesian product.SELECT Fname, Lname, Address
FROM EMPLOYEE E, DEPARTMENT D
WHERE D.Dname='Research' AND D.Dnumber=E.Dno;
WHERE
절이 필수.IS
연산을 해야한다:
SELECT * FROM EMPLOYEE WHERE Pno IS NULL;
WHERE
절 안에 완성된 형태의 select-from-where 블록을 중첩시킬 수 있다.IN
명령을 이용해 튜플 집합에서 대상 튜플을 비교할 수 있음.SELECT DISTINCT Essn
FROM WORKS_ON
WHERE (Pno, Hours) IN (SELECT Pno, Hours
FROM WORKS_ON
WHERE Essn='123456789');
DISTINCT
를 하면 중복된 값이 제거된다.UNION
, INTERSECT
도 가능.(SELECT DISTINCT Pnumber
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE Dnum = Dnumber AND Mgr_ssn = Ssn AND Lname = 'Smith')
UNION
(SELECT DISTINCT Pnumber
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE Pnumber = Pno AND Essn = Ssn AND Lname = 'Smith');
NOT
) EXISTS
SELECT Fname, Lname
FROM Employee
WHERE NOT EXISTS (
(SELECT Pnumber FROM PROJECT WHERE Dno = 5)
EXCEPT (SELECT Pno FROM WORKS_ON WHERE Ssn = ESsn)
);
INNER JOIN
:
SELECT * FROM EMPLOYEE E INNER JOIN DEPENDENT D ON E.Ssn = D.Essn;
NATURAL JOIN
을 할 수 있다.FULL OUTER JOIN
LEFT OUTER JOIN
:
SELECT * FROM EMPLOYEE E LEFT JOIN DEPENDENT D ON E.Ssn = D.Essn;
RIGHT OUTER JOIN
COUNT
, SUM
, MAX
, MIN
, AVG
등 함수로 여러 튜플을 하나로 요약할 수 있다.SELECT Dno, COUNT(*), AVG(Salary) FROM EMPLOYEE GROUP BY Dno;
Dno
)을 함께 선택해야 어떤 튜플이 어떤 조건에 속하는지 알 수 있음.HAVING
절에 작성한다:SELECT Pnumber, Pname, COUNT(*)
FROM PROJECT, WORKS_ON
WHERE Pnumber = Pno
GROUP BY Pnumber, Pname
HAVING COUNT(*) > 2;
GROUP BY
하면?WHERE
는 조심해야 한다. 이미 필터링된 상태에서 그루핑을 하면 HAVING
조건을 만족하지 못할 수 있음:SELECT Dno, COUNT(*)
FROM EMPLOYEE
WHERE Salary > 40000 AND Dno IN
(SELECT Dno FROM EMPLOYEE GROUP BY Dno HAVING COUNT(*) > 5)
GROUP BY Dno;
GROUP BY
되지 않은 컬럼은 SELECT
할 수 없다.ALTER TALBE <table> <ADD|DROP> <column> [type] [CASCADE|RESTRICT]
: 컬럼 추가/제거.
CASCADE
: 삭제할 컬럼에 있는 모든 제약과 뷰를 제거한다.RESTRICT
: 삭제할 컬럼이 제약을 위반하면 삭제를 막는다.ALTER TALBE <table> ALTER COLUMN <column> <SET|DROP> DEFAULT [default]
: 디폴트 값 추가/제거.DROP TABLE <table>
: 테이블 삭제.