Heestory

0601 NewLecture) 6강~17강 본문

개발(~국비)/SQL

0601 NewLecture) 6강~17강

까만밀가루 2022. 6. 2. 00:34

6강)

DDL : CREATE(정의) / ALTER(수정) / DROP(삭제)

DML : INSERT / SELECT / UPDATE / DELETE - CRUD

DCL : GRANT / REVOKE

 

#테이블 정의하기

CREATE TABLE NMEMBER(
 ID VARCHAR2(50),
 PWD VARCHAR2(50),
 NAME VARCHAR2(50),
 GENDER  NCHAR(2), -- 남성, 여성(3Byte*2) UTF, NCHAR의 경우 2라고 해도 충분하다.
 AGE NUMBER(3),
 BIRTHDAY CHAR(10),  -- 2000-01-02
 PHONE CHAR(13),  -- 010-1234-5678
 REGDATE DATE
);

 

7~8강)오라클 데이터 형식

#1.문자열 형식

✔.CHAR : 고정 길이 데이터 형식 

  EX) CHAR(10)이면 데이터 크기를 2만 사용해도 무조건 10으로 인식 , 핸드폰 크기 처럼 일정한 것은 CHAR 이용

  데이터의 길이가 일정하기 때문에 검색할 때는 유리

✔.VARCHAR2 : 가변길이 데이터 형식

 

-전 세계적인 언어가 들어갈 때 이용하는 형식

✔.NCHAR (National Char)

✔.NVARCHAR

 

#2.Charater 형식

ex.article에 많은 태그, 문자열을 쓸 때 사용

✔.LONG 

✔.CLOB : 대용량 텍스트 데이터 타입(최대 4Gbyte) // LONG 보다 자주 쓰임

✔.NCLOB

 

#3.숫자 형식

✔.NUMBER(4) : 최대 4자로 이루어진 숫자

✔.NUMBER(6,2) :소수점 2자리를 포함하는 최대 6자리의 숫자(소수점 둘째 자리에서 반올림)

✔.NUMBER(6,-2) :소수점 -2자리에서 반올림하는 최대 6자리 숫자

✔.NUMBER : MAX 38자리까지

✔.NUMBER(*,5) = NUMBER(38,5) : 소수점 5자리를 포함하는 38자리 숫자

 

#.날짜 형식(Date 형식)

✔.DATE : 년월일 표현

✔.TIMESTAMP  : 년월일시분초 표현

 

 

 

9강)테이블 수정하기(ALTER)

수정 요구 사항

 - ID : VARCHAR2(50) → NVARCHAR2(50)

 - AGE : 제거

 - EMAIL : VARCHAR2(200) 추가

 

수정(MODIFY)

ALTER TABLE NMEMBER MODIFY ID NVARCHAR2(50);

DROP 후 CREATE :  데이터가 아예 없는 경우 가능

 

제거(DROP)

ALTER TABLE NMEMBER DROP COLUMN AGE;

 

추가(ADD)

ALTER TABLE NMEMBER ADD EMAIL VARCHAR2(200);

 

혹은 아래처럼 테이블 > 편집 > 변경할 수 있다.

 

 

10강 ) SQL 쿼리 연습의 테이블 준비하기

 

CREATE TABLE NOTICE
(
    ID          NUMBER,
    TITLE       NVARCHAR2(100),
    WRITER_ID   NVARCHAR2(50),
    CONTENT     CLOB,
    REGDATE     TIMESTAMP,
    HIT         NUMBER,
    FILES       NVARCHAR2(1000)
);

 

CREATE TABLE COMMENT
(
ID NUMBER,
CONTENT NVARCHAR2(2000),
REGDATE TIMESTAMP,
WRITER_ID NVARCHAR2(50),
NOTICE_ID NUMBER
);

 

##이때 ORA-00903: 테이블명이 부적합합니다
00903. 00000 -  "invalid table name"

오류 발생

오라클 예약어로 사용했기 때문이다.

"COMMENT"로 변경해서 TABLE 생성하자.

 

CREATE TABLE ROLE
(
ID VARCHAR2(5),
DISCRIPTION NVARCHAR(500)
);

CREATE TABLE MEMBER_ROLE
(
MEMBER_ID NVARCHAR2(50),
ROLE_ID VARCHAR(50)
);

 

11강 ) DML - INSERT / SELECT

 

#1.INSERT

-모든 필드 값 입력하기

INSERT INTO NMEMBER VALUES('newlec' , '111', '홍길동' , '남성' ,'1995-02-29', '010-2356-8956', 'newlec@newlecture.com','0214-05-23');

 

-원하는 필드만, 원하는 순서대로 입력하기. 나머지는 NULL값

INSERT INTO NMEMBER(ID,PED) VALUES('newlec','122');

 

#2.SELECT

SELECT * FROM NMEMBER;

 

14강) 연산을 통한 데이터 조회(산술 연산자)

Q.공지사항의 조회수를 조회하시오. 단 기존 값에 1을 더해서 조회하세요.

SELECT HIT+1 FROM NOTICE; //칼럼명이 'HIT+1' 로 나옴

SELECT HIT+1 HIT FROM NOTICE; //칼럼명 HIT 로 나옴

 

Q2.모든 회원의 이름을 조회하시오.

단 이름은 ID를 붙여서 나타내시오 ex.홍길동(hong)

SELECT name || '(' || ID || ')' FROM NMEMBER;

 

-엄선된 칼럼에 별칭 사용하기

SELECT name || '(' || ID || ')' AS NAME FROM NMEMBER;

SELECT name || '(' || ID || ')' NAME  FROM NMEMBER;

 

 

15강) 비교 연산자 :

.Q.게시글 중에서 작성자가 'newlect'인 게시글만 조회하시요.

SELECT * FROM NOTICE WHERE WRITER_ID="newlec;

 

Q2.게시글 중에서 조회수가 3이 넘는 글만 조회하세요.

SELECT * FROM NOTICE WHERE HIT >3;

 

Q3.게시글 중에서 내용을 입력하지 않는 게시글을 조회하시오.

SELECT * FROM NOTICE WHERE CONTENT='NULL';

혹은 SELECT * FROM NOTICE WHERE CONTENT ID NULL;

/NULL이 들어간 값을 검색함

 

 

17강 패턴 비교 연산자) LIKE, % ,_

Q.회원 중에서 '박'씨 성을 조회하시오.

SELECT * FROM NMEMBER WHERE NAME = '박%';

라면 박%인 문자열을 찾는다.

☞SELECT * FROM NMEMBER WHERE NAME LIKE '박%';

 

% : 한글자 이상을 의미

 

 Q2.회원 중에서 '박'씨이고 이름이 외자인 회원을 조회하시오

SELECT * FROM NMEMBER WHERE NAME LIKE '박_';

 

_ : 한글자만 가능

만약 'J____'라면 JDBC처럼 J뒤 3글자 있는 문자열을 찾는다.

 

Q3.회원 중에서 '박'씨 성을 제외한 회원을 조회하시오.

SELECT * FROM NMEMBER WHERE NAME NOT LIKE '박%';

 

Q4.회원 중에서 이름에 '도'자가 들어간 회원을 조회하시오.

SELECT * FROM NMEMBER WHERE NAME LIKE '%%';  

('도'자가 앞뒤로)