728x90
반응형
SMALL

변환 함수

* 암시적인 데이터형 변환

* 명시적인 데이터형 변환

 

1. 암시적 형 변환

- 값 할당 시 오라클은 자동으로 변환한다.

From To 비고
VARCHAR2 / CHAR NUMBER 표현식 계산의 경우
VARCHAR2 / CHAR DATE 표현식 계산의 경우
NUMBER VARCHAR2  
DATE VARCHAR2  
select employee_id, first_name, hire_date
from employees
where hire_date='03/06/17';
--char가 DATE형으로 변환
select employee_id, first_name, department_id
from employees
where department_id='40';
--char가 NUMBER타입으로 자동 형 변환

 

2. 명시적 형 변환

변환 함수 설명
TO_CHAR(number [, 'fmt']) 숫자를 문자 타입으로
TO_CHAR(date[, 'fmt']) 날짜를 문자 타입으로
TO_NUMBER(char[, 'fmt']) 숫자를 포함하 문자를 숫자로
TO_DATE(char[, 'fmt']) 날짜를 나타내는 문자를 DATE타입으로

 

3. 날짜를 문자로 변환

TO_CHAR(date, 'fmt')
select first_name, TO_CHAR(hire_date, 'MM/YY') as hiremonth
from employees
where first_name='Steven';

select first_name, to_char(hire_date, 'YYYY"년" MM"월" DD"일"') as hiredate
from employees;

select first_name,to_char(hire_date, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM',
'NLS_DATE_LANGUAGE=english') as hiredate from employees;

 

4. 숫자를 문자로 변환

TO_CHAR(number, 'fmt')
select first_name, last_name,to_char(salary, '$999,999') salary
from employees;

select first_name, last_name, salary*0.123456 salary1,
to_char(salary*0.123456, '$999,999.99') salary2
from employees
where first_name='David';

5. TO_NUMBER 함수

TO_NUMBER(char, 'fmt')
select '$5,500'-4000 from dual; --오류
select to_number('$5,500', '$999,999')-4000 from dual;

 

6. TO_DATE 함수

TO_DATE(char, 'fmt')
select first_name, hire_date
from employees
where hire_date=to_date('2003/06/17','YYYY/MM/DD');

select first_name, hire_date
from employees
where hire_date = to_date('2003년06월17일', 'YYYY"년"MM"월"DD"일"');

7. Null 치환 함수 NVL, NVL2, COALESCE

1) NVL1

NVL(expr1, expr2)
--expr1:널이 있을 수 있는 열
--expr2:널일경우 치환할 값
select first_name, salary + salary*nvl(commission_pct,0) from employees;

2) NVL2

nvl2(expr1, expr2, expr3)
select first_name,
nvl2(commission_pct, salary+salary*commission_pct, salary) as nann_sal
from employees;

3) COALESCE

COALESCE(expr1, ...)
select first_name,
coalesce(salary+salary*commission_pct, salary)as ann_sal
from employees;

 

 

8. 기타 변환 함수

1) LNNVL 

LNNVL(expr1)
select first_name, coalesce(salary*commission_pct,0) as bonus from employees
where salary*commission_pct < 650;

==>null인 것들을 모두 제외하게 됨

select first_name, coalesce(salary*commission_pct,0) as bonus from employees
where lnnvl(salary*commission_pct >= 650);

=>null값도 포함시킴

 

2) DECODE

select job_id, salary, 
decode(job_id, 'IT_PROG', salary*1.10,
'FI_MGR', salary*1.15,
'FI_ACCOUNT', salary*1.20,
salary) as revised_sal
from employees;

 

3) CASE

select job_id, salary,
case job_id when 'IT_PROG' then salary*1.10
when 'FI_MGR' then salary*1.15
when 'FI_ACCOUNT' then salary*1.20
else salary
end as revise_sal
from employees;

=>위와 같은 결과

select employee_id, salary,
case when salary < 5000 then salary*1.2
when salary < 10000 then salary*1.10
when salary < 15000 then salary*1.05
else salary
end as revised_sal
from employees;

 

집합 연산자

1. UNION

- 합집합과 같은 의미

- 중복된 정보는 한 번만 보여줌.

select employee_id, first_name from employees where hire_date like '04%'
union
select employee_id, first_name from employees where department_id=20;

 

2. UNION ALL

- 중복된 정보 포함

select employee_id, first_name from employees where hire_date like '04%'
union all
select employee_id, first_name from employees where department_id=20;

 

3. INTERSECT

