본문 바로가기
데이터베이스/oracle

CHAPTER 04. SELECT문의 기본 형식-Do it! 오라클로 배우는 데이터베이스 입문

by nyeongha 2024. 6. 28.

 Lock사용자 확인

SELECT username, account_status, lock_date
FROM dba_users;

 

LOCKED<TIMED>: 패스워드 설정횟수 입력 오류, Unlock 명령으로 해결

EXPIRED & LOCKED: 패스워드 기간만료이므로 , Unlock 후 비밀번호를 지정해줘야 한다.

ALTER USER 사용자명 ACCOUNT UNLOCK;
alter user 사용자명 identified by 바꿀패스워드; 
select * 
from departments;

DESCRIBE EMPLOYEES;

DESC DEPARTMENTS;

--모든 사원에 대해 $300의 급여 인상액을 계싼.
-- 출력에 salary+300열을 표시

select last_name, salary,salary+300
from employees;​

alter session set nls_date_format='YYYY/MM/DD';

select last_name,hire_date,hire_date+300
from employees;

select last_name,job_id,salary,commission_pct
from employees;

 

SQL PLUS는 빈칸으로 나옴

sql developer에서는 null이라고 나옴

select last_name,12*salary*commission_pct
from employees;

산술연산식에  null이 포함되면 무조건 null이됨.

--연결 연산자(|| : 파이프라인)
/*
last_name 과 Job_id가 연결되고
employees라는 alias가 주어집니다.
사원의 성과 직무코드가 결합되어 단일 출력 열이 만들어집니다.
*/

select last_name||job_id AS "Employees"
from employees;

--날짜 및 문자 리터럴은 반드시 작은 따옴표('')로 묶어야 함

select last_name||' is a '||job_id
AS "Employee Details"
from employees;

-- 모든 사원의 이름과 커미션 백분율을 표시합니다.
select last_name as name,commission_pct comm
from employees;

-- 모든 사원의 성과 연간 급여를 표시합니다.
select last_name "neme" ,salary*12 "annual salary"
from employees;

-- distinct

select department_id
from employees;

select distinct department_id
from employees;

select distinct department_id,job_id
from employees;

 

 

distinct는 중복값을 제외하고 보여줌.

distinct는 칼럼 맨 앞에옴.

 

-산술연산자

-연결연산자

-null

-alias(as)-""큰따음표로 감싸줌

-distinct

-날짜와 문자리터럴을 ' '작은 따옴표로 감싸줌

 

show user;

-- employees테이블에서 employee_id,last_name,job_id,department_id,hire_date를 employee_id값으로 오름차순으로 정렬검색
select  employee_id,last_name,job_id,department_id,hire_date
from employees
order by employee_id;

오름차순은 asc(default값)

내림차순은 desc를 order by 마지막 부분에 붙여줌.

 

-- alias
select employee_id,last_name,salary*12 annsal
from employees
order by annsal;

-- 위치 number
select employee_id,last_name,salary*12 annsal
from employees
order by 3;

--null위치 확인
select empno,ename,sal,comm
from emp
order by comm;

oracle에서 null값은 가장 무거운수로 나온다.

--nulls last
select empno,ename,sal,comm
from emp
order by comm nulls last;
-- asc으로 정렬하되 널값은 마지막에

-- nulls first
select empno,ename,sal,comm
from emp
order by comm nulls first;

select employee_id,last_name,job_id,department_id
from employees
where department_id=90;

select last_name,job_id,department_id
from employees
where last_name='Whalen';

select last_name,job_id,department_id
from employees
where last_name='WHALEN';

데이터는 대소문자 구분을 한다.

-- 비교 연산자
select last_name,salary
from employees
where salary<>3000;

select last_name,salary
from employees
where salary!=3000;

--2500 이상 3500사이
select last_name,salary
from employees
where salary between 2500 and 3000;

--in연산
select employee_id,last_name,salary,manager_id
from employees
where manager_id in (100,101,201);

--like연산자
select first_name
from employees
where first_name like 'S%';

-- 대체 문자
-- 앞에서 두번째 문자가 o로 되어있는 사람
select last_name
from employees
where last_name like '_o%';

-- 대체 문자
-- 마지막 두번째 문자가 o로 되어있는 사람
select last_name
from employees
where last_name like '%o_';

-- '%'가 문자열로 포함된 경우 검색방법(escape문자)
select ename from emp;
update emp set ename='sc%tt'where ename='SCOTT';
select ename from emp;

--c%가 포함된 문자열
select ename from emp
where ename like '%c\%%' escape '\';

select last_name,manager_id
from employees
where manager_id is null;

select last_name, job_id, commission_pct
from employees
where commission_pct is not null;

-- SALARY가 1000이상이면서 JOB_ID에 'MAN'이 들어가는 사원의 employee_id,last_name,salary검색
select employee_id,last_name,salary
from employees
where salary>=1000 or job_id like '%MAN%';

 

*단일행 함수

- 문자조작

- 숫자조작

- 날짜 조작

 

*변환함수

- to-char

- to_data

- to_number

 

select lower('SQL COURSE') as lower,
upper('SQL Course') as upper,
INITCAP('SQL Course') as initcap
from dual;

--data저장값을 정확히 모를때
--출력안됨
select employee_id,last_name,department_id
from employees
where last_name='higgins';


--출력됨
select employee_id,last_name,lower(last_name),department_id
from employees
where lower(last_name)='higgins';

select concat('Hello','World') as concat,
substr('HelloWorld',1,5) as substr,
length('HelloWorld') as length,
instr('HelloWorld','W') as instr
from dual;

--날짜 조작함수
select sysdate
from dual;

alter session set nls_date_format='RR/MM/DD HH:MI:SS';
select sysdate from dual;

alter session set nls_date_format='YYYY/MM/DD';
select Last_day ('2005/02/05') from dual;

select empno,comm,nvl(comm,0),deptno
from emp;

nvl(칼럼,0):널값이 있으면 0으로 치환