[그림]


    E - R Diagram

    Create table - 테이블 생성

    Insert - 데이터 생성


    foreign key(sno) references student(sno)    - 참조키 선언

    foreign key(cno) references course(cno)


    1. Cascade

    CASCADE?

    연쇄, 자식에 설정했을 때 부모데이터가 삭제되면 자식 데이터도 자동삭제된다.

    선언은 자식의 참조키에 선언한다.

    foreign key(cno) references course(cno)

    on delete cascade,

    on update cascade


    cno에 delete, update cascade를 해주면 이제 부모값이 변경되거나 삭제되면 참조하고있는 테이블의 칼럼의 데이터값들도 변경된다.


    delete from course

    where cno='C413'    -성공, Cascade되어있기때문에 자식에 참조되어있는 데이터들이 삭제되고 부모의 데이터가 삭제된다.


    2. SELECT


    2 - 1. 비교 연산자 : [ >, <, >=, <=, !=, <>=, in(집합연산자), like(패턴연산자) = (%,_)], is[not] null, between A and B, Exist


    2 - 2. 논리연산자 : 우선순위[ () > not > and > or ]


    SELECT    - 칼럼지정 선택자

    FROM      - 테이블지정 선택자

    WHERE    - 조건절에 맞는 데이터줄 선택자

    ORDER BY - 순서나열

     ex)

    SELECT sno, sname

    FROM Student

    WHERE syear=2

    Order by [ASC|DESC];    ASC = 오름차순, DESC = 내림차순


    2 - 3. 문제

    파란색은 WHERE 안에 들어가야하고, 빨간색은 SELECT안에 들어가야한다


    1) 학과가 '컴퓨터'이거나 '전기'이면서 3학년인 학생모든 정보를 출력


    [설명 : 출력하고자 하는 것은 SELECT에 서술한다. 모든 정보를 출력하라고 하였기에 *(전체 선택자)를 적는다.]


    SELECT *

    FROM Student

    WHERE (sdept='컴퓨터' or sdept='전기') and syear=3


    수치 데이터 이외에는 모두 Single Quotation Mark('')를 사용한다.


    2) 과목번호가 c로 시작하는 과목과목번호와 과목이름을 출력


    [설명 : c로 시작하는 것을 찾고싶으면 패턴 연산자를 사용한다. %는 이 자리부터 뒤까지 뭐가 오든 찾으라는 뜻, _는 이 자리에만 무엇이 오든 찾으라는 것 ]


    SELECT cno, cname

    FROM Course

    WHERE cno like 'c%';


    3) 학과가 알려지지 않은 학생학번과 이름을 출력


    SELECT sno, sname

    FROM student

    WHERE sdept is not null            <- NULL값을 비교할때는 IS


    4) 중간성적이 80점 이상이고 90점 이하학생의 학번만 출력


    [설명 : 중간성적과 학생의 정보를 모두 포함하고있는 테이블을 선택해야한다,]


    SELECT sno

    FROM enrol

    WHERE midterm >= 80 and midterm <=90


    or


    SELECT sno

    FROM enrol

    WHERE midterm BETWEEN 80 and 90


    5) 수강신청한 학생학번만 출력하라

    SELECT sno

    FROM enrol


    하지만 이렇게 써버리면 중복이 발생하고, 순서가 예쁘게 나열되지않는다.

    중복을 지우기 위한 명령어는 distinct 라고하고 SELECT 바로 오른쪽에 쓴다.


    SELECT distinct sno

    from enrol


    이번엔 정렬을해보자


    SELECT distinct sno

    from enrol

    order by sno ASC(오름차순)    - 100, 200, 300, 400순

    order by sno DESC(내림차순)  - 400 ,300 ,200 ,100순


    6) 학과별로 높은 학년순으로 학생 모든 정보를 출력


    SELECT *

    FROM student

    order by sdept, syear DESC;


    [설명 : ASC는 생략이 가능하다.]



    ' > 데이터베이스' 카테고리의 다른 글

    1. 데이터베이스  (0) 2017.05.14
    5. 데이터베이스  (0) 2017.04.19
    3. 데이터베이스  (0) 2017.04.02
    2. 데이터베이스  (1) 2017.03.18
    1. 데이터베이스  (1) 2017.03.11
    Posted by Config