본문 바로가기
  • Welcome J-Kyu Tstory
국비교육과정/ORACLE(DATABASE)

1일차 (#임포트# 기본문법)

by regularity 2022. 4. 6.
728x90

#04월06일 (수)
1.  SQL 이해 및 개념
2. SQL사용법
3. 명령문 구조
4. 실습 및 구조
 -3개 테이블 추가 구축
 -Query문 실습에 따른 명령문 익히기 



#SQL (Structured Query Language)
▶칼럼과 로우로 구성된 데이터 구조

▶데이터 구조
DQL

TML

DML(Data Manipulation language)_조작어
select, insert, delete, update, 
DDL(Data definition language)_정의어
create, drop, alter
DCL(Data Controll Laguage)_제어어
rollback, commit,


#테이블 임포트
--테이블 폴더 우클릭-> 데이터 임포트->데이터파일 임포트(찾아보기)->다음->열정의에서 칼럼 한번씩 클릭해서 읽혀줄것-> 다음 완료

#기본 문법
/*테이블 전체 선택*/
SELECT * FROM EMP;

모든 테이블 확인
FROM USER_TABLES;

/*테이블 만들기*/
CREATE TABLE SUBJECT(
    SUB_NO      CHAR(3),
    SUB_NAME    VARCHAR2(30),
    SUB_PROF    VARCHAR2(12),
    SUB_GRADE   NUMBER(20),
    SUB_DEPT    VARCHAR2(20),
    CONSTRAINT p_sub_no PRIMARY KEY(SUB_NO));

/*테이블 제거*/
DROP TABLE ENROLL;

/*데이터 삽입*/
INSERT INTO STUDENT VALUES(20153075,'옥한빛','기계',1,'C','M',177,80);

/*테이블명 변경*/
SELECT * FROM ENROL;
ALTER TABLE ENROLL RENAME TO ENROL;

/*테이블 제거*/
DROP TABLE STUDENT;

/*테이블 조건으로 확인*/
SELECT * FROM STUDENT WHERE STU_CLASS='C';

--테이블의 구조를 나타내는 명령어
DESC STUDENT;   --학생 테이블의 구조를 보여줌(DESCRIBE)

--특정열(컬럼)의 내용 검색 명령어
--학생테이블에서 학번과 학생이름을 출력하라
SELECT STU_NO, STU_NAME FROM STUDENT;

--학생테이블에서 학생들의 이름과 몸무게,키를 출력하라
SELECT STU_NAME, STU_WEIGHT, STU_HEIGHT FROM STUDENT;

--칼럼의 중복행 제거 명령어(DISTINCT 특별한) 
SELECT DISTINCT STU_DEPT FROM STUDENT;

--수식을 포함한 검색문
SELECT STU_NO, SUB_NO, ENR_GRADE, ENR_GRADE+10 FROM ENROL;

--연결연산자
SELECT STU_DEPT || '과 ' || STU_NAME ||'입니다' AS 학과성명 FROM STUDENT;

--조건 검색
--학생테이블에서 기계과 학생들의 학생이름과 학번을 검색
SELECT STU_NAME, STU_NO FROM STUDENT WHERE STU_DEPT='기계';

--학생테이블에서 기계이면서 학년이 2학년인 학생들의 학생이름과 학번을 검색
SELECT STU_NAME, STU_NO
FROM STUDENT 
WHERE STU_DEPT='기계' AND STU_GRADE=2;

--조건절에서 범위 조건을 가지고 검색할 수 있음
--학생테이블에서 몸무게가 60~70키로인 학생들을 검색
SELECT * 
FROM STUDENT
WHERE STU_WEIGHT BETWEEN 60 AND 70;

--학생테이블에서 김씨성을 가진 데이터를 검색(와일드카드)
SELECT *
FROM STUDENT 
WHERE STU_NAME LIKE '김%';


데이터 임포트

1. 데이터베이스 안에 프로젝트 폴더 우클릭 IMPORT

2.찾아보기를 통해서 데이터 파이르 선택

3. 다음

\

4.다음

5. 칼럼 명들을 한번씩 다 클릭해 줌으로써 읽혀줘야 정상적으로 임포트됨

6.완료


1일차 수업내용

 

오름차순(Acending)

0

1

2

 

내림차순(Decending)

10

9

8

 

/*1일차*/
--select TABLE_NAME
FROM USER_TABLES;

/*테이블 전체 선택*/
SELECT * FROM EMP;
SELECT * FROM SALGRADE;
SELECT * FROM DEPT;

/* Ctrl+/ = 주석*/

/*테이블 만들기*/
CREATE TABLE SUBJECT(
    SUB_NO      CHAR(3),
    SUB_NAME    VARCHAR2(30),
    SUB_PROF    VARCHAR2(12),
    SUB_GRADE   NUMBER(20),
    SUB_DEPT    VARCHAR2(20),
    CONSTRAINT p_sub_no PRIMARY KEY(SUB_NO));

CREATE TABLE STUDENT(
    STU_NO      CHAR(9),
    STU_NAME    VARCHAR2(12),
    STU_DEPT    VARCHAR2(20),
    STU_GRADE   NUMBER(1),
    STU_CLASS   CHAR(1),
    STU_GENDER  CHAR(1),
    STU_HEIGHT  NUMBER(5,2),
    STU_WEIGHT  NUMBER(5,2),
    CONSTRAINT p_stu_no PRIMARY KEY(STU_NO));
    
 SELECT*FROM SUBJECT;
        
CREATE TABLE ENROL(
    SUB_NO      CHAR(3),
    STU_NO      CHAR(9),
    ENR_GRADE   NUMBER(3),
    CONSTRAINT p_course PRIMARY KEY(sub_no,stu_no));
    
/*테이블 제거*/
DROP TABLE ENROLL;
    
/*데이터 삽입*/
INSERT INTO STUDENT VALUES(20153075,'옥한빛','기계',1,'C','M',177,80);
INSERT INTO STUDENT VALUES(20153088,'이태연','기계',1,'C','F',162,50);
INSERT INTO STUDENT VALUES(20143054,'유가인','기계',2,'C','F',154,47);
INSERT INTO STUDENT VALUES(20152088,'조민우','전기전자',1,'C','M',188,90);
INSERT INTO STUDENT VALUES(20142021,'심수정','전기전자',2,'A','F',168,45);
INSERT INTO STUDENT VALUES(20132003,'박희철','전기전자',3,'B','M',NULL,63);
INSERT INTO STUDENT VALUES(20151062,'김인중','컴퓨터정보',1,'B','M',166,67);
INSERT INTO STUDENT VALUES(20141007,'진현무','컴퓨터정보',2,'A','M',174,864);
INSERT INTO STUDENT VALUES(20131001,'김종헌','컴퓨터정보',3,'C','M',NULL,72);
INSERT INTO STUDENT VALUES(20131025,'옥성우','컴퓨터정보',3,'A','F',172,63);

INSERT INTO SUBJECT VALUES('111','데이터베이스','이재영',2,'컴퓨터정보');
INSERT INTO SUBJECT VALUES('110','자동제어','정순정',2,'전기전자');
INSERT INTO SUBJECT VALUES('109','자동화설계','박민영',3,'기계');
INSERT INTO SUBJECT VALUES('101','컴퓨터개론','강종영',3,'컴퓨터정보');
INSERT INTO SUBJECT VALUES('102','기계공작법','김태영',1,'기계');
INSERT INTO SUBJECT VALUES('103','기초전자실험','김유석',1,'전기전자');
INSERT INTO SUBJECT VALUES('104','시스템분석설계','강석현',3,'컴퓨터정보');
INSERT INTO SUBJECT VALUES('105','기계요소설계','김명성',1,'기계');
INSERT INTO SUBJECT VALUES('106','전자회로실험','최영민',3,'전기전자');
INSERT INTO SUBJECT VALUES('107','CAD응용실습','구봉규',2,'기계');
INSERT INTO SUBJECT VALUES('108','소프트웨어공학','권민성',1,'컴퓨터정보');

INSERT INTO ENROL VALUES('101','20131001',80);
INSERT INTO ENROL VALUES('104','20131001',56);
INSERT INTO ENROL VALUES('106','20132003',72);
INSERT INTO ENROL VALUES('103','20152088',45);
INSERT INTO ENROL VALUES('101','20131025',65);
INSERT INTO ENROL VALUES('104','20131025',65);
INSERT INTO ENROL VALUES('108','20151062',81);
INSERT INTO ENROL VALUES('107','20143054',41);
INSERT INTO ENROL VALUES('102','20153075',66);
INSERT INTO ENROL VALUES('105','20153075',56);
INSERT INTO ENROL VALUES('102','20153088',61);
INSERT INTO ENROL VALUES('105','20153088',78);
       
/*테이블명 변경*/
SELECT * FROM ENROL;
ALTER TABLE ENROLL RENAME TO ENROL;

/*테이블 제거*/
DROP TABLE STUDENT;
DROP TABLE SUBJECT;
DROP TABLE ENROL;

/*테이블 조건으로 확인*/
SELECT * FROM STUDENT WHERE STU_CLASS='C';

/*테이블 확인*/
SELECT * FROM STUDENT;
SELECT * FROM SUBJECT;
SELECT * FROM ENROL;

/*테이블 임포트*/
--테이블 폴더 우클릭-> 데이터 임포트->데이터파일 임포트(찾아보기)->다음->열정의에서 칼럼 한번씩 클릭해서 읽혀줄것-> 다음 완료

--테이블의 구조를 나타내는 명령어
DESC STUDENT;   --학생 테이블의 구조를 보여줌(DESCRIBE)
DESC SUBJECT;   
DESC ENROL;

--특정열(컬럼)의 내용 검색 명령어
--학생테이블에서 학번과 학생이름을 출력하라
SELECT STU_NO, STU_NAME FROM STUDENT;
--학생테이블에서 학생들의 이름과 몸무게,키를 출력하라
SELECT STU_NAME, STU_WEIGHT, STU_HEIGHT FROM STUDENT;

SELECT * FROM STUDENT;
--칼럼의 중복행 제거 명령어(DISTINCT 특별한) 
SELECT DISTINCT STU_DEPT FROM STUDENT;

--수식을 포함한 검색문
SELECT STU_NO, SUB_NO, ENR_GRADE, ENR_GRADE+10 FROM ENROL;

--칼럼이름을 가지고 별칭(ALIAS) 부여하기(AS 생략가능)
SELECT STU_NO AS ID, STU_NAME AS NAME FROM STUDENT;

--연결연산자
SELECT STU_DEPT || '과 ' || STU_NAME ||'입니다' AS 학과성명 FROM STUDENT;

--조건 검색
--학생테이블에서 기계과 학생들의 학생이름과 학번을 검색
SELECT STU_NAME, STU_NO FROM STUDENT WHERE STU_DEPT='기계';

--학생테이블에서 기계이면서 학년이 2학년인 학생들의 학생이름과 학번을 검색
SELECT STU_NAME, STU_NO
FROM STUDENT 
WHERE STU_DEPT='기계' AND STU_GRADE=2;

--조건절에서 범위 조건을 가지고 검색할 수 있음
--학생테이블에서 몸무게가 60~70키로인 학생들을 검색
SELECT * 
FROM STUDENT
WHERE STU_WEIGHT BETWEEN 60 AND 70;

--학생테이블에서 김씨성을 가진 데이터를 검색(와일드카드)
SELECT *
FROM STUDENT 
WHERE STU_NAME LIKE '김%';

--끝자리가 '중'인 사람만 출력 (언더바 2개)
SELECT STU_NO, STU_NAME, STU_DEPT
FROM STUDENT
WHERE  STU_NAME LIKE '__중';

--가운데 자리가 '수'인 사람만 출력 (언더바 2개)
SELECT STU_NO, STU_NAME, STU_DEPT
FROM STUDENT
WHERE  STU_NAME LIKE '_수_';

--학생테이블에서 2015학번 학생들을 검색하라
SELECT *
FROM STUDENT
WHERE STU_NO LIKE '2015%';

--NULL값의 존재유무에 따라 출력시키는 방법
SELECT *
FROM STUDENT
WHERE STU_HEIGHT IS NULL;
/*WHERE STU_HEIGHT IS NOT NULL;*/

--IN의 기능
--전기 전자과와 기계과의 학생들의 학번과 이름을 검색
SELECT STU_NO, STU_NAME, STU_DEPT
FROM STUDENT
WHERE STU_DEPT IN('전기전자','기계');

--SELECT ~ FROM ~WHERE ~ORDER BY
--학생들의 정보를 학번기준으로 정렬 해서 검색(오름차순 ASC 내림차순DESC)
SELECT STU_NO, STU_NAME
FROM STUDENT
ORDER BY STU_NO DESC;

SELECT STU_NO, STU_NAME
FROM STUDENT
ORDER BY 1 DESC;    --1은 select문의 첫번쨰 칼럼을 기준으로 정렬

--별칭으로 순서화 시키는 명령어
--학생테이블에서 학번과 학생이름그리고 
--몸무게를 5만큼 감소시킨열을 TARGET으로 별칭 이를 기준하여 정렬
SELECT STU_NO, STU_NAME, STU_WEIGHT-5 TARGET
FROM STUDENT
ORDER BY 2 DESC;

SELECT STU_NO, STU_NAME, STU_WEIGHT-5 TARGET
FROM STUDENT
ORDER BY STU_WEIGHT-5;

SELECT STU_NO, STU_DEPT, STU_NAME, STU_WEIGHT-5 TARGET
FROM STUDENT
ORDER BY STU_DEPT, TARGET;  --앞칼럼(STU_DEPT) 먼저 정렬하고 그다음 칼럼(TARGET)이 정렬


--함수에 대한 이야기
--1.단일행함수(숫자함수)
SELECT ROUND(345.678), ROUND(345.678,0), ROUND(345.678,1),
ROUND(345.678,-1)
FROM DUAL;

SELECT TRUNC(345.678), TRUNC(345.678,0),TRUNC(345.678,1)Trunc(345.678,-1)
FROM DUAL;


SELECT CEIL(3.00001), FLOOR(-3.00001)
FROM DUAL;
/*MOD -> 나머지 구하기*/
SELECT MOD(10,3), ABS(-100) 
FROM DUAL;

--2. 문자함수 단일행함수
SELECT LOWER('KOREA'),UPPER('abcdefg'), INITCAP('ename'),
SUBSTR('ABCDEFG',2,3) /*부분추출 2부터 3개,*/,LENGTH('ABCDEFG'),
INSTR('abcdefgabcdefgabc','a',2,2) /*a가 2번째 나왔을때 위치*/,
LPAD('AAA',10,'#'), /*AAA포함 10칸의 공간에 왼쪽으로 빈공간에 #로 채워라*/
RPAD('BBB',10,'%')
FROM DUAL;

--3. 날자함수 단일행 함tn
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE+1 FROM DUAL;
SELECT NEXT_DAY(SYSDATE,'수')FROM DUAL; /*현재 날자에서 가장 가까운 요일의 날자를 알려줌->NEXT*/
SELECT * FROM EMP;
SELECT ENAME, MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP;
--4. 변환함수의 단일행 함수
--TO_NUMBER(), TO_DATE(), TO_CHAR()
SELECT * FROM EMP;
SELECT EMPNO, ENAME,HIREDATE, TO_CHAR(HIREDATE,'YYYY-MM-DD-DAY:HH24')AS 입사년월 /*날자형식 변환*/
FROM EMP;

SELECT TO_CHAR(TO_NUMBER(1234.5678),'9999.9') 
FROM DUAL;

SELECT EMPNO, ENAME
FROM EMP
WHERE HIREDATE = TO_DATE('1980-12-17','YY-MM-DD');

--5. 일반함수인 단일행함수
--NVL(인수1,인수2)
SELECT NVL(STU_HEIGHT,0)
FROM STUDENT;   /*NULL값을 0으로 채움*/

--NVL2(인수1,인수2,인수3)
--만약에 인수1이 NULL이면 인수 3으로 반환 NULL이 아니면 인수2의 값으로 반환
SELECT * FROM EMP;
SELECT ENAME, NVL2(COMM,SAL+COMM,SAL) SALARRY
FROM EMP;

--NULLIF?
--NULLIF(인수1,인수2):인수1=인수2, NULL
SELECT NVL(NULLIF('A','A'),'널값')
FROM DUAL;
--COALESC(인수1,인수2,...인수N)
SELECT COALESCE(NULL,NULL,NULL,10,100,NULL) /*많은 NULL값들 사이에서 NULL이아닌 첫번쨰 값*/
FROM DUAL;

--CASE/DECODE?
--사원직무별 급여인상액 ("SALESMAN' 10%, 'MANAGE' 20%, 'CLERK' 15% 이외 사무직은
--인상액이 없을 떄 계산하는 출력 질의 문은?
SELECT EMPNO, ENAME, SAL,
CASE JOB WHEN 'SALESMAN' THEN SAL*1.1
         WHEN 'CLERK' THEN SAL*1.15
         WHEN 'MANAGE' THEN SAL*1.2
         ELSE SAL
         END AS 급여인상
FROM EMP;    

SELECT EMPNO, ENAME, JOB, SAL,
DECODE(JOB, 'SALESMAN',SAL*1.1,
            'CLERK',SAL*1.15,
            'MANAGER',SAL*1.2)
            AS 인상된급여
FROM EMP;

--그룹함수
--정리를 시켜주는 함수 : AVG, COUNT(*), COUNT(),SUM(),MAX(),MIN(),MIN(),STDDEV()
--VARIANCE()
SELECT MAX(ENR_GRADE),MIN(ENR_GRADE)
FROM ENROL;
/*최대값 최소값*/
SELECT MAX(STU_WEIGHT),MIN(STU_HEIGHT)
FROM STUDENT;

/*전체 행 수, NULL값을 제외한 숫자*/
SELECT COUNT(*), COUNT(STU_HEIGHT)
FROM STUDENT;

--학과별로 그룹화하여 학과별 평균 체중을 구하여라
SELECT STU_DEPT, ROUND(AVG(STU_WEIGHT))
FROM STUDENT
GROUP BY STU_DEPT;

--체중이 50KG 이상 학생들의 학과별 인원수를 구하라
SELECT STU_DEPT, COUNT(*)
FROM STUDENT
WHERE STU_WEIGHT>=50
GROUP BY STU_DEPT;


--다중열 그룹바이절
SELECT STU_DEPT, STU_GRADE, COUNT(*)
FROM STUDENT
GROUP BY STU_DEPT, STU_GRADE;

--HAVING절 : 그룹바이에서 조건이 사용되는 경우에 사용
--기계과 학생들중 학년별 평균 신장이 160 이상인 학년과 평균신장 구하라
SELECT STU_GRADE, AVG(STU_HEIGHT)
FROM STUDENT
WHERE STU_DEPT='기계'
GROUP BY STU_GRADE 
HAVING AVG(STU_HEIGHT)>=130;

SELECT STU_DEPT, MAX(STU_HEIGHT)
FROM STUDENT
GROUP BY STU_DEPT HAVING MAX(STU_HEIGHT)>=175;
728x90

'국비교육과정 > ORACLE(DATABASE)' 카테고리의 다른 글

1일차 과제  (0) 2022.04.06

댓글