자바19일차

달달한스위츠·2024년 2월 28일

자바배우기

목록 보기
19/43

오늘의 코드

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;

0개의 댓글