728x90

대-3조단위로 ERP와 DB에  돈을 쓰고있음

  • Database Management System(데이터베이스 관리 시스템)

  • 대용량의 데이터를 쉽게 저장하고, 효율적으로 검색, 수정, 삭제(CRUD)할 수 있는 환경을 제공해 주는 소프트웨어를 DBMS라 한다.

    • 응용프로그램과 데이터베이스의 중재자로서 모든 응용 프로그램(Client)들이 데이터베이스를 공유하고, 체계적으로 관리할 수 있게끔 관리해 준다.

  • 대표적인 DBMS

    • Oracle, mySQL, MS-SQL, Informix, Sybase, DB2

DB의 언어 => SQL

PL/SQL(좀 더 깊은 언어축)

데이터모델링 ->정규화

최종목적 : 요구분석 - 데이터모델링 - ER다이어그램(설계된 도메인) - 구축 - 활용

 

관계형-DBMS : 데이터에 규격이 있는 것, 엄격하고 신뢰도 있고 안정적인 데이터를 구축하려면 관계형사용(Oracle)

★★데이터의 무결성

NoSQL : 기본정형화된 틀이 없다. 몽고db(json구조), 정형화되지 않은 데이터를 담아서 사용할 수 있다.

 

 

 

->SQL깔기

<cmd창>

sqlplus/nolog

 

conn sys as sysdba=>1234

 

*user 생성

create user kosta202 identified by 1234;

grant connect, resource, dba to kosta202;

conn kosta202/ 1234 (kosta202/1234)

 

-oracle_exam02.sql 불러오기

@C:\Users\mhee4\Desktop\DB\oracle_exam2.sql

 

*hr계정 unlock

conn /as sysdba

alter user hr identified by hr account unlock;

conn hr/hr (hr/hr)

select * from tab;

 

*scott 계정 불러오기

conn system/1234

@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql

alter user scott identified by tiger; (scott/tiger)

select * from tab;

 

 

**kosta202, Hr, scott 계정 설정

-테이블 목록 불러오기

select * from tab;

 

-각 테이블 구조 불러오기

DESC 테이블명

 

-SELECT 질의문

->SELECT (키워드는 대문자로) 컬럼명,,,,(*) FROM 테이블명

            WHERE 조건내용

            GROUP BY 그룹기준

            ORDER BY 정렬기준

-employees 테이블의 전체 데이터 불러오기

-> SELECT * FROM employees;

 

퀴즈 > hr계정 employees테이블에서 employee_id, last_name 컬럼에 대한 모든 데이터를 출력하라.

->SELECT employee_id, last_name FROM employees;

 

-별칭 => AS, ""

-> SELECT employee_id AS 사원번호, last_name "성" FROM employees;

 

 

 

<mission kosta202>

  1. 각 학생의 평점을 검색하라(학번, 이름, 학점) : student ->별칭사용

SELECT  sno "학번", sname "이름", avr "평점" FROM student;

  1. 각 과목의 학점을 검색하라.(과목번호, 과목명, 학점수) : course -> 별칭

SELECT cno "과목번호", cname "과목명", st_num "학점수" FROM professor;

  1. 각 교수의 직위를 검색하라.(교수번호, 교수이름, 직위) : professor -> 별칭

SELECT pno "교수번호", pname "교수이름", orders "직위" FROM professor;

  1. 급여를 10% 인상했을 때 각 직원마다 연간 지급되는 급여를 검색하라. : emp(사원번호, 사원이름, 연봉) -> 별칭

SELECT cno"사원번호", ename "사원이름", sal*12*1.1 "연봉" FROM emp;

  1. 현재 학생의 평점은 4.0 만점이다. 이를 4.5만점으로 환산해서 검색하라. : student(학번, 이름, 환산학점)

SELECT sno "학번", sname "이름", avi*4.5/4.0 "환산학점" FROM student;

 

*정렬 묶음 검색 (ORDER BY)

ORDER BY [정렬명][인덱스][옵션]

SELECT eno, ename, sal FROM emp

            ORDER BY sal DESC, eno

 

퀴즈>각 학과별로 교수의 정보를 부임일자 순으로 검색하라.

SELECT section, pname, hiredate FROM professor ORDER BY section, hiredate;(오름차순)

 

*조건에 맞는 일부 데이터 불러오기(WHERE절)

-> SELECT employee_id, last_name, hire_date

        FROM employees

        WHERE last_name = 'King';

 

-> SELECT employee_id, last_name, hire_date

        FROM employees

        WHERE hire_date = '03/01/01';

 

**AND 연산자

퀴즈 hr>연봉 5000~10000불 사이의 직원들 내역을 출력하라.

->SELECT employee_id, first_name, last_name, salary

            FROM employees

            WHERE salary>=5000 AND salary<=10000;

 

**BETWEEN AND 연산자

->SELECT employee_id, first_name, last_name, salary

            FROM employees

            WHERE salary BETWEEN 5000 AND 10000;

 

**OR연산자

->SELECT employee_id, last_name,  job_id

            FROM employees

            WHERE job_id = 'FI_MGR' OR job_id = 'FI_ACCOUNT';

 

