SQL 기초(3) - 0913(1)

안씅👩🏻‍💻·2022년 9월 13일
0
post-thumbnail

16 금요일 시험
21 다음주 수요일 설문
10.10~11 휴일
바킹독 - 알고리즘 cpp


데이터 조작어

WHERE 조건문


WHERE에 부속질의 사용하기.

  • 질의 3-29 도서를 구매한 적이 있는 고객의 이름을 검색하시오.
SELECT  name --2. 추출한 고객 아이디로 customer테이블에서 고객명 추출
FROM    customer
-- from customer, orders
-- where customer.custid = orders.custid;
WHERE   custid IN(SELECT   custid -- 1.orders테이블에서 고객아이디 찾아 customer테이블에 존재하는 고객아이디 추출
                    FROM   orders);
  • [실행 결과]

  • 질의 3-30 대한미디어에서 출판한 도서를 구매한 고객의 이름을 보이시오.
SELECT  name -- 3.찾은 고객아이디의 고객명을 찾아 출력함.
FROM    customer
WHERE   custid IN (SELECT   custid  -- 2.찾은 책아이디를 구매한 고객아이디를 찾음
                    FROM    orders
                    WHERE   bookid IN (SELECT   bookid -- 1.대한미디어 출판사인 책아이디를 찾음
                                        FROM    book
                                        WHERE   publisher='대한미디어'));
