티스토리 뷰
2월 중순 넘어서 프로젝트 할때 쓸예정!!















DAY1일차에 젤 중요한거 많아-> 세분화해서 공부

C## 전버전꺼
CREATE USER 계정 IDENTFIED BY 비번
GRANT CONNECT TO 계정;
GRANT RESOURCE TO 계정;
CHECK의 문법순서:CHACK(USER_GENDER IN('남','여');
DEFAULT 값맞춰야-SYSDATE,O
ALTER로 조합해서 원하는 형태대로 제약조건 수정 OR
DROP으로 무식하게 처음부터 다시 만들어야 함
DQL실습 반드시 알아야!!!!!!!!!!!!
IS NOT NULL
LIKE
오라클함수
--SQL 쿼리 실행순서
--1.FROM 2.WHERE 3.GROUP BY 4.HAVING 5.SELECT 6.ORDER BY
-집계함수 중요!!!!!!!!!!!!!! 통계.랭킹 매길 때
GROUP BY
HAVING COUNT
(WHERE쓰는게 아니라 HAVING)
-- 실습문제3
-- 매니저가 관리하는 사원이 2명 이상인 매니저 아이디와 관리하는 사원수를 출력하세요!
SELECT MANAGER_ID, COUNT(*)
FROM EMPLOYEE
GROUP BY MANAGER_ID
HAVING COUNT(*)>=2 AND MANAGER_ID IS NOT NULL;
--HAVING 절
--SELECT*FROM~WHERE~(조건)
--그룹함수로 값을 구해온 그룹에 대해 조건을 설정할 때 사용함
--WHERE절과 구분해서 사용할 줄 알아야 함
--SQL 쿼리 실행순서
--1.FROM 2.WHERE 3.GROUP BY 4.HAVING 5.SELECT 6.ORDER BY
-- 실습예제7
-- 부서내 성별 인원수를 구하시오
SELECT
DEPT_CODE
,COUNT(*)
,DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '2', '여', '3', '남', '4', '여')"성별" --문자열 자르기
FROM EMPLOYEE
GROUP BY DEPT_CODE, DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '2', '여', '3', '남', '4', '여')
ORDER BY 1;
-- 최종 실습 문제
-- 문제1.
-- 입사일이 5년 이상, 10년 이하인 직원의 이름,주민번호,급여,입사일을 검색하여라
SELECT EMP_NAME, EMP_NO, SALARY, HIRE_DATE
FROM EMPLOYEE;
WHERE CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)/12) BETWEEN 5 AND 10;
--WHERE(EXTRACT(YEAR FROM(SYSDATE)-EXTRACT(YEAR FROM(HIRE_DATE))) BETWEN 5 AND 10;
SELECT
EMP_NAME
, HIRE_DATE
, CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)/12)
, (SYSDATE-HIRE_DATE)/365
FROM EMPLOYEE;
--3. 60년대에 태어난 직원명과 년생, 보너스 값을 출력하시오. 그때 보너스 값이 null인 경우에는 0 이라고 출력 되게 만드시오
-- 직원명 년생 보너스
-- ex) 선동일 1962 0.3
-- ex) 송은희 1963 0
SELECT EMP_NAME "이름"
1900+SUBSTR(EMP_NO, 1, 2), '년생1'
, TO CHAR(TO_DATE(SUBSTR(EMP_NO, 1, 2), 'RR'), 'YYYY') "년생2"
, NVL(BONUS, 0) "보너스"
FROM EMPLOYEE;
서브쿼리
조인 중요!!!!!!!!!!!!!!!!!(어렵게 내면..- 종합실습 문제 정도까지)
INNER/OUTER조인의 차이
-0----------------------
SOLD_OUT CHAR(1) DEFAULT 'N' CHECK(SOLD_OUT IN('Y', 'N'));
);
COMMENT ON COLUMN BRANDS.BRAND_ID IS "브랜드번호"
NEXTVAL!!!!!!!!CURRVAL!!!!!!!!!
LEFT OUTER JOIN
INSERT INTO BRANDS VALUES(SEQ_BRAND_ID.NEXTVAL, '삼성');
SELECT * FROM BRANDS;
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '갤럭시S8', 800000, 100, SM-SS8', Y);
SELECT * FROM PRODUCTS;
시퀀스
SEQ_BRAND_ID: 100부터 시작, 100씩 증가, 최대값 1000, 반복없음
CREATE SEQUNECE SEQ_BRAND_ID --이게 디폴트값
INCREMENT BY 100
MAXVALUES 1000
NOCYCLE
NOCACHE;
결과조회에서 아이폰 왜 안나옴?
SELECT PRODUCT_NAME, PRODUCT_PRICE, BRAND_NAME, SOLD_OUT
FROM PRODUCT_NAME
LEFT OUTER JOIN BRANDS ON BRAND_CODE=BRAND_ID;
------------------------------------------------------
-- 테이블 생성 및 코멘트 달기
CREATE TABLE BRANDS(
BRAND_ID NUMBER PRIMARY KEY,
BRAND_NAME VARCHAR2(100) NOT NULL
);
CREATE TABLE PRODUCTS (
PRODUCT_NO NUMBER PRIMARY KEY,
PRODUCT_NAME VARCHAR2(20) NOT NULL,
PRODUCT_PRICE NUMBER NOT NULL,
BRAND_CODE NUMBER REFERENCES BRANDS,
SERIAL_NO VARCHAR2(100) UNIQUE,
SOLD_OUT CHAR(1) DEFAULT 'N' CHECK(SOLD_OUT IN ('Y','N'))
);
COMMENT ON COLUMN BRANDS.BRAND_ID IS '브랜드번호';
COMMENT ON COLUMN BRANDS.BRAND_NAME IS '브랜드명';
COMMENT ON COLUMN PRODUCTS.PRODUCT_NO IS '상품번호';
COMMENT ON COLUMN PRODUCTS.PRODUCT_NAME IS '상품명';
COMMENT ON COLUMN PRODUCTS.PRODUCT_PRICE IS '상품가격';
COMMENT ON COLUMN PRODUCTS.BRAND_CODE IS '브랜드번호';
COMMENT ON COLUMN PRODUCTS.SERIAL_NO IS '고유번호';
COMMENT ON COLUMN PRODUCTS.SOLD_OUT IS '품절여부';
-- 시퀀스 생성
CREATE SEQUENCE SEQ_BRAND_ID
START WITH 100
INCREMENT BY 100
MAXVALUE 1000
NOCYCLE
NOCACHE;
CREATE SEQUENCE SEQ_PRODUCT_NO
MAXVALUE 10000
NOCYCLE
NOCACHE;
SELECT * FROM USER_SEQUENCES;
SELECT * FROM BRANDS;
SELECT * FROM PRODUCTS;
-- 데이터 삽입
INSERT INTO BRANDS VALUES(SEQ_BRAND_ID.NEXTVAL, '삼성');
INSERT INTO BRANDS VALUES(SEQ_BRAND_ID.NEXTVAL, '애플');
SELECT * FROM BRANDS;
COMMIT;
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '갤럭시S8', 800000, 100, 'SM-S8S', 'Y');
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '갤럭시S9', 900000, 100, 'SM-S9S', 'N');
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '갤럭시S10', 1000000, 100, 'SM-S10S', 'N');
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '아이폰9S', 900000, 200, 'IP-S9S', 'N');
INSERT INTO PRODUCTS VALUES(SEQ_PRODUCT_NO.NEXTVAL, '아이폰10S', 1000000, 200, 'IP-S10S', 'N');
SELECT * FROM PRODUCTS;
-- 결과 조회
SELECT PRODUCT_NAME, PRODUCT_PRICE, BRAND_NAME, SOLD_OUT
FROM PRODUCTS
LEFT OUTER JOIN BRANDS ON BRAND_CODE = BRAND_ID;