08/25 Database

yookyungmin·2022년 8월 25일
0

ctrl+enter dbms에게 보내기

SQL(STRUCURED QUERY LANGUAGE)
==Query문
DDL(DATA DEFINITION LANGUAGE) : create, drop, alter 객체를 건드리는 명령어
DML(DATA MAINPULATIONLANGUAGE) : UPDATE, DELETE, INSERT, SELECT 데이터를 건드리는 명령어, 객체를 건드리지 않음
--->DQL(DATA QUERY LANGUAGE) SELECT 중요
DCL(DATA CONTROL LANGUAGE) : grant(권한부여), revoke(권한뺏기) 권한통제
TCL(TRANSACTION CONTROL LANGUAGE) :ROLLBACK, COMMIT, SAVEPOINT

--주석표기법
create user cafe identified by cafe; --사용자 계정 cafe 패스워드 cafe로 만들겠다

ORA-28002: the password will expire within 7 days 오류 나올때 방법.
해당 내용은 dba계정의 패스워드의 기간이 정해져있을 경우에 나온다. 그래서 7일남았다고 알려주는 경고창이다.

ORA-01045: user 사용자이름 lacks CREATE SESSION privilege; logon denied
권한이 부족하다는 에러

grant connect, resource to cafe; //cafe 에게 접속권한과, 자원관리 권한을 주겠다

table header
row 가로 행 record /row , 데이터 한개의 인스턴스
column 세로 열

SELECT RESOURCE_NAME, LIMIT
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT' AND RESOURCE_TYPE = 'PASSWORD'; --비밀번호 만료 확인

alter profile default limit password_life_time unlimited;-- 비밀번호 만료기한 기본180일 제한 풀기

====================
cafe 테이블
create table cafe_menu(
id number,
name varchar(20),
price number
); --테이블 생성

desc cafe_menu; --생성된 테이블에 대해 묘사 하라 (타입을 알수 있음)

select * from cafe_menu; --cafe_menu 테이블 안의 모든 내용을 출력하라

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

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

select from employee; -- emeployee 테이블에서 모든 내용조회 =all
select from department;
select emp_id, emp_name, email from employee; -- 특정 컬럼 선택해서 조회
select
from employee where emp_id = 210; -- employee테이블에서 emp_id 가 210번인 사람의 모든 컬럼

select *from department;

--특정 조건을 만족하는 ROW만 출력
select * from employee where emp_id = 215; -- employee테이블에서 emp_id 가 210번인 사람의 모든 컬럼
select emp_id, emp_name, salary from employee where emp_id=210; --employee테이블에서 emp_id가 210인 사람의 세가지 컬럼

select *from employee where emp_name='유하진'; -- 싱클커터주의, 이름이 유하진인사람 모든 컬럼

select from employee where dept_code='D8' and emp_name='이태림'; -- 문자열 값 대소문자 주의 부서코드가 D8 그리고 이름이 이태림인사람의 모든 컬럼
select
from employee where dept_code='D8' OR emp_name='선동일'; -- 부서코드 D8 인사람들이거나 이름이 선동일인이사람모두출력
DESC employee;

select from employee where salary = '8000000';
select
from employee where salary = 8000000;
select from employee where salary = (10000000-2000000);
select
from employee where salary = ('10000000'-2000000);
--오라클은 문맥을 스스로 비교하는 기능이 있다.

--1JOB 테이블에서 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 SALARY>=2500000;

--5 . EMPLOYEE테이블에서 급여가 350만원 이상이면서 JOB_CODE가 J3인사람의 이름과 전화번호를 출력해보세요
SELECT EMP_NAME, PHONE FROM EMPLOYEE WHERE SALARY >=3500000 AND JOB_CODE = 'J3';

--6 EMPLOYEE 테이블에서 급여가 400만원 이상 600만원 이하인 사람의 사버느 이름, 부서드, 급여를 출력해보세요
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 4000000 AND 6000000; --400만 ~ 600만 포함한, BETWEEN은 초과 표현 불가
--WHERE 4000000<= SALARY OR SALARY <= 6000000;

----------------------------------------- 새로운문법
SELECT FROM EMPLOYEE;
desc employee;
SELECT EMP_NAME, SALARY
12 as "연봉", '원' 단위 FROM EMPLOYEE;
--as 별명 데이터 영역으로 들어가는게 아니라 헤더영역으로 들어가기떄문에, " " 사용, '원' ,10같이 별개로붙일수 있음

SELECT EMP_NAME, SALARY *12 연봉, '원' 단위 FROM EMPLOYEE;
-- " " 생략가능 컬럼명 변경해서 출력

select emp_name 이름, salary ||'원' 급여 from employee;
-- 오라클 내에서 데이터 연결은 || 연산 컬럼 || 원 하면 붙여짐

select emp_name, sysdate - hire_date from employee;
--sysdate현재 - hire_date 과거 날짜 데이터 끼리는 뺼셈 연산만 가능 (두 날짜 사이에 일수 차이 반환)

select sysdate from employee;

select * from dual; --더미 허수아비
select sysdate from dual;

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

-- 00년 1월 1일 ~ 10/12/31 입사한 사람 , 날짜는 대소비교 가능(between도 가능)
select emp_name, hire_date from employee where '00/01/01' <= hire_Date and hire_date<= '10/12/31';

select emp_name, hire_date from employee where hire_Date between '00/01/01' and '10/12/31';

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

select emp_name 이름, salary 급여, job_code 직업코드 from employee where sysdate-hire_Date > = 365*10 and salary <=2000000;

0개의 댓글