- [실행 결과]![](https://velog.velcdn.com/images/dingcomiii/post/1cde7c7b-2342-4d84-b6ae-5ac4de0392dc/image.png)

<br>


> - 질의 3-31 출판사별로 출판사의 평균 도서 가격보다 비싼 도서를 구하시오.
```sql
SELECT  b1.bookname
FROM    book b1  -- from table명 테이블별명
WHERE   b1.price > (SELECT  AVG(b2.price)
                FROM    book b2
                WHERE   b1.publisher = b2.publisher);
  • [실행 결과]



집합연산 사용하기.

  • 합집합 : UNION
  • 차집합 : MINUS
  • 교집합 : INTERSECT
  • 질의 3-32 도서를 주문하지 않은 고객의 이름을 보이시오.
SELECT  name
FROM    customer
MINUS   --차집합
SELECT  name
FROM    customer
WHERE   custid IN (SELECT   custid
                    FROM    orders);
  • [실행 결과]



  • EXISTS(<-->NOT EXISTS) : 존재여부를 판별함.

-- 질의 3-33 주문이 있는 고객의 이름과 주소를 보이시오.

SELECT  name, address -- 추출한 정보에 빈곳이 없는 속성을 구별해 이름과 주소를 출력함.
FROM    customer cs
WHERE   EXISTS(SELECT   *   -- orders테이블에 존재하는 고객아이디와 customer테이블에 고객 아이디 모두 추출 
                FROM    orders od
                WHERE   cs.custid = od.custid);
  • [실행 결과]




데이터 정의어

CREATE

CREATE TABLE 테이블이름
( { 속성이름 데이터타입
	[NOT NULL | UNIQUE | DEFAULT 기본값 | CHECK 체크조건]
	}
	[PRIMARY KEY 	속성이름()]
	{[FOREIGN KEY 	속성이름 	REFERENCES 	테이블이름(속성이름)]
	[ON DELETE 	[CASCADESET NULL]
	}
)

PRIMARY KEY(기본키) 설정하기.

    • NUMBER(p.s)
      • p는 실수 자리 수
      • s는 소수부분 자리수
        : NUMBER(8.2)는 12345.67 형식의 숫자를 받을 수 있음

CREATE TABLE NewBook (
    bookid      NUMBER, 
    bookname    VARCHAR2(20),
    publisher   VARCHAR2(20),
    price       NUMBER,
    PRIMARY KEY (bookid) -- PRIMARY KEY를 bookid로 생성
);
  • [실행 결과]

constraints(속성 제약조건) 설정하기.

  • not null
    • 속성 값으로 null을 입력하면 error
  • unique
    • 속성값이 다른행의 값과 겹치면 error
  • default ~
    • 속성의 기본 값을 지정함.
  • check(조건)
    • 지정 조건이면 error 발생

  • PRIMARY KEY에 들어가는 속성이 여러개면 반드시 별도의 PRIMARY KEY(키, 키, 키)를 선언해야함.
CREATE TABLE NewBook (
    bookname      VARCHAR(20)     NOT NULL, 
    publisher     VARCHAR(20)     UNIQUE,
    price         NUMBER          DEFAULT 10000 CHECK(price > 1000),
    PRIMARY KEY   (bookname, publisher)
);
  • [실행 결과]



ALTER

ALTER TABLE 테이블이름
	[ADD 속성이름 데이터타입]
	[DROP COLUMN 속성이름]
	[MODIFY 속성이름 데이터타입]
	[MODIFY 속성이름 [NULLNOT NULL]]
	[ADD PRIMARY KEY(속성이름)]
	[[ADDDROP] 제약이름]



DROP

DROP TABLE 테이블이름

  • 질의 3-42 NewBook 테이블을 삭제하시오.
DROP TABLE NewBook;
  • [실행 전]
  • [DROP 실행 결과]




데이터 조작어

ddl : 데이터 정의어

INSERT(삽입)


INSERT 기본 문법 사용하기.

INSERT INTO 테이블이름[(속성리스트)]
VALUES (값리스트);

  • 질의 3-44 Book 테이블에 새로운 도서 ‘스포츠 의학’을 삽입하시오.
    스포츠 의학은 '한솔의학서적'에서 출간, 가격은 90,000원이다.
INSERT INTO Book(bookid, bookname, publisher, price)
VALUES (11, '스포츠 의학', '한솔의학서적', 90000);
  • [실행 결과]

INSERT 속성 값이 null인 경우

  • INSERT(생성)할 때, 모든 속성 값을 사용할 필요 없음.
    • 단, primary key, not null, unique등 속성 값을 필수로 넣어야 하는 경우엔 속성 값을 지정해야함.
  • 질의 3-45 Book 테이블에 새로운 도서 ‘스포츠 의학2’을 삽입하시오.
    스포츠 의학은 '한솔의학서적'에서 출간했으며 가격은 미정(null)이다.
INSERT INTO Book(bookid, bookname, publisher)
VALUES (14, '스포츠 의학2', '한솔의학서적');
  • [실행 결과]

INSERT value 순서를 선언하지 않고 삽입하기.

  • 테이블 생성시 정해준 기본 value 순서로 속성 값이 삽입됨.
INSERT INTO Book
VALUES ('스포츠 의학3', 17, '한솔의학서적', 90000);
  • [실행 결과]

INSERT value 순서 무시하고 삽입하기.

  • INSERT문 작성시 임의로 value 기본 순서를 변경해 삽입할 수 있음
    • 단, 임의로 입력한 value 순서로 속성 값을 입력해야함.
-- Book(bookid, bookname, publisher, price)가 원래 value순서
INSERT INTO Book(bookname, bookid, publisher, price)
VALUES ('스포츠 의학4', 17, '한솔의학서적', 90000);
  • [실행 결과]



UPDATE(수정)

UPDATE 테이블이름
SET 속성이름1=1[, 속성이름2=2, ...]
[WHERE <검색조건>];

**UPDATE문 사용시 반드시 where조건문을 사용해야함**

  • 사용하지 않으면 모든 행의 속성값을 UPDATE함.

UPDATE

  • 질의 3-48 Customer 테이블에서 박세리 고객의 주소를 김연아 고객의 주소로 변경하시오.
  • [실행 전]
UPDATE  Customer
SET     address='대한민국 부산'
WHERE   custid=5;
  • [UPDATE 실행결과]

UPDATE

  • 질의 3-48 Customer 테이블에서 박세리 고객의 주소를 김연아 고객의 주소로 변경하시오.
  • [실행 전]
UPDATE  Customer
SET     address = (SELECT   address
                FROM    Customer
                WHERE   name='김연아')
WHERE   name LIKE '박세리';
  • [UPDATE 실행결과]



DELETE(삭제)

DELETE	FROM 테이블이름
[WHERE	검색조건];

**DELETE문 사용시 반드시 where조건문을 사용해야함**

  • 사용하지 않으면 모든 행의 속성값을 DELETE함.
    • 실제로 이런일이 일어나면 완전 대형사고^^*

  • 질의 3-49 Customer 테이블에서 고객번호가 5인 고객을 삭제하시오.
  • [실생 전]
DELETE  FROM  Customer
WHERE   custid=5;
  • [DELETE 실행결과]

profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글