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 |