티스토리 뷰

 

 

CH1

 

오라클 명령어 (CREATE, INSERT 등) : 
  대/소문자를 구분하지 않음. 
* 오라클에서는 테이블 이름과 컬럼 이름을 영문 대문자로 변환함

sysdate : 명령어 수행 시점의 시간을 저장 

VARCHAR2 : 데이터 타입

제약 조건
  - NOT NULL : 데이터를 반드시 입력
  - UNIQUE : 중복되지 않는 데이터만 입력 가능

  - PRIMARY KEY(고유키) : 테이블에서 유일한 데이터를 찾을 수 있는
    칼럼 데이터가 반드시 존재해야하고, 중복되지 않아야 함
  - FOREIGN KEY(외래 키) : 테이블 간의 참조 데이터 무결성을 위한 제약 조건
    반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 설정되어야 한다.

CHECK : 조건에 부합하는 데이터만 입력이 가능하도록 설정하는 제약 조건
ALTER TABLE : 테이블 정보를 변경할 때 사용
DESC : DESCRIBE (테이블 요약)

 

/*
 오라클에서 여러 줄의 주석을 처리할 때
*/
-- 오라클에서 한 줄 주석을 처리할 때

CREATE TABLE EX1 (
    col1 NUMBER,
    col2 VARCHAR2(100),
    col3 DATE
);

/*
오라클 명령어(CREATE, INSERT 등)은
대/소문자를 구분하지 않음.
오라클에서는 테이블 이름과 컬럼 이름을 
영문 대문자로 변환함
*/

INSERT INTO EX1 VALUES(
    100,
    'HELLO',
    sysdate
);

-- sysdate : 명령어 수행 시점의 시간을 저장


INSERT INTO EX1 VALUES(
    'abcd',
    200,
    sysdate
);


-- 첫 번째 컬럼의 데이터 타입(NUMBER)과
-- 등록하려는 데이터의 타입이 다르기 때문에 에러 발생

-- VARCHAR2 데이터타입 

CREATE TABLE EX2(
    col1 varchar2(3), --문자열 3 바이트 까지
    col2 VARCHAR2(3 byte), --문자열 3 바이트 까지
    col3 VARCHAR2(3 char) --문자열 3 글자 까지
);

INSERT INTO EX2 VALUES(
    'abc',
    'abc',
    'abc'
);

INSERT INTO EX2 VALUES(
    'abc',
    'abc',
    'abcd'
);

INSERT INTO EX2 VALUES(
    '한',
    '글',
    '한글날'
);

-- EX2 테이블에 COL1 - 'abc' , COL2 - 'def' 데이터를 등록 
INSERT INTO EX2 (COL1,COL2)
VALUES('abc','def');

commit;

/*
* 제약 조건
- NOT NULL : 데이터를 반드시 입력 
- UNIQUE : 중복되지 않는 데이터만 입력 가능 

- PRIMARY KEY(고유 키) :
   테이블에서 유일한 데이터를 찾을 수 있는 칼럼 
 데이터가 반드시 존재해야하고, 중복되지 않아야 함

- FOREIGN KEY(외래 키) :
  테이블 간의 참조 데이터 무결성을 위한 제약 조건
  반드시 참조하는 테이블이 먼저 생성되어야 하며, 
  참조키가 참조 테이블의 기본키로 설정되어야 한다. 
  
*/

CREATE TABLE EX3 (
 COL1 VARCHAR(10) NOT NULL,
 COL2 VARCHAR(10) UNIQUE
);

INSERT INTO EX3
VALUES ('AA','BB');

INSERT INTO EX3
VALUES ('aa','BB');
-- COL2는 UNIQUE 해야 한다는 제약 조건에 위배

INSERT INTO EX3(col2)
VALUES ('CC');
-- COL1은 NOT NULL 제약 조건 위배

CREATE TABLE EX4( 
    COL1 VARCHAR2(10) PRIMARY KEY, -- 일반적으로 인덱스 용도로 사용, 그래서 중복 안됨
    COL2 VARCHAR2(10)
);

INSERT INTO EX4
VALUES ('AB','CD');

INSERT INTO EX4
VALUES ('AB','EF');  -- UNIQUE 조건에 위배