- 중복된 행만 출력

- 교집합과 같은 의미

select employee_id, first_name from employees where hire_date like '04%'
intersect
select employee_id, first_name from employees where department_id=20;

 

4. MINUS

- 첫번째 쿼리에만 포함되고 두번째 쿼리에는 없는 데이터를 보여준다.

- 차집합과 같은 의미

select employee_id, first_name from employees where hire_date like '04%'
minus
select employee_id, first_name from employees where department_id=20;

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 5. 분석 함수  (0) 2023.05.11
[SQL] 4. 그룹 함수를 이용한 데이터 집계  (0) 2023.05.10
[SQL] 3. 함수 - 1  (0) 2023.05.09
[SQL] 2. SELECT문  (0) 2023.05.08
[SQL] 1. 데이터베이스 소개  (0) 2023.05.08
728x90
반응형
SMALL

함수

1. SQL 함수 개요

- 함수 : 데이터를 조작하기 위해 사용됨.

- 특징 :

1) 데이터 계산 수행

2) 개별적인 데이터 항목 수정

3) 행의 그룹에 대해 결과 조작

4) 출력을 위한 날짜와 숫자 형식 설정

5) 열의 데이터 타입 반환

2. SQL 함수의 두 가지 유형

* 단일행 함수

- 오직 단일행에서만 적용 가능하고 행별로 하나의 결과를 반환

 

* 다중행 함수

- 복수의 행을 조작하여 행의 그룹 당 하나의 결과를 반환

 

3. 단일 행 함수

function_name(column | expression, [arg1, arg2, ...])

- 데이터 값 조작

- 인수(argument)를 받고 하나의 결과 리턴

- 리턴될 각각의 행에 적용

- 행별로 하나의 결과 리턴

- 데이터 타입 수정 가능

- 중첩(nested)될 수 있다.

- 종류 : 문자/숫자/날짜/변환/General 함수

 

문자 함수

select initcap('helloworld') from dual;

1. LOWER, INITCAP, UPPER

select last_name, lower(last_name), initcap(last_name), upper(last_name)
from employees;
select last_name, lower(last_name), initcap(last_name), upper(last_name)
from employees
where lower(last_name)='austin';

2. LENGTH, INSTR

select first_name, length(first_name),instr(first_name,'a')
from employees;

3. SUBSTR, CONCAT

select first_name, substr(first_name,1,3), concat(first_name, last_name)
from employees;

4. LPAD, RPAD

select rpad(first_name,10,'-') as name, lpad(salary,10,'*')as sal
from employees;

5. LTRIM, RTRIM

select ltrim('JavaSpecialist','Java') from dual;
select ltrim(' JavaSpecialist') from dual;
select trim( 'JavaSpecialist ') from dual;

6. REPLACE, TRANSLATE

select replace('JavaSpecialist','Java','BigData') from dual;
select replace('Java Specialist',' ','') from dual;
select translate('javaspecialist','abcdefghijklmnopqrstuvwxyz','defghijklmnopqrstuvwxyzabc') from dual;

7. 실전 문제

select rpad(substr(first_name,1,3),length(first_name),'*') as name,
lpad(salary,10,'*') as salary 
from employees
where lower(job_id) = 'it_prog';

 

정규표현식 함수

함수 명칭 설명
REGEXP_LIKE 패턴에 이리하는 문자열을 포함하는 행 찾기
LONG 지원X
REGEXP_INSTR 지정한 조건을 만족하는 부분의 최초의 위치를 돌려줌.
REGEXP_SUBSTR 지정한 정규 표현을 만족하는 부분 문자열 반환
REGEXP_REPLACE 지정한 정규 표현을 만족하는 부분을, 지정한 다른 문자열로 치환

1. 정규표현식

- 횟수 지정 메타 문자

메타 문자 기능
? 0회 또는 1회
* 0회 이상
+ 1회 이상
{n} n회 이상
{m,} m회 이상
{m,n} m회 이상 n회 이하

- 메타 문자

메타 문자 기능
. 문자
[] 문자들
[^ ] 부정
^ 처음
$
() 그룹 묶기

- 탈출 문자

탈출 문자 기능
\n n번째 패턴
\w "-"와 영숫자
\W \w 반대
\s 공백
\S 공백 제외
\d 숫자
\D 숫자 제외

- POSIX 문자클래스

문자 클래스 설명
   
   
   
   
   
   
   
   
   

 

2. REGEXP_LIKE 함수

