본문 바로가기

Oracle SQL

Oracle SELECT

column은 SELECT로 찾는다.

show user;
-- 왼쪽 접속 카테고리에서 테이블에서 디파트먼츠, 임플로이를 가장 많이 쓴다.
SELECT * FROM tab; -- 계정의 테이블(객채) 정보 보기

--계정의 테이블 정보 보기
SELECT * FROM user_tables;
SELECT * FROM user_indexes; 
SELECT * FROM user_views;
SELECT * FROM user_sequences;
SELECT * FROM user_synonyms;

DESC employees;

--모든 컬럼 보기
SELECT * FROM employees;
select *
from employees;

SELECT employee_id, last_name, hire_date, salary
FROM employees;

SELECT last_name, salary, salary * 12
FROM employees;

--별칭 가능 => as 생략가능하지만 생략하는 것을 권장하지 않음
SELECT last_name as 이름, salary as 월급, salary * 12 as 연봉
FROM employees;

SELECT last_name as "이름", salary as 월급, salary * 12 as 연봉
FROM employees;


--commission_pct가 null 값이여서 null 연산에 의해 null로 반환되어 문제가 발생(에러는 안남)
SELECT last_name 이름, salary 월급, commission_pct 수수료,
 salary* 12+commission_pct as 연봉
FROM employees;


SELECT last_name 이름, salary 월급, commission_pct 수수료,
 salary* 12+nvl(commission_pct,0) as 연봉
FROM employees;

--연결
sELECT last_name || salary as "이름 월급" FROM employees;
--콜럼 + 문자 가능 **** 쌍따옴표는 별명만 가능~
sELECT last_name || ' 사원' FROM employees;

seLECT last_name || '의 직업은 ' || job_id || ' 입니다' as "사원별 직급" FROM employees;

--중복제거, 어떤 종류의 job인지?
SELECT job_id  --job_id가 중복돼서 나옴
FROM employees; 

SELECT DISTINCT job_id  --job_id가 중복제거돼서 나옴
FROM employees;

--where절의 조건식에 맞는 레코드만 반환해준다.
SELECT employee_id,last_name,job_id, salary
FROM employees
WHERE salary >= 10000;

-- sql에서는 == 연산자가 아니라, = 연산자로 비교해야한다. '같다' 비교연산자는 =, <>, ^= 세개이다.
SELECT employee_id,last_name,job_id, salary
FROM employees
WHERE salary = 10000;

SELECT employee_id,last_name,job_id, salary
FROM employees
WHERE salary != 10000;  -- 같은 심볼로 <>도 있다.

SELECT employee_id,last_name,job_id, salary
FROM employees
WHERE last_name = 'King'; -- 문자열은 반드시 홑따옴표 사용!!! 쌍따옴표""는 별칭에서만~
--리터럴은 식별자와 달리 대소문자를 구분한다. 따라서, 위 식별코드에서 king하면 에러남.

SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE hire_date > '07/12/31'; -- 문자, 날짜는 무조건 홑따옴표 써야한다~~~
-- 날짜는 내부적으로 숫자처리해서 비교하기 때문에 걱정안해도 된다.

-- salary가 7천 이상이고, 8천 이하인 레코드를 반환
SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE salary BETWEEN 7000 AND 8000;

-- 3. IN 연산자 ==> 여러 개의 값을 지정할때
SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE salary IN (100,200,300); -- IN 값이 없을때 에러 안나고 아무것도 표출안해준다.

SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE last_name IN ('King','Abel','Jones');

SELECT employee_id,last_name,salary,hire_date
FROM employees
WHERE hire_date IN ('01/01/03','07/02/07');

--LIKE 연산자 => J로 시작하는 임의의 레코드를 호출
SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE 'J%';

SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE '%ai%';

SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE '%in';

-- 언더바_를 와일드카드에 사용시, 반드시 언더바의 앞 뒤 순으로 있는 문자를 가진 레코드를 호출.
SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE '_b%';  -- 두번째에 반드시 b가 있는 레코드 호출

SELECT employee_id,last_name,salary
FROM employees
WHERE last_name LIKE '_____d%'; -- 언더바 5개사용, 여섯번째 자리에 d 문자를 가진 레코드를 호출


-- escape를 'E'로 선언해주고, 'E'바로 뒤에 있는 언더바 한 개는 와일드카드가 아닌 escape로 바뀌어 사용된다.
SELECT employee_id,last_name,salary,job_id
FROM employees
WHERE job_id LIKE '%E___' ESCAPE 'E';


SELECT last_name,job_id,salary
FROM employees
WHERE job_id = 'IT_PROG' AND salary >= 5000;

SELECT last_name,job_id,salary
FROM employees
WHERE job_id = 'IT_PROG' OR salary >= 5000;


SELECT last_name,job_id,salary
FROM employees
WHERE NOT salary < 20000;  -- salary >= 20000과 동일


--1) and연산과 or연산의 우선순위로 인해 145,6,7번줄의 and 연산부터 수행된다.
SELECT last_name,job_id,salary,commission_pct
FROM employees
WHERE job_id ='AC_MGR' OR job_id='MK_REP'
AND commission_pct IS NULL
AND salary >=4000
AND salary <= 9000;
--2) 괄호연산()이 and보다 높기때문에 or 괄호 안이 먼저 실행된다.
SELECT last_name,job_id,salary,commission_pct
FROM employees
WHERE ( job_id ='AC_MGR' OR job_id='MK_REP' ) 
AND commission_pct IS NULL
AND salary >=4000
AND salary <= 9000;


-- is null : null 값 찾기
SELECT last_name,job_id,salary
FROM employees
WHERE commission_pct = NULL; -- 안나옴

SELECT last_name,job_id,salary
FROM employees
WHERE commission_pct IS NULL; -- 나옴


--세일즈가 아닌 사원 검색하기
SELECT last_name,job_id,salary
FROM employees
WHERE commission_pct IS NULL;

 
SELECT last_name,job_id,salary
FROM employees
WHERE manager_id IS NOT NULL; -- 위와 반대

오라클은 SELECT, FROM 절은 무조건 있어야 한다. 단, 연산만 필요하고 테이블이 필요없을땐 다음 테이블을 쓰도록 하자.

*dual 테이블 

=> dummy table

=> 용도: 연산, 현재 날짜

 

***변환함수

자동형변환(묵시적) : 수치->문자열<-날짜 , 수치 <- 문자열 -> 날짜

명시적 형변환: 수치 <ㅡ to_number() ㅡ 문자열 ㅡ to_date() ㅡ>날짜

                        수치 ㅡ to_char() ㅡ> 문자열 <ㅡ to_char() ㅡ날짜

 

*** SQL에서 select의 순서

일단 select 문은 다음과 같이 구성되어 있다.

select

from

where

group by

having

order by

위 여섯가지 절의 실행 순서는 다음과 같다.

from -> where -> group by -> having -> select -> order by

'Oracle SQL' 카테고리의 다른 글

Oracle 간단 정리  (0) 2022.07.25
Oracle) Sub query & Transaction  (0) 2022.07.22
Oracle JOIN  (0) 2022.07.21
Oracle SQL 시작  (0) 2022.07.19