INSERT INTO EX4(COL2)
VALUES ('ABC');

CREATE TABLE EX5(
    COL1 VARCHAR2(10),
    COL2 VARCHAR2(10),
    CONSTRAINTS PK_EX5 PRIMARY KEY(COL1)
);

CREATE TABLE EX6(
    COL1 VARCHAR2(10),
    CONSTRAINTS UN_EX6 UNIQUE (COL1)
);

CREATE TABLE EX7(
    AGE NUMBER CHECK (AGE >= 0), -- 음수값이 들어가면 Error
    GENDER VARCHAR2(10),
    CONSTRAINTS CHECK_GENDER
    CHECK (GENDER IN ('남','여')) -- CHECK 제약조건 
);

-- CHECK : 조건에 부합하는 데이터만 입력이 가능하도록 
--          설정하는 제약 조건 
INSERT INTO EX7
VALUES (12,'남자'); -- '남'만 가능한데 '남자'라고 써서 조건 위배

-- ALTER TABLE : 테이블 정보를 변경할 때 사용

-- 제약 조건 추가
ALTER TABLE EX7 ADD CONSTRAINT UN_EX7 UNIQUE (AGE);

CREATE TABLE EX8(
    COL1 VARCHAR2(10),
    CONSTRAINTS NN_EX8
        CHECK(COL1 IS NOT NULL)
);

CREATE TABLE EX9(
    COL1 NUMBER,
    COL2 VARCHAR2(10)
);

-- 테이블 컬럼 이름 변경
ALTER TABLE EX9 RENAME COLUM COL1 TO AGE;
DESC EX9;

-- DESC : DESCRIBE (테이블 요약)

-- 테이블 컬럼 데이터 타입 변경
ALTER TABLE EX9 MODIFY COL2 NUMBER;
DESC EX9;

-- 테이블 컬럼 추가 
ALTER TABLE EX9 ADD COL3 DATE;
DESC EX9;

-- 테이블 컬럼 삭제 
ALTER TABLE EX9 DROP COLUMN COL3;
DESC EX9;

-- DB에 변경 내용 저장
COMMIT;

 

 

 

 

 

 


 

 

CH2

 

 

DELETE , TRUNCATE , DROP
DELETE FROM 테이블명; -- 행 안의 데이터만 삭제, 행은 존재
    DELETE FROM 테이블명
    WHERE 조건명; 

TRUNCATE TABLE 테이블명; -- 행 안의 데이터 + 행까지 삭제, 테이블은 남아있음

DROP TABLE 테이블명; -- 테이블 자체가 삭제


* 만약 제한조건이 있는 테이블을 삭제할 때 
DROP 테이블명 CASCADE CONSTRAINTS;


UPDATE 테이블명
SET 
칼럼명 = 변경할 값,
칼럼명2 = 변경할 값
..
WHERE 조건;

예시 : 
-- 이름이 '진'인 사람의 이메일을 'test@gmail.com'으로 변경
UPDATE EX_HW1
SET
EMAIL = 'test@gmail.com'
WHERE NAME = '진';


SEQUENCE : 자동으로 생성되는 유일한 정수를 반환하는 데이터베이스 객체.
주로 PRIMARY KEY 값을 자동으로 생성할 때 사용

DUAL : 임시 테이블 SELECT

SELECT 시퀀스명.NEXTVAL FROM 테이블명;
-- 이 쿼리는 시퀀스에서 다음 값을 가져온다.
NEXTVAL 함수는 시퀀스의 다음 값을 반환한다.

SELECT 시퀀스명.CURRVAL FROM 테이블명;
-- 이 쿼리는 마지막으로 검색된 시퀀스 값을 가져온다.
'CURRVAL' 함수는 마지막으로 반환된 시퀀스 값을 반환한다.


INCREMENT BY @ : @ 만큼 증가한다
MINVALUE : 최솟값 설정
MAXVALUE : 최댓값 설정, 넘으면 ERROR
CYCLE : 순환구조, 끝나지 않음

 

-- 테이블 컬럼 데이터의 기본값 설정
CREATE TABLE EX_ORDER(
    ORDER_NO NUMBER DEFAULT 0,
    ORDER_DATE DATE DEFAULT SYSDATE
);

