오늘의 코드
DB를 처음 시작을 한다.
DB를 사용하는 이유
사용하기 위한 방법
사용법
/*
오라클에서 여러 줄의 주석을 처리할 때
*/
-- 오라클에서 한 줄 주석을 처리할 때
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', COL - 'def' 데이터를 삽입
INSERT INTO EX2 (col1, col2)
VALUES('abc', 'def');
COMMIT;
/*
* 제약 조건
- NOT NULL : 데이터를 반드시 입력
- UNIQUE : 중복되지 않는 데이터만 입력 가능
- PRIMARY KEY( 고유키)
테이블에서 유일한 데이터를 찾을수 있는 컬럼
데이터가 반드시 존제해야하고, 중복되지 않아야 함
- FOREIGN KEY(외래키):
테이블간의 참조데이터 무결성을 위한 제약 조덤
반드시 참조하는 테이블이 먼저 생성되어야 하며,
참조키가 참조 테이블의 기본키로 설정되어야 한다.
*/
CREATE TABLE EX3 (
COL1 VARCHAR2 (10) NOT NULL, -- 문자열 3바이트까지
COL2 VARCHAR2 (10) UNIQUE -- 문자열 3바이트까지
);
-- 상황에 따라서 정해야 한다.
INSERT INTO EX3
VALUES ('AA','BB');
INSERT INTO EX3 -- UNIQUE 에러
VALUES ('aa','BB');
-- COL2는 UNIQUE해야 한다는 제약 조건에 위배
INSERT INTO EX3(COL2) -- NOT NULL 에러
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');
INSERT INTO EX4(COL2) -- NOT NULL 에러
VALUES ('ABC');
CREATE TABLE EX5(
COL1 VARCHAR2(10),
COL2 VARCHAR2(10),
CONSTRAINTS pk_EX5 PRIMARY KEY(COL1)
);
CREATE TABLE EX6(
COL1 VARCHAR2(10),
CONSTRAINTS pk_EX6 UNIQUE (COL1)
);
CREATE TABLE EX7(
AGE NUMBER CHECK (AGE >= 0),
GENDER VARCHAR2(10),
CONSTRAINTS CHECK_GENDER
CHECK (GENDER IN ('남', '여'))
);
-- CHECK : 조건에 부합하는 데이터만 입력이 가능하도록 설정하는 제약 조건
INSERT INTO EX7
VALUES(12, '남자');
-- ALTER TABLE : 테이블 정보를 변경할 때 사용
ALTER TABLE EX7 ADD CONSTRAINT UN_EX7 UNIQUE (AGE);
CREATE TABLE EX8(
COL1 VARCHAR2(10),
GENDER VARCHAR2(10),
CONSTRAINT NN_EX8
CHECK (COL1 IS NOT NULL)
);
CREATE TABLE EX9(
COL1 NUMBER,
COL2 VARCHAR2(10)
);
-- 테이블 컬럼 이름 변경
ALTER TABLE EX9 CONSTRAINT COL1 COLUMN 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;
-- 테이블 컬럼 데이터의 기본값 설정
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 : 임시 테이블
SELECT SEQ1.CURRVAL FROM DUAL;
---------------------------------------------------------------
CREATE SEQUENCE SEQ2 INCREMENT BY 2;
SELECT SEQ2.NEXTVAL FROM DUAL;
CREATE SEQUENCE SEQ3
INCREMENT BY 2
MINVALUE 0;
SELECT SEQ3.NEXTVAL FROM DUAL;
CREATE SEQUENCE SEQ4
INCREMENT BY 2
START WITH 0
MAXVALUE 10
MINVALUE -10;
SELECT SEQ4.NEXTVAL FROM DUAL;
CREATE SEQUENCE SEQ5
INCREMENT BY 2
START WITH 0
MAXVALUE 10
MINVALUE -10
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');
-- 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', 'admin@test.com');
INSERT INTO EX_MEMBER
VALUES('guest', 'guest1234', 'guest@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';
-- 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 : 시간 표현이 가능한 날짜 타입
/* EX_SUDENT 모든 컬럼에 데이터 추가
ID = 1,
NAME = 'Aaa',
BIRTHDAT = '1970-01-01',
EMAIL = 'aaa@test.com'
*/
/* EX_SUDENT ID, NAME 컬럼에 데이터 추가
ID = 2,
NAME = 'Bbb'
*/
/* EX_SUDENT ID, NAME, EMAIL 컬럼에 데이터 추가
ID = 3,
NAME = 'Abc',
EMAIL = 'abc@test.com'
*/
/* EX_SUDENT ID, NAME, BIRTHDAY 컬럼에 데이터 추가
ID = 4,
NAME = 'aaa',
BIRTHDAT = '2000-01-01'
*/
INSERT INTO EX_STUDENT VALUES(
1,
'Aaa',
'1970-01-01',
'aaa@test.com'
);
INSERT INTO EX_STUDENT (ID, NAME)
VALUES(2, 'Bbb');
INSERT INTO EX_STUDENT (ID, NAME, EMAIL)
VALUES(3, 'Abc', 'abc@test.com');
INSERT INTO EX_STUDENT (ID, NAME, BIRTHDAY)
VALUES(4, 'aaa', '2000-01-01');
SELECT * FROM EX_STUDENT;
-- ID와 NAME 컬럼 데이터 검색(ID를 기준으로 내림차순)
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 'A%'; -- 맨 앞에 있는 'A'를 찾는 형식
-- NAME의 데이터 중 A로 끝나는 문자열을 갖는
-- 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE '%A';
-- NAME의 데이터 중 b를 포함하는 문자열을 갖는
-- 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE '%b%';
-- 2000년 1월 1일 이후에 출생한 학생들의 모든 데이터를 검색
SELECT * FROM EX_STUDENT
WHERE BIRTHDAY >= '2000-01-01';
-- name 값이 A로 시작하고,
-- EMAIL의 값이 NULL이 아닌 모든 데이터 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE 'A%'
and EMAIL IS NOT NULL;
-- name 값이 A로 시작하거나, B로 시작하는
-- 모든 데이터 검색
SELECT * FROM EX_STUDENT
WHERE NAME LIKE 'A%'
or NAME LIKE 'B%';
SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF
LEFT JOIN ICECREAM_INFO
ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC;