무회blog

DB:오라클DB, SQL, 001, 환경셋팅 본문

DB

DB:오라클DB, SQL, 001, 환경셋팅

최무회 2020. 9. 1. 15:35

1. 계정 만들기

sqlplus/nolog

conn sys as sysdba/1234


*user 생성

2. 계정 생성

create user TEST192 identified by 1234;


3. 권한 수여

grant connect, resource, dba to TEST192;

conn TEST192/1234


*oracle_exam2.sql 불러오기

sqlplus/nolog

conn TEST192/1234


파일 불러오기

@D:\oracle_exam2.sql


* hr 락을 풀기 unlock

conn/ as sysdba

alter user hr identified by hr account unlock;

conn 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;

conn scott/tiger

select*from tab;


- 테이블 목록 불러오기

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;


- 중복된 데이터를 제거

->  SELECT DISTINCT job_id FROM employees;


------------------------------------------------------------------------------


* 정렬 묶음 검색(order by 절)

* 기본 order by 는 오름차순

-> select eno, ename, sal from emp;

     order by sal desc , eno


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

  select * from PROFESSOR;


  select section, pname, hiredate from professor

   order by section,hiredate;


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

* sql 문은 소대문자 구분시 문자열은 홀 다음표 -> 'King' 사용


-> 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 연산자는 2조건을 모두 만족할때 연산자

- hr  계정에서 사용

연봉이 5천에서 1만불 사이의 직원 내역을 출력하라.

------------------------------------------------------------------------------

-- 특정된 row 만 출력 하기

->  SELECT employee_id, last_name, SALARY

  from employees

  where salary >= 5000 and SALARY <= 10000

  order by salary;


- BETWEEN AND 연산자 사용시 조금더 편리

-> SELECT employee_id, last_name, SALARY

  from employees

  where salary BETWEEN 5000 and 10000


- OR 연산자

->   SELECT employee_id, last_name, SALARY

  FROM employees

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



- IN 연산자 (OR 연산자 동일 효과)

- OR 연산자의 반복 연산자를 줄이기 위해 사용

->   SELECT employee_id, last_name, SALARY

  FROM employees

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



<mission TEST192>

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

->   select sname, syear, avr from student

  where syear BETWEEN 2 and 3 and avr between 2.0 and 3.0;


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

->   select syear,major,avr from student

  where major in('화학','물리')

  order by avr desc; 


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

  select * from PROFESSOR

   where section = ('화학') and orders in('정교수');


------------------------------------------------------------------------------

* NOT 연산자

  - 10번 부서 이외의 내역을 보고 싶을때

-> SELECT department_id, departmet_name

     FROM departments

     WHERE NOT department_id = 10;



-> SELECT department_id, departmet_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 연산자

- 문자열 검색시 % 연산자와 많이 사용됨, 예: LIKE %a% ,

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

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

- 예4: '%김%' => '김'이라는 문자를 포함하는 모든 문자열 예) 김씨, 돌김, 삼각김밥,

'화_' => '화'로 시작하는 2글자 문자열 예) 화약, 화분

'_등_' => '등'이 가운데 들어간 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%';


퀴즈 hr 계정에서 사용

퀴즈 hr > last_name 예 'a' 가 들어가지 않는 사원을 출력하라.


------------------------------------------------------------------------------

--   퀴즈

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

  select *from STUDENT;

  select sname, major from student

  where sname like '관%'

  and major = '화학';


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

  select *from PROFESSOR;

  select pname, orders, hiredate

  from PROFESSOR

  where hiredate <= '95/01/01';


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

  select pname , ORDERS

  from PROFESSOR

  where pname like '__';


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

  select *from STUDENT;

  select sname, major, AVR

  from student

  where AVR/4*4.5 >= 3.5

  and major = '화학';


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

  select *from student;

  select sname , syear, major,avr

  from student

--  where major != '화학'

--  where not major = '화학'

  where major <> '화학'

  order by 3,2;


------------------------------------------------------------------------------

* 그룹함수


- sum(), avg(), max(), count()

- select sum(salary) from employees;


select sum(salary) from employees;

  select avg(salary) from employees;

  select max(salary) from employees;

  select MIN(salary)  from employees;

  select count(salary) from employees;

  select count(*) from employees;


* GROUP BY


- 부서별 평균급여를 검색하라 .

->  SELECT department_id, FIRST_NAME, avg(SALARY)

     FROM employees

     GROUP BY department_id, FIRST_NAME;


MISSION

--1. 화학과 학년별 평균 학점을 검색하라.


  SELECT SYEAR, AVG(avr)

  from student

  group by syear;

--2. 각 학과별 학생수를 검색하라.

  select major, count(major)

  from student

  group by major;

--3. 화학과 생물학과 학생을 4.5환산 학점의 평균을 각각 검색하라.

  select major,syear, avr, avg(avr*4.5/4)

  from student

  where major in('화학','생물')

  and avr is not null

  group by major,syear, avr

  order by major desc,syear;




------------------------------------------------------------------------------

 

Comments