DBMS/DBMS강의

DBMS SQL ( Structured Query Language) 1

개바새바 2022. 8. 25. 20:12
728x90

 

빅데이터 : 수학 / 개발 / DB


Database 파트
Database란 프로그램에 필요한 데이터를 저장하는 파일


DBMS : Database 파일의 안정성, 보안성, 성능효율 등을 책임지고 관리하는 솔루션

* SQL 명령어를 통해 데이터를 관리

- DDL : ( DB상의 객체를 제어하는 명령어 ) : Create / Alter / Drop

- DML : ( DB상의 데이터를 제어하는 명령어 ) : Insert / Delete / Update / Select

             - DQL : ( 비표준문법 ) : Select

- DCL : ( DB상의 User 객체의 권한을 제어하는 명령어 ) : Grant / Revoke

- TCL : ( DB상의 Transaction 을 제어하는 명령어 ) : Commit / Rollback / Savepoint

 

 

Select : 데이터를 추려내겠다. 그런데 어떤 항목인데 ? 

from : ~에서

Where절 : 조건을 추가하자 and, or

as : 엘리어스 별명, 컬럼명이 딱 떨어지지않는 경우에 사용.

sysdate : 현재 시각, 날짜

날짜끼리는 뺄셈 연산만 가능하다. 날짜의 대소비교도 가능하다. between 가능

문자일때는 싱글쿼테이션

문자는 is, is not 사용해서 비교

 

 

 

Oracle Sql Developer
DBMS에 명령어를 적어서 넘기는 역할을 하는 프로그램

Query문 (요청문)
* 관리자에서 계정 생성하는 방법(앞은 아이디, 뒤는 패스워드)

create user cafe identified by cafe;


* 계정 연결 및 리소스 권한 부여 방법

grant connect, resource to cafe;


실행할 라인에 커서 두고 ctrl + enter 누르면 실행 된다.

 

 

SQL ( Structured Query Language)

  • 소프트웨어 개발자 기본기 문법
  • 객체를 건드리는 문법 : DDL 문 (Data Definition Language) : create(만들기), drop(지우기), alter(수정)
  • 데이터를 건드리는 문법 : DML 문 (Data Manipulation Language) : update, delete, insert, select
                                         → DQL 문 (Data Query Language) : select
  • 권한 통제 : DCL 문 (Data Control Language) : grant(권한부여), revoke(권한뺏기)
  • 데이터 조작 : TCL  (Transaction Control Language) : rollback, commit, savepoint

  • column 열
  • record, row 행 (3행시, 4행시 생각)

 

 

객체를 만드는 create / 테이블 인스턴스를 만들겠다.

create table cafe_menu(
    id number ,
    name varchar(20),
    price number
);


- 3개의 record로 만들어져있다. 3개가 합쳐져져서 하나의 메뉴 
- 이름 / 자료형 쓰기(varchar에는 문자 개수()까지 작성)

 

  • cafe menu 테이블 안에 데이터를 저장하라.
insert into cafe_menu values(1001, 'Americano', 2000);
insert into cafe_menu values(1002, 'Cafe Latte', 3000);

 

  •  desc 묘사해라
desc cafe_menu;

 

  • cafe_menu 테이블 안에 모든 내용을 출력하라.
select * from cafe_menu;

 


 

  • 테이블 이름 출력
select table_name from user_tables;

 

select 문법
존재하는 테이블 내에서 특정 데이터를 선별하여 출력하는 명령
select * from [테이블 이름]

 

  • 전체 컬럼 모두 출력
select * from employee;

객체는 대소문자를 안가림. 문자열에서는 대소문자를 가림. 테이블 이름 출력

 

 

  • 특정 컬럼명만 선택하여 출력
select emp_id, emp_name, email from employee;

 

  • 특정 조건을 만족하는 Row만 출력
select * from employee where emp_id = 210;

 

  • employee 에서 emp_id는 210과 같다.
select emp_id, emp_name, salary from employee where emp_id = 210;

 

  • 문자열값은 대소문자를 가린다.
select * from employee where emp_name = '유하진';
select * from employee where dept_code = 'D8' and emp_name = '이태림';

 

  • 테이블을 표현해주세요.
desc employee;

 

  • 오라클은 맥락을 스스로 분석해서 - 를 보고 문자를 숫자로 바꿔서 연산을 한다.
select * from employee where salary = 8000000;
select * from employee where salary = '8000000';
select * from employee where salary = (10000000 - '2000000');

 

-- Quiz
--1. Job 테이블에서 Job_name의 정보만 출력해보세요.
select Job_name from Job;

--2. Department 테이블에서 모든 컬럼을 출력해보세요.
select * from department;

--3. Employee 테이블에서 이름, 이메일, 전화번호, 고용일만 출력해보세요.
select emp_name, email, phone, hire_date from employee;

--4. Employee 테이블에서 월급 250만원 이상인 사람의 이름과 급여등급만 출력해보세요.
select emp_name, sal_level from employee where 2500000<=salary;