REGEXP_LIKE(source_string, pattern[, match_parameter])
Create table test_regexp (col1 varchar2(10));
insert into test_regexp values('ABCDE01234');
insert into test_regexp values('01234ABCDE');
insert into test_regexp values('abcde01234');
insert into test_regexp values('01234abcde');
insert into test_regexp values('1-234-5678');
insert into test_regexp values('234-567890');

select * from test_regexp
where regexp_like(col1,'[0-9][a-z]');

select * from test_regexp
where regexp_like(col1,'[0-9]{3}-[0-9]{4}$');
select * from test_regexp
where regexp_like(col1,'[[:digit:]]{3}-[[:digit:]]{4}$');
select * from test_regexp
where regexp_like(col1,'^[0-9]{3}-[0-9]{4}');

 

create table qa_master (qa_no varchar(10));

alter table qa_master add constraint qa_no_chk check
(regexp_like(qa_no,
'^[[:alpha:]]{2}-[[:digit:]]{2}-[[:digit:]]{4}$'));

insert into qa_master values('QA-01-0001');
insert into qa_master values('00-01-0001'); --오류

 

3. REGEXP_INSTR 함수

REGEXP_INSTR(source_string, pattern [, start_position
[, occurrence [ , return_option [, match_parameter]]]])
insert into test_regexp values('@!=)(9&%$#');
insert into test_regexp values('자바3');

select col1,regexp_instr(col1,'[0-9]') as data1,
regexp_instr(col1,'%') as data2 from test_regexp;

4. REGEXP_SUBSTR 함수

REGEXP_SUBSTR(source_string, pattern [, start_position [, occurrence [, match_parameter]]])
select col1, regexp_substr(col1, '[C-Z]+') from test_regexp;

5. REGEXP_REPLACE 함수

regexp_replace(source_string, pattern [, replace_string [, start_position [, occurrence [, match_parameter]]]])
select col1, regexp_replace(col1,'[0-2]+','*')
from test_regexp;

 

6. 실전 문제

select first_name, phone_number
from employees
where regexp_like(phone_number,'[0-9]{3}.[0-9]{3}.[0-9]{4}$');

 

select first_name, 
regexp_replace(phone_number, '[0-9]{4}$','****') as phone,
regexp_substr(phone_number, '[0-9]{4}$') as phone2
from employees;

숫자 함수

1. ROUND, TRUNC

select round(45.923,2), round(45.923,0), round(45.923,-1) from dual;

select trunc(45.923,2), trunc(45.923), trunc(45.923,-1) from dual;

 

날짜 함수

select sysdate from dual;

1. 날짜의 연산

- 날짜에서 숫자를 더하거나 빼 날짜 결과를 반환

- 날짜 사이의 일(day) 수를 알기 위해 두 개의 날짜를 뺀다

- 시간을 24로 나누어 날짜에 더한다.

select first_name, (sysdate-hire_date)/7 as "weeks"
from employees
where department_id=60;

2. 날짜 함수

select first_name, sysdate, hire_date, months_between(sysdate, hire_date) as workmonth
from employees
where first_name='Diana';
select first_name, hire_Date, add_months(hire_date, 100)
from employees
where first_name='Diana';
select sysdate, next_day(sysdate,'월')
from dual;
select sysdate, last_day(sysdate) from dual;
select sysdate, round(sysdate), trunc(sysdate) from dual;
select sysdate, round(sysdate), trunc(sysdate) from dual;
select trunc(sysdate, 'Month') from dual;
select trunc(sysdate, 'Year') from dual;
select trunc(to_date('17/03/16'), 'Month') from dual;
select round(to_date('17/03/16'), 'Month') from dual;
select trunc(to_date('17/03/16'), 'Day') from dual;

 

 

 

 

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 5. 분석 함수  (0) 2023.05.11
[SQL] 4. 그룹 함수를 이용한 데이터 집계  (0) 2023.05.10
[SQL] 3. 함수 - 2  (0) 2023.05.09
[SQL] 2. SELECT문  (0) 2023.05.08
[SQL] 1. 데이터베이스 소개  (0) 2023.05.08
728x90
반응형
SMALL

SELECT 문장

1. SELECT

SELECT [DISTINCT] {* | coulumn[[AS] alias], ...}
FROM tablename;
SELECT 하나 이상의 열을 나열합니다.
DISTINCT 중복 제거
* 모든 열 선택
column 명명된 열 선택
AS 열 별칭(alias) 지정
alias 선택된 열을 다른 이름으로 변경
FROM tablename; 열을 포함하는 테이블 명시

 

