질문이 4가지 있습니다.
문제에 제시된 조건에 따라서 제가 SQL 코드를 짜봤는데
답과는 조금 달라서 제가 짠 코드도 혹시 정답이 될 수 있는지 여쭙고 싶습니다.
CREATE TABLE patient
( id CHAR(5) NOT NULL,
name CHAR(10),
sex CHAR(1),
phone CHAR(20),
PRIMARY KEY (id),
FOREIGN KEY (id)
REFERENCES doctor (doctor_id),
CONSTRAINT sex_ck
CHECK (VALUE IN '('남', '여'));
가장 궁금한점은 굳이 조건에 기본키에 NOT NULL을 명시하지 않으면 코드에 기록하지 않아도 되는지와
외래키 참조선언을 할 때 답처럼 CONSTRAINT 절을 사용해야하는지 궁금합니다.
--------------------------------------------
82쪽 문제 10번에서
저는 예제를 참고해서 ALTER TABLE 제품 DROP 사진 CASCADE;
라고 생각했는데 답을 보니 DROP과 사진 사이에 COLUMN 컬럼이 있던데 이부분 생략 가능한가요?
생략이 안된다면 예제와 문제가 어떤 부분이 달라서 어떠한 경우에 컬럼이 들어가는지 설명 부탁드립니다.
--------------------------------------------
90쪽 2, 3번 문제에서 하위질의를 할 때. 3번에서는 psale 속성이 Sale에 있기 때문에 하위질의 FROM 절에
Product 테이블이 들어는걸 이해 하겠는데
2번 문제에서는 왜 하위질의에 Staff 테이블이 FROM 절에 들어가는지 이해하기 어렵습니다.
---------------------------------------------
90쪽 4번 문제에서
앞의 이론에 나와있는 예제를 보고 SQL 문을 작성했는데 답과 달라서 여쭤봅니다.
저는 앞의 예제를 참고해서
SELECT *
FROM Product
WHERE price is NULL
ORDER BY name ASC;
로 했는데 답에는 셀렉트 뒤에 name이 붙던데 price가 NULL값인 튜플을 모두 검색해서 오름차순으로
정렬시키는 것은 똑같은 것 같은데 차이점이 있나요?
고생많으십니다.
지적해주세요 감사합니다.
안녕하세요.
1)
Costraint는 제약조건명이 있을 때 사용하는 것으로 조건명이 없으면
Check(value in ('남', '여')만 작성하면 됩니다.
2)
NOT NULL 은 값이 반드시 입력되도록 하는 필수 입력에 대한 조건입니다.
NOT NULL을 명시하지 않아도 PRIMARY KEY 로 기본키를 지정하면 해당 속성은 기본키 속성을 따라 NOT NULL, 즉 필수 입력이라는 기능이 자동으로 지정되게 됩니다.
3)
DROP의 경우 속성명 앞에 COLUMN이 반드시 입력되어야 합니다.
교재의 설명부분에 이 내용이 누락되었습니다. 학습에 불편을 드려 죄송합니다.
4)
우선 문제의 조건에 staff와 shop 테이블을 이용하라고 되어 있습니다.
최종적으로 출력하는 것은 shop 테이블의 name 속성이 됩니다.
그래서
select name
from shop
이 됩니다. 하지만 조건이 있습니다. 직원 'id'가 10인 직원이 담당하는 상점의 이름입니다.
직원 'id'는 staff 테이블에 있습니다.
그래서
select shopid
from staff
를 해서 shopid를 추출하되 직원 id가 10인 직원을 추출해야 하므로
where id = 10이 됩니다.
먼저 추출한 shopid를 하위 질의로 하여 최종적으로 shop 테이블의 name을 출력하는 것이므로
교재와 같이 하위 질의에 staff 테이블이 사용됩니다.
5)
product 테이블에는 속성이 id, name, price 이렇게 3개가 있습니다.
이중에서 문제에서 요구하는 추출 속성은 name입니다.
그러므로
select name 으로 하여 속성 중 name만 추출한 것입니다.
select *을 하면 name은 물론 id와 price까지 추출됩니다.
오늘도 즐거운 하루 되세요.
-
*2017-04-07 11:29:38
안녕하세요.
1)
Costraint는 제약조건명이 있을 때 사용하는 것으로 조건명이 없으면
Check(value in ('남', '여')만 작성하면 됩니다.
2)
NOT NULL 은 값이 반드시 입력되도록 하는 필수 입력에 대한 조건입니다.
NOT NULL을 명시하지 않아도 PRIMARY KEY 로 기본키를 지정하면 해당 속성은 기본키 속성을 따라 NOT NULL, 즉 필수 입력이라는 기능이 자동으로 지정되게 됩니다.
3)
DROP의 경우 속성명 앞에 COLUMN이 반드시 입력되어야 합니다.
교재의 설명부분에 이 내용이 누락되었습니다. 학습에 불편을 드려 죄송합니다.
4)
우선 문제의 조건에 staff와 shop 테이블을 이용하라고 되어 있습니다.
최종적으로 출력하는 것은 shop 테이블의 name 속성이 됩니다.
그래서
select name
from shop
이 됩니다. 하지만 조건이 있습니다. 직원 'id'가 10인 직원이 담당하는 상점의 이름입니다.
직원 'id'는 staff 테이블에 있습니다.
그래서
select shopid
from staff
를 해서 shopid를 추출하되 직원 id가 10인 직원을 추출해야 하므로
where id = 10이 됩니다.
먼저 추출한 shopid를 하위 질의로 하여 최종적으로 shop 테이블의 name을 출력하는 것이므로
교재와 같이 하위 질의에 staff 테이블이 사용됩니다.
5)
product 테이블에는 속성이 id, name, price 이렇게 3개가 있습니다.
이중에서 문제에서 요구하는 추출 속성은 name입니다.그러므로
select name 으로 하여 속성 중 name만 추출한 것입니다.
select *을 하면 name은 물론 id와 price까지 추출됩니다.
오늘도 즐거운 하루 되세요.