**IN연산자★★

->SELECT employee_id, last_name,  job_id

            FROM employees

            WHERE job_id IN('FI_MGR', 'FI_ACCOUNT');

 

<mission kosta202>

  1. 2,3학년 학생 중에서 학점이 2.0에서 3.0 사이의 학생을 검색하라.

  2. 화학, 물리학과 학생중에 1,2학년 학생을 성적 순으로 검색하라.

  3. 화학과 정교수를 검색하라.

SELECT*FROM student

        WHERE avr BETWEEN 2.0 AND 3.0 

        AND syear IN (2,3);

SELECT *FROM student

        WHERE syear IN (1,2)

         AND major IN ('화학', '물리')

        ORDER BY avr DESC;

SELECT * FROM professor

        WHERE section ='화학'

         AND orders ='정교수';

        

**NOT연산자

->SELECT department_id, department_name

            FROM departments 

            WHERE NOT department_id = 10;

-> SELECT department_id, department_name

            FROM departments 

            WHERE department_id <>10;

-> SELECT department_id, department_name

            FROM departments 

            WHERE department_id ^=10;

-> SELECT department_id, department_name

            FROM departments 

            WHERE department_id !=10;

 

**IS NOT NULL 연산자

->SELECT employee_id, last_name, commission_pct

            FROM employees

            WHERE commission_pct IS NOT NULL;

 

**LIKE 연산자(검색기능)

->'김%' => '김'으로 시작하는 모든 문자열 예)김길동, 김박사, 김밥

->'%과' => '과'로 끝나는 모든 문자열 예)인사과, 화학과

->'%김%' => '김'이란 문자를 포함하는 모든 문자열 예)김씨, 돌김, 참치김밥

->'_등_' => '등'이 가운데 들어간 3글자 문자열 예)고등어, 꽃등심, 삼등분

 

-07년도 입사한 사원 목록을 출력하라.

->SELECT employee_id, last_name, hire_date

            FROM employees

            WHERE hire_date BETWEEN '07/01/01' AND '07/12/31';

->SELECT employee_id, last_name, hire_date

            FROM employees

            WHERE hire_date LIKE '07%';

 

퀴즈>last_name에 'a'가 포함되지 않는 사원을 출력하라.

->SELECT *FROM employees

            WHERE last_name NOT LIKE '%a%';

 

<mission kosta202>

  1. 화학과 학생 중에 성이 '관'씨인 학생을 검색하라.

  2. 부임일이 1995년 이전의 정교수를 검색하라.

  3. 성과 이름이 각각 1글자인 교수를 검색하라.(이름이 2자)

  4. 화학과 학생 중에 4.5 환산 학점이 3.5이상인 학생을 검색하라

  5. 화학과 이외 학과 학생의 평점을 각 학과별 그리고 학년별 순서로 출력하라.

SELECT * FROM student

        WHERE major = '화학'

        AND sname LIKE '관%';

SELECT * FROM professor

        WHERE hiredate<'1995-01-01'

        AND orders = '정교수';

SELECT * FROM professor

        WHERE pname LIKE '__';

SELECT sno, sname, sex, syear, major, (avr/4.0)*4.5 FROM student

        WHERE major = '화학'

        AND (avr/4.0)*4.5 >=3.5;

SELECT  syear, sname,major, avr FROM student

        WHERE  major <> '화학'

        ORDER BY major, syear;

 

 

**집합(집합쓸때는 ; 없어도 실행됨)

-UNION : 결과값을 합집합으로 묶음(데이터 중복은 제거된다.)

-UNIONALL : 결과값을 합집합으로 묶음(데이터 중복도 허용한다.)

-MINUS : 결과값을 차집합으로 묶음 A-B = A(순수한 A)

-INTERSECT : 결과값을 교집합으로 묶음

 

=>컬럼의 개수와 자료형을 일치

 

->SELECT eno, ename, dno

            FROM emp

            WHERE dno = 10

UNION

SELECT eno, ename, dno

        FROM emp

        WHERE dno = 20

 

퀴즈>집합연산자를 이용해서 전체 emp 내용중 10번 부서번호를 제외한 나머지 내용을 출력하자.

->SELECT * FROM emp

MINUS

SELECT * FROM emp

        WHERE dno = 10

 

 

<mission scott>

  1. emp테이블을 사용하여 20번, 30번 부서에 근무하고 있는 사원 중 급여(sal)가 2000 초과인 사원을 다음 두가지 방식의 SELECT문을 사용하여 사원번호, 급여, 부서번호를 출력하라.

    1. 집합 연산자를 사용하지 않은 방식

    2. 집합 연산자를 사용한 방식

 

 

SELECT EMPNO, ENAME, JOB, SAL FROM EMP

    WHERE dno = '20' OR dno = '30'

    AND sal > 2000;

 

 

SELECT eno, sal, dno FROM emp

      WHERE dno = '20' 

        AND sal > 2000

UNION

SELECT eno, sal, dno FROM emp

      WHERE dno = '30'

      AND sal >2000

 

 

 

 

 

 

728x90

+ Recent posts