2. SQL 문장 작성

- 대/소문자 구별X

- 문장이 한 줄 이상일 수 있음

- 키워드는 단축하거나 줄을 나눠 쓸 수 있음

- 절은 대개 줄을 나누어 작성

- 탭과 들여쓰기는 가독성을 위해 사용

SQL> SELECT first_name, last_name, salary
  2  FROM employees;

 

3. 모든 열 선택

SQL> SELECT *
  2  FROM departments;

 

4. 특정 열 선택

SQL> SELECT department_name, location_id
  2> FROM departments;

 

5. 기본 표시 형식

- 디폴트 데이터 자리맞춤을 지정합니다.

- 날짜와 문자 데이터는 왼쪽 정렬됩니다.

- 숫자 데이터는 오른쪽 정렬됩니다.

- 디폴트 열 헤딩은 대문자로 출력됩니다

 

6. 열 별칭(alias) 정의

- 열 헤딩 이름을 변경합니다.

- 계산할 때 유용

- 열 이름 바로 뒤에 두며 AS 별칭 으로 하기도 합니다.

- 공백/특수문자는 인용부호(" ")가 필요합니다.

SQL> SELECT first_name AS 이름, salary 급여
  2  FROM employees;

 

7. 리터럴(literal) 문자 스트링과 연결 연산자

- SELECT 절에 포함된 리터럴은 문자 표현식 또는 숫자 입니다.

- 날짜와 문자 리터럴 값은 단일 인용부호(' ')안에 있어야 합니다.

- 숫자 리터럴은 단일 인용부호(' ')를 사용하지 않습니다.

- 각각의 문자스트링은 리턴된 각 행에 대한 결과입니다.

- ||를 이용하면 값을 연결해 줍니다