INSERT INTO EX_ORDER
VALUES (1, '2024-02-28');

INSERT INTO EX_ORDER (ORDER_NO)
VALUES (11);

INSERT INTO EX_ORDER (ORDER_DATE)
VALUES (SYSDATE);
-- SYSDATE : 시스템에 설정된 현재 시간을 의미

-- DELETE , TRUNCATE , DROP
DELETE FROM EX_ORDER; -- 행 안의 데이터만 삭제, 행은 존재

TRUNCATE TABLE EX_ORDER; -- 행 안의 데이터 + 행까지 삭제, 테이블은 남아있음 

DROP TABLE EX_ORDER; -- 테이블 자체가 삭제

/*
- SEQUENCE : 
    자동으로 생성되는 유일한 정수를 반환하는 데이터베이스 객체 
    주로 PRIMARY KEY 값을 자동으로 생성할 때 사용 
*/

CREATE SEQUENCE SEQ1;

SELECT SEQ1.NEXTVAL FROM DUAL; -- DUAL : 임시 테이블 
-- SEQ1.NEXTVAL 많이 사용됨 ! 
SELECT SEQ1.CURRVAL FROM DUAL;
-- 현재 값을 출력해줌

CREATE SEQUENCE SEQ2 INCREMENT BY 2; 
-- INCREMENT BY @ : @만큼 증가 
SELECT SEQ2.NEXTVAL FROM DUAL;

CREATE SEQUENCE SEQ3 
    INCREMENT BY 2
    MINVALUE 0;
-- MINVALUE : 최솟값 설정
SELECT SEQ3.NEXTVAL FROM DUAL;

CREATE SEQUENCE SEQ4
    INCREMENT BY 2
    START WITH 0
    MAXVALUE 10
    MINVALUE -10;
-- MAXVALUE : 최댓값 설정, 넘으면 Error 
SELECT SEQ4.NEXTVAL FROM DUAL;

CREATE SEQUENCE SEQ5
    INCREMENT BY 2
    START WITH 0
    MAXVALUE 10
    MINVALUE -10
    CYCLE
-- CYCLE : 순환구조, 끝나지 않음 
    NOCACHE; 
SELECT SEQ5.NEXTVAL FROM DUAL;

CREATE SEQUENCE SEQ6
    INCREMENT BY 2
    START WITH 3
    NOCACHE;
SELECT SEQ6.NEXTVAL FROM DUAL;


CREATE SEQUENCE SEQ_PK;
CREATE TABLE EX10(
    COL1 NUMBER PRIMARY KEY,
    COL2 VARCHAR2(10)
);


INSERT INTO EX10
VALUES (SEQ_PK.NEXTVAL, 'A');

 

 

 


 

 

 

CH3

 

 

 

SELECT
SELECT * FROM 테이블명;
: 전체 데이터 검색

SELECT  col1, col2 .. FROM 테이블명;
: 특정 칼럼 데이터 검색

SELECT * FROM 테이블명
WHERE 조건;
: 조건에 부합하는 모든 데이터 검색

SELECT col1,col2 .. FROM 테이블명
WHERE 조건;
: 조건에 부합하는 특정 칼럼 데이터 검색

예시)
SELECT * FROM EX_MEMBER
WHERE ID = 'test';
-- 아이디가 test인 사람의 모든 데이터 검색

SELECT PW FROM EX_MEMBER
WHERE ID = 'test';
-- 아이디가 test인 사람의 PW 검색


UPDATE
UPDATE 테이블명
SET
칼럼 1 = 변경할 값,
칼럼 2 = 변경할 값 ...
WHERE 조건;
예시)
UPDATE EX_MEMBER
SET EMAIL = 'UPDATE@TEST.COM'
WHERE ID = 'guest';
-- ID 가 guest인 사람의 이메일 수정

CREATE & INSERT 
CREATE TABLE 테이블명 (
col1 타입,
col2 타입, 
.
.
);

INSERT INTO 테이블명
VALUES( 데이터1, 데이터2 . . );

