현대-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>
-
각 학생의 평점을 검색하라(학번, 이름, 학점) : student ->별칭사용
SELECT sno "학번", sname "이름", avr "평점" FROM student;
-
각 과목의 학점을 검색하라.(과목번호, 과목명, 학점수) : course -> 별칭
SELECT cno "과목번호", cname "과목명", st_num "학점수" FROM professor;
-
각 교수의 직위를 검색하라.(교수번호, 교수이름, 직위) : professor -> 별칭
SELECT pno "교수번호", pname "교수이름", orders "직위" FROM professor;
-
급여를 10% 인상했을 때 각 직원마다 연간 지급되는 급여를 검색하라. : emp(사원번호, 사원이름, 연봉) -> 별칭
SELECT cno"사원번호", ename "사원이름", sal*12*1.1 "연봉" FROM emp;
-
현재 학생의 평점은 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>
-
2,3학년 학생 중에서 학점이 2.0에서 3.0 사이의 학생을 검색하라.
-
화학, 물리학과 학생중에 1,2학년 학생을 성적 순으로 검색하라.
-
화학과 정교수를 검색하라.
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>
-
화학과 학생 중에 성이 '관'씨인 학생을 검색하라.
-
부임일이 1995년 이전의 정교수를 검색하라.
-
성과 이름이 각각 1글자인 교수를 검색하라.(이름이 2자)
-
화학과 학생 중에 4.5 환산 학점이 3.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>
-
emp테이블을 사용하여 20번, 30번 부서에 근무하고 있는 사원 중 급여(sal)가 2000 초과인 사원을 다음 두가지 방식의 SELECT문을 사용하여 사원번호, 급여, 부서번호를 출력하라.
-
집합 연산자를 사용하지 않은 방식
-
집합 연산자를 사용한 방식
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
'FULLSTACK > DB' 카테고리의 다른 글
DB 6차시 - 제어문(조건문), 예외처리, 커서, 프로시저, 함수 (0) | 2020.11.13 |
---|---|
DB 5차시 - 인덱스, 뷰, 시퀀스, PL/SQL (0) | 2020.11.13 |
DB 4차시 - 서브쿼리문 (0) | 2020.11.13 |
DB 3차시 - 조인(SELF, OUTER) (0) | 2020.11.13 |
DB 2차시 - 그룹함수, 다양한 함수들, DDL, DML (0) | 2020.11.13 |