--5. Employee 테이블에서 급여가 350만원 이상이면서 job_code가 J3인 사람의 이름과 전화번호를 출력해보세요.
select emp_name, phone from employee where job_code = 'J3' and 3500000<=salary;

--6. Employee 테이블에서 급여가 400만원 이상 600만원 이하인 사람의 사번, 이름, 부서코드, 급여를 출력해보세요.
select 
    emp_id, 
    emp_name, 
    dept_code, 
    salary 
from employee 
where salary between 4000000 and 6000000;
--    4000000<=salary and salary<=6000000;

 

  • 헤더 이름 넣기
select emp_name "사원명", salary * 12 "연봉", '원' as "원" from employee;
  • select는 반복문과 같다.
  • alias 별명, as, 생략 가능 as "" 같이 생략
  • 데이터 영역에 들어가는 문자열은 '' single quotation
  • 연봉은 header에 들어가는 문자열은 "" double quotation
select 
    emp_name 사원명, 
    salary * 12 연봉,
    '원' 단위
from employee;

 

  • 오라클 내에서 데이터 연결은 || 연산자
select emp_name 사원명, salary || '원' 급여 from employee;

 

  • 더미 1개 생성
select * from dual;

daul 테이블 : 반복되지않음.

 

  • 현재 시각 더미 1개 생성
select sysdate from dual;

  • sysdate : java에서의 timestamp : 상수값 : SQL Developer가 날짜로 형 변환해서 보여줌
  • 날짜는 덧셈 안됨, 뺄셈만 됨.

 

  • 현재 날짜에서 과거 입사날짜 빼기
select emp_name, sysdate - hire_date from employee;

  • hire_date 데이터 타입이 DATE
  • . 앞에 숫자는 날자(일수) 차이

 

  • Employee 테이블 내에서 20년 이상 근속한 직원의 이름, 급여, 보너스율을 출력하세요.
select emp_name, salary, bonus from employee where 365*20<=(sysdate-hire_date);
select 
    emp_name, 
    salary, 
    bonus 
from employee 
where 
    (sysdate-hire_date)/365 >= 20;

 

  • 날짜 데이터끼리는 뺄셈 연산만 가능 (두 날짜 사이에 일수 차이 반환)

 

  • 날짜는 대소 비교가 가능 (Between 도 가능)
select emp_name, hire_date from employee where hire_date between '00/01/01' and '10/12/31';
select emp_name, hire_date from employee where '00/01/01' <= hire_date and hire_date <= '10/12/31';

 

  • 근속년수가 10년 이상 된 직원 중 급여가 200만원 이하인 직원의 이름과 급여, 직급 코드를 출력해보세요.
select emp_name, salary, job_code from employee 
	where salary <= 2000000 and (sysdate - hire_date) >= 10*365 ;
select emp_name, salary, job_code from employee 
    where ((sysdate - hire_date)/365 >= 10) and salary <= 2000000;

 


검색

  • like ~인
select *
from employee
where emp_name like '하%';

select *
from employee
where emp_name like '%하';
select *
from employee
where emp_name like '%하%';
  • %는 '하' 라는 글자가 어디든 포함이 되어있다면.
    맨 앞이든, 중간에 어느 곳이든, 맨 뒤든 다 찾는다. 0글자 이상, 공백도 가능
select *
from employee
where emp_name like '하_';
  • 언더바는 '하'로 시작해서 뒤에 한글자가 있는 데이터를 찾아준다.

 

  • not like ~아닌
select *
from employee
where emp_name not like '하__';

 

  • ESCAPE'#' _ 나 % 기호 자체를 검색하고 싶을 때 
select email
from employee
where email like '___#_%'ESCAPE'#';

  • #(아무기호)을 탈출하는 문자로 사용하겠다. 가지고 있는 특정 기능을 탈출하기 위함

 

  • null 값을 찾을 때
select * from employee where bonus is null;

select * from employee where bonus is not null;

 

 

-- 1. employee 테이블에서 이름이 연 으로 끝나는 사원의 이름을 출력하세요.
select emp_name from employee where emp_name like '%연';

-- 2. employee 테이블에서 전화번호 첫 3자리가 010이 아닌 사원의 이름과 전화번호를 출력하세요.
select emp_name, phone from employee where phone not like '010%';

-- 3. employee 테이블에서 생일이 9월자인 사원의 이름과 주민번호만 출력하세요.
select emp_name, emp_no from employee where emp_no like '___9%';

-- 4. employee 테이블에서 메일 주소에 s  가 들어가면서, dept_code 가 D9 또는 D6 인 직원들 중에서, 
--   고용일이 90년 1월 1일부터 2000년 12월 1일 사이에 입사했으며, 
--   급여가 270만원 이상인 사원의 전체 정보를 출력하세요.
select * from employee 
where 
	(email like '%s%') and 
	(dept_code = 'D9' or dept_code = 'D6') and 
	(hire_date between '90/01/01' and '2000/12/01') and 
	(salary>=2700000);
728x90