SQL> SELECT first_name || ' ' || last_name || '''s salary is $' || salary
  2  AS	"Employee Details"
  3  FROM employees;

 

8. 중복 행과 DISTINCT

- 디폴트 출력은 중복되는 행을 포함하는 모든 행입니다.

- SELECT 절에서 DISTINCT 키워드를 사용하여 중복되는 행을 제거합니다.

 

데이저 제한

1. Selection

- 원하는 행을 선택적으로 조회하는 것

 

2. 선택된 행 제한

- WHERE 절을 사용하여 반환하는 행을 제한

- WHERE 절은 FROM절 다음에 위치

- WHERE 절은 열 이름, 비교 연산자, 비교할 열 이름 또는 값의 목록으로 구성

SELECT [DISTINCT] {*|coulumn[[AS] alis], ...}
FROM table
[WHERE condition(s)];
SELECT first_name, job_id, department_id
FROM employees
WHERE job_id = 'IT_PROG';

 

3. 문자와 날짜

- 문자, 문자열, 날짜는 ''로 둘러쌈.

- 문자 값은 대/소문자 구분, 날짜 값은 형식을 따른다.

- 기본 날짜 형식은 'DD-MON-YY'

SELECT first_name, hire_date
FROM employees
WHERE last_name='King';

 

 

4. 비교 연산자

연산자 설명
= 같다
> 크다
>= 크거나 같다
< 작다
<= 작거나 같다
<> , != 같지 않다

 

5. BETWEEN 연산자

- 값의 범위에 해당하는 값을 출려하기 위해 BEETWEEN 사용

- 하한값 먼저 명시

- 하한값, 상한값 모두 포함

-- 2004년에 입사한 사원
SELECT first_name, salary, hire_date
FROM employees
WHERE hire_date BETWEEN '04/01/01' AND '04/12/31';

6. IN 연산자

- 목록에 값이 있는지 비교

SELECT employee_id, first_name, salary, manager_id
FROM employees
WHERE manager_id IN(101, 102, 103);

 

7. LIKE 연산자

- 검색 문자열에 대한 와일드카드 검색

- 검색 조건은 문자, 날짜 포함 가능

- %는 문자가 없거나 하나 이상 문자들 대신

- _는 하나의 문자 대신

--LIKE연산
SELECT first_name, last_name, job_id, department_id
FROM employees
WHERE job_id LIKE 'IT_%';

 

8. IS NULL 연산자

- IS NULL 연산자로 널인지 테스트

- 널이 아닌 값은 IS NOT NULL

SELECT first_name, manager_id
FROM employees
WHERE manager_id IS NULL;

 

9. 논리 연산자

- AND는 양쪽 조건이 참이어야 TRUE 반환

- OR은 한쪽의 조건이 참이면 TRUE 반환

- NOT 연산자는 뒤의 조건에 반대되는 결과 반환

 

10. 논리 연산자 우선순위

우선순위 연산자
1 모든 비교 연산자
2 NOT
3 AND
4 OR

 

데이터 정렬

- 질의에 의해 검색되는 행을 정렬할 수 있다.

- ORDER BY 절은 SELECT 문장의 가장 뒤에 옴.

- ASC :오름차순

- DSEK : 내림차순

SELECT expr
FROM table
[WEHRE condition(s)]
[ORDER BY {coluumn|expr [[ASC]|DESC];
select first_name, hire_date
from employees
order by hire_date;

select first_name, hire_date from employees
order by hire_date desc;

select first_name, salary*12 as annsal
from employees
order by annsal;

select first_name, salary*12 as annsal
from employees
order by 2;

실습

1. 모든 사원의 사원번호, 이름, 입사일, 급여를 출력하세요.

2. 모든 사원의 이름과 성을 붙여 출력하세요. 열 별칭은 name으로 하세요.

3. 50번 부서 사원의 모든 정보를 출력하세요.

4. 50번 부서 사원의 이름, 부서번호, 직무아이디를 출력하세요.

5. 모든 사원의 이름, 급여 그리고 300달러 인상된 급여를 출력하세요.

6. 급여가 10000보다 큰 사원의 이름과 급여를 출력하세요.

7. 보너스를 받는 사원의 이름과 직무, 보너스율을 출력하세요.

8. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.(BETWEEN 연산자 사용)

9. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.(LIKE 연산자 사용)

10. 모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원순서로 출력하세요.

11. 위 질의를 60번 부서의 사원에 대해서만 질의하세요.

12. 직무아이디가 IT_PROG 이거나, SA_MAN인 사원의 이름과 직무아이디를 출력하세요.

13. Steven King 사원의 정보를 “Steven King 사원의 급여는 24000달러 입니다” 형식으로 출력하세요.

14. 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 출력하세요.

15. 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 직무아이디 순서대로 출력하세요

 

--연습문제
---1
select employee_id, first_name, hire_date, salary
from employees;
--2
select first_name ||' '|| last_name as name
from employees;
--3
select * from employees where department_id=50;
--4
select first_name, department_id, job_id from employees where department_id=50;
--5
select first_name, department_id, salary, salary+300 from employees;
--6
select first_name, salary from employees where salary>10000;
--7
select first_name, job_id, commission_pct from employees
where commission_pct is not null;
--8
select first_name, hire_date,salary from employees
where hire_date between '03/01/01' and '03/12/31';
--9
select first_name,hire_date, salary
from employees
where hire_date like '03%';
--10
select first_name, salary from employees
order by salary desc;
--11
select first_name, salary from employees
where department_id=60
order by salary desc;
--12
select first_name, job_id
from employees
where job_id in('IT_PROG', 'SA_MAN');
--13
select first_name||' '||last_name||' 사원의 급여는 '||salary||'달러입니다.'
from employees
where last_name='King' and first_name='Steven';
--14
select first_name, job_id from employees
where job_id like '%MAN';
--15
select first_name, job_id from employees
where job_id like '%MAN'
order by job_id;
728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 5. 분석 함수  (0) 2023.05.11
[SQL] 4. 그룹 함수를 이용한 데이터 집계  (0) 2023.05.10
[SQL] 3. 함수 - 2  (0) 2023.05.09
[SQL] 3. 함수 - 1  (0) 2023.05.09
[SQL] 1. 데이터베이스 소개  (0) 2023.05.08
728x90
반응형
SMALL

개요

1. 관계형 데이터베이스 역사

1.1 역사

- 1960년대 : Flat File

- 1970년대 : Network DBMS, Hierarchical DB

- 1980년대 : 관계형 DBMS

- 1990년대 : 관계형 DBMS, 객체 관계형 DBMS

- 2000년대 : 관계형/객체관계형/객체지향 DBMS

1.2 데이터베이스 시스템에 대한 관계형 모델 제안

- E.F.Codd 박사(1970년 6월)

- “A Relational Model of Data for Large Shared Data Banks” 라는 논문

- RDBMS(Relational Database Management System)의 시초

1.3 관계형 모델의 구성요소

- 개체(object) 혹은 관계(relation)의 집합

- 관계(relation)에 가해지는 연산자의 집합

- 정확성과 일관성을 위한 데이터 무결

 

2. 관계형 데이터베이스 정의

2.1 정의

- 관계형 데이터베이스는 관계들의 모음 또는 이차원 테이블의 모음이다.

2.2 파일 시스템과 데이터베이스 시스템의 차이점

- 데이터 무결성 제공

- 데이터 공유 가능

- 데이터 정확성과 일관성 제공

- 관계 설정을 통한 중복 제거

- 표준화가 가능

 

3. 관계형 데이터베이스 특징

- SQL을 이용한 데이터 조작

- 데이터 무결성 제공

- 트랜잭션 제공

- ACID 규정 준수 : 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 용어

원자성(Atomicity) 일관성(Consistency) 독립성(Isolation) 지속성(Durability)
- 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
- 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다.
- 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
- 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
- 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
- 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
- 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다.
- 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 
- 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.
- 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다.
- 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다.
- 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

 

4. 엔티티(Entity) 관계 모델

4.1 Employees 테이블과 Departments 테이블의 관계 도표 생성

=> 부서에는 0명 이상의 사원을 갖고 있다.

=> 사원은 부서를 0개 혹은 1개를 가진다.

4.2 시나리오(카디널리티)

4.3 ER 모델링의 장점

- 조직에 대한 정보를 정확하고 자세하게 문서화 => 품질보증에 사용

- 정보 요구사항의 범위를 명확히 기술

- 데이터베이스 설계를 쉽게 이해할 수 있는 표본 제공

- 복수 응용프로그램의 통합화를 위한 효과적 프레임워크 제공

 

 

5. 관계형 데이터베이스의 기본 구조

일반적 개념 모델링 DB객체
데이터 집합,
Relation,
관계집합(Relation Set)
개체집합(Entity Set) 테이블(table)
관계집합 중 어떤 행(row) 튜플(tuple), 엔티티(Entity) 레코드(record)
관계집합 중 어떤 열(column) 속성(attribute) 필드(field)

 

6. 테이블 관련 용어

행(row) 테이블에서 각 행은 중복되지 않으며 기본키에 의해 식별된다. 행의 순서는 무의미하다.
열(column) 한 종류의 데이터를 나타내며 한 열의 데이터는 같은 타입을 갖는다.
기본키(primary key) 기본키는 유일하며 null값을 가질 수 없다. 식별자라고 한다.
외래키(foreign key) 다른 테이블의 기본키 혹은 고유키를 참조하여 사용한다.
필드(field) 행과 열이 교차하는 곳을 말하고, 하나의 값만 가진다.
null 필드는 그 안에 값을 안 가질 수 있다.

 

오라클 DBMS

1. 실습 환경 구축

- https://www.oracle.com 접속

- Oracle Database Express Edition 다운로드

Oracle Database Express Edition (XE) Downloads

 

Oracle Database Express Edition (XE) Downloads

Support Oracle Database Express Edition (XE) is a community supported edition of the Oracle Database family. Please go to the Oracle Database XE Community Support Forum for help, feedback, and enhancement requests. Note: Oracle Support Services only provid

www.oracle.com

- SQLDeveloper 다운로드

Oracle SQL Developer Downloads

 

Oracle SQL Developer Downloads

This archive. will work on a 32 or 64 bit Windows OS. The bit level of the JDK you install will determine if it runs as a 32 or 64 bit application. This download does not include the required Oracle Java JDK. You will need to install it if it's not already

www.oracle.com

 

 

2. 계정 초기화 하기

SQL> conn sys /as sysdba
Enter password:
Connected.
SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL> @?/demo/schema/human_resources/hr_main.sql
specify password for HR as parameter 1:
1의 값을 입력하십시오: hr
specify default tablespeace for HR as parameter 2:
2의 값을 입력하십시오: users
specify temporary tablespace for HR as parameter 3:
3의 값을 입력하십시오: temp
specify log path as parameter 4:
4의 값을 입력하십시오: $ORACLE_HOME/demo/schema/log/

 

3. 쿼리 실행

 

4. sample Table

728x90
반응형
LIST

'IT > SQL' 카테고리의 다른 글

[SQL] 5. 분석 함수  (0) 2023.05.11
[SQL] 4. 그룹 함수를 이용한 데이터 집계  (0) 2023.05.10
[SQL] 3. 함수 - 2  (0) 2023.05.09
[SQL] 3. 함수 - 1  (0) 2023.05.09
[SQL] 2. SELECT문  (0) 2023.05.08

+ Recent posts