예시)
CREATE TABLE EX1 (
col1 NUMBER,
col2 VARCHAR2(100),
col3 DATE
);
-- 테이블명 EX1인 테이블에 첫번째 컬럼(col1)은 숫자타입(NUMBER), 두번째 컬럼(col2)은 문자열 100바이트(VARCHAR2(100)) , 세번째 컬럼은 날짜형(DATE) 으로 생성 

INSERT INTO EX1
VALUES( 100, 'HELLO', sysdate );
-- EX1 테이블에 첫번째 칼럼엔 100, 두번째 칼럼엔 문자열을 세번째 칼럼엔 현재 시간이 기록되는 sysdate를 등록
등록하려는 데이터는 생성할 때 만든 각 컬럼의 데이터 타입과 일치해야 함 
-- SELECT, INSERT , UPDATE , DELETE

CREATE TABLE EX_MEMBER(
    ID VARCHAR2(20) PRIMARY KEY ,
    PW VARCHAR2(20),
    EMAIL VARCHAR2(100)
);

--EX_MEMBER 테이블에 데이터 3개 추가 
INSERT INTO EX_MEMBER
VALUES('admin', 'admin1234','admin1234@test.com');

INSERT INTO EX_MEMBER
VALUES('guest', 'guest1234','guest1234@test.com');

INSERT INTO EX_MEMBER(ID,PW)
VALUES('test', 'test1234');

-- 전체 데이터 검색
SELECT * FROM EX_MEMBER;

-- ID, PW 열 데이터 검색 
SELECT ID, PW FROM EX_MEMBER;

-- 특정 컬럼의 데이터 검색 쿼리
-- ID가 'test'인 사람의 모든 데이터 검색
SELECT * FROM EX_MEMBER
WHERE ID = 'test';

SELECT PW FROM EX_MEMBER
WHERE ID = 'test';

-- ID가 guest인 사람의 이메일 수정
UPDATE EX_MEMBER
SET EMAIL = 'UPDATE@TEST.COM'
WHERE ID ='guest';

-- ID가 guest인 사람의 데이터 삭제
DELETE EX_MEMBER
WHERE ID = 'guest';

CREATE TABLE EX_STUDENT(
    ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(20) NOT NULL,
    BIRTHDAY TIMESTAMP DEFAULT SYSDATE,
    EMAIL VARCHAR2(100)

); 
-- TIMESTAMP : 시간 표현이 가능한 날짜 타입

INSERT INTO EX_STUDENT
VALUES('1','hongjian','1998-07-21','jian@test.com');


INSERT INTO EX_STUDENT(ID,NAME)
VALUES('2','Bbb');

INSERT INTO EX_STUDENT
VALUES('3','hOji','1998-11-28','jIHO@test.com');

INSERT INTO EX_STUDENT (ID,NAME,BIRTHDAY)
VALUES('4','aaa','2000-01-01');

SELECT ID,NAME FROM EX_STUDENT
ORDER BY ID DESC;
-- DESC : 내림차순 


-- BIRTHDAY 기준으로 오름차순된 
-- EX_STUDENT 테이블의 모든 데이터 검색
SELECT * FROM EX_STUDENT ORDER BY BIRTHDAY;
SELECT * FROM EX_STUDENT ORDER BY NAME;

-- NAME 의 데이터 중 A로 시작하는 문자열을 갖는 
-- 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE 'h%';  -- h로 시작하는  

SELECT * FROM EX_STUDENT
WHERE NAME LIKE '%b'; -- B로 끝나는 

-- NAME 의 데이터 중 b를 포함하는 문자열을 갖는 
-- 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE '%j%';

-- 2000년 1월 1일 이후에 출생한 학생들의 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE BIRTHDAY >= '2000-01-01';

-- NAME 값이 h로 시작하고,
-- EMAIL의 값이 NULL이 아닌 모든 데이터 검색 
SELECT * FROM EX_STUDENT
WHERE NAME LIKE 'h%' AND
EMAIL IS NOT NULL;

-- NAME 의 값이 A로 시작하거나, B로 시작하는 
-- 모든 데이터 검색 
SELECT * FROM EX_STUDENT
WHERE NAME LIKE 'A%' OR NAME LIKE 'B%';

COMMIT;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함