Jam's story
[오라클]days03 본문
-- SCOTT 계정 접속 --
-- 문제) emp 테이블에서 comm 이 null 인 모든 사원 정보를 조회(출력)하는 쿼리 작성하세요.
SELECT *
FROM emp
WHERE comm IS NULL;
-------------------------------------------------------------------------------------
--1. 용어정리
-- ㄱ. Data : 정보(자료)
-- ㄴ. DataBase : Data + Base( 저장소 ) , 데이터 집합
-- ㄷ. DBMS : 데이터베이스 관리 시스템, 소프트웨어 예) 오피스의 엑셀 오라클( Oracle )
-- DBMS 중에 하나 : [오라클], MySQL , MS SQL 등등
-- ㄹ. DBA : DB 관리자 [SYS], SYSTEM ss123$
-- 계정 생성 등등 + 권한 필요
-- 테이블 생성 + 권한 필요
-- [SCOTT] scott.sql 검색 -> emp, dept, salgrade, bonus 테이블 생성
-- GRANT 권한,,,롤 TO 계정 또는 롤
-- ㅁ. 롤(ROLE) :
권한 부여, 제거 DCL - GRANT, REVOKE 문
롤을 회수(제거)
REVOKE 롤이름
FROM 사용자명 또는 롤이름 또는 PUBLIC;
ㄱ. 롤 생성 ⇒ ㄴ. 롤에 권한 부여 ⇒ ㄷ. 사용자에게 롤 부여
【형식】
CREATE ROLE 롤이름
[NOT IDENTFIED 또는 IDENTIFIED
{BY PASSWORD 또는 EXTERNALLY 또는 GLOBALLY 또는 USING 패키지}];
다수 사용자 <- 부여, 제거 -> 다양한 권한 효율적으로 관리( 권한 부여, 제거 )
영업부역할(ROLE) <- 50개의 권한 부여
CREATE USER 계정명
ALTER USER 계정명 INDENTIFIED BY NEW비밀번호 ACCOUNT UNLOCK;
DROP USER 계정명 CASCADE;
CREATE TABLE 테이블명
ALTER TABLE 테이블명 ~
DROP TABLE 테이블명
CREATE ROLE 롤명;
ALTER ROLE 롤명 ~
DROP ROLE 롤명
생산부역할(ROLE) <- 100개의 권한 부여
신입사원역할(ROLE) <- 권한1.... 권한30
GRANT 50개의 권한 TO 롤명
예) 신입사원 <- 신입사원 30개의 권한
50명
A <- 신입사원역할(ROLE)
B <- 신입사원역할(ROLE), 영업부역할(ROLE)
X <- 신입사원역할(ROLE), 생산부역할(ROLE)
B <- 신입사원역할(ROLE), 영업부역할(ROLE)
A50 <- 권한1.... 권한30
select *
from role_sys_privs
where role='RESOURCE' ;
SCOTT : RESOURCE, CONNECT 롤 부여
CREATE SEQUENCE
CREATE TRIGGER
CREATE CLUSTER
CREATE PROCEDURE
CREATE TYPE
CREATE OPERATOR
CREATE TABLE
CREATE INDEXTYPE
문제1) SCOTT 계정이 소유하고 있는 롤을 확인하고
CONNECT 롤 제거
CONNECT 롤 부여
1)
SELECT *
FROM dba_roles;
ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
79행, 18열에서 오류 발생
FROM user_role_privs;
SCOTT CONNECT NO YES NO
SCOTT RESOURCE NO YES NO
FROM role_sys_privs; -- 권한 2가지 : 시스템 권한, 객체 권한
2)
REVOKE CONNECT FROM scott;
3)
GRANT CONNECT TO scott;
ORA-01932: [ ADMIN option ] not granted for role 'CONNECT'
01932. 00000 - "ADMIN option not granted for role '%s'"
*Cause: The operation requires the admin option on the role.
*Action: Obtain the grant option and re-try.
-- ㅂ. SID( 전역 데이터베이스 이름 ) XE
11:07 수업 시작~
설치된 오라클 DB의 고유한 이름
오라클 무료 버전을 설치하면 자동으로 SID=> XE
" 은 1개 만 설치 가능.
-- ㅅ. 데이터 모델
-- ㅈ. R+DBMS
컴퓨터에 데이터를 저장하는 방식을 정의해 놓은 개념 모델.
관계형 데이터 모델 + DBMS = RDBMS 오라클
-- ㅇ. 스키마(Schema)
1) DB에서 어떤 목적을 위하여 필요한 여러 개로 구성된 테이블들의 집합을 Schema라 한다.
2) DATABASE SCHEMA ( DB 스키마 )
- scott 계정 생성 -> 모든 OBJECT 생성 모음 -> 스키마
- 특정 USER와 관련된 OBJECT( 테이블 )의 모음
- emp 테이블 ( 객체 ) 생성
FROM 스키마.테이블명
FROM scott.emp;
3) 용어 정리
인스턴스(instance) : 오라클서버 -> 시작(startup) ~~ 종료(shutdown)
세션(session) : 사용자 로그인-> 로그아웃
스키마(schema) : 특정 USER와 관련된 OBJECT( 테이블 )의 모음
--2. 설치된 [오라클을 삭제]하는 절차를 [검색]해서 상세히 적으세요. ***
ㄱ. 서비스앱( services.msc ) -> 오라클 관련 서비스 중지
ㄴ. uninstall.exe / 프로그램 추가 및 삭제 - 제거
ㄷ. 탐색기 - 오라클 폴더( oraclexe ) 삭제
ㄹ. 레지스트리편집기( regedit.exe ) -> 오라클 관련 레지스트리 삭제
--3. SYS 계정으로 접속하여 모든 사용자 정보를 조회하는 쿼리(SQL)을 작성하세요.
SELECT *
FROM dba_tables;
FROM all_tables; -- SCOTT 계정이 소유하고 있는 테이블 + 권한 부여 받아서 사용할 수 있는 테이블 View
FROM tabs;
FROM user_tables; -- SCOTT 계정이 소유하고 있는 테이블 정보 View
FROM all_users;
FROM user_users;
FROM dba_users;
-- ORA-00942: table or view does not exist
--4. SCOTT 계정 + 소유 객체(테이블) 를 삭제하는 쿼리(SQL)을 작성하세요.
ㄱ. 계정 생성
ㄴ. 계정 수정
ㄷ. 계정 삭제
--5. 위의 4번에 의해서
-- SCOTT 계정이 삭제되었으면 SCOTT 계정을 tiger 비밀번호로 생성하는 쿼리(SQL)을 작성하세요.
--6. 오라클이 제공하는 기본적인 롤(role)의 종류를 적으시고,
--6-2. SCOTT 계정에게 권한을 부여하는 쿼리(SQL)을 작성하세요.
--7-1. SCOTT 계정에게 scott.sql 파일을 찾아서 emp, dept, bonus, salgrade 테이블을 생성 및 데이터 추가한 과정을 작성하세요.
--7-2. 각 테이블에 어떤 정보를 저장하는지 컬럼에 대해 정보( 컬럼명, 자료형 )를 설명하세요.
-- ㄱ. emp
-- ㄴ. dept
-- ㄷ. bonus
-- ㄹ. salgrade
SELECT *
FROM tabs;
DESC emp;
--8. SCOTT 계정이 소유하고 잇는 모든 테이블을 조회하는 쿼리(SQL)을 작성하세요.
SELECT *
FROM user_users;
FROM all_users;
--9. SQL*Plus 를 사용하여 SYS로 접속하여 접속한 사용자 확인하고, 모든 사용자 정보를 조회하고
-- 종료하는 명령문을 작성하세요.
REM 한줄 주석처리
-- 한줄 주석처리
/* 블럭 주석처리
>_
>sqlplus /?
<logon> is: {<username>[/<password>][@<connect_identifier>] | / }
[AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value]
*/
--10. 관계형 데이터 모델의 핵심 구성 요소
ㄱ. 개체
ㄴ. 속성
ㄷ. 관계
--11. Oracle SQL Developer 에서 쿼리(SQL)을 실행하는 방법을 모두 적으세요.
ㄱ. F9
ㄴ. F5
ㄷ. Ctrl + Enter
--12. 오라클 주석처리 방법 3가지를 적으세요.
ㄱ. --
ㄴ. REM
ㄷ. /* */
--13. 자료 사전( Data [Dictionary] ) 이란?
메타 데이터( META DATA ) == Data Dictionary의 정보
ㄱ. Data Dictionary = 테이블 + 뷰(View) 의 집합
ㄴ. 데이터베이스의 정보를 제공하는 역할.
예) scott 소유하고 있는 테이블 정보
FROM user_users; // Data Dictionary . 뷰
ㄷ. DB 생성시 SYS 계정 생성 -> SYS 스키마 생성 내부에 자료 사전 생성
ㄹ.
SCOTT 계정
emp 테이블 생성
12:01 수업시작~
FROM user_tables; // 자료사전 = 뷰 정보
dba_
all_
user_
V$ DB의 성능분석/통계 정보 제공하는 뷰
--14. SQL 이란 ? 서버 <-질의/응답> 클라이언트
구조화된 질의 언어
SQL
--15. SQL의 종류에 대해 상세히 적으세요.
ㄱ. DQL select
ㄴ. DDL create / alter / drop
ㄷ. DML insert / update / delete + COMMIT, ROLLBACK
ㄹ. DCL grant / revoke
ㅁ. TCL COMMIT, ROLLBACK, savepoint
--16. select 문의 7 개의 절과 처리 순서에 대해서 적으세요. *****
WITH 절 1
SELECT 절 6
FROM 절 2
WHERE 절 3
GROUP BY 절 4
HAVING 절 5
ORDER BY 절 7
--17. emp 테이블의 테이블 구조(컬럼정보)를 확인하는 쿼리를 작성하세요.
DESC emp
NLS
날짜 형식 : RR/MM/DD
YY/MM/DD
*** [ RR 년도 / YY 년도 기호 차이점 ]
--18. employees 테이블에서 아래와 같이 출력되도록 쿼리 작성하세요.
FIRST_NAME LAST_NAME NAME
-------------------- ------------------------- ----------------------------------------------
Samuel McCain Samuel McCain
Allan McEwen Allan McEwen
Irene Mikkilineni Irene Mikkilineni
Kevin Mourgos Kevin Mourgos
Julia Nayer Julia Nayer
SELECT FIRST_NAME, LAST_NAME
, FIRST_NAME || ' ' || LAST_NAME AS "NAME"
, FIRST_NAME || ' ' || LAST_NAME "NAME"
, FIRST_NAME || ' ' || LAST_NAME NAME
FROM employees;
ORA-00942: table or view does not exist
--19. 아래 뷰(View)에 대한 설명을 적으세요.
-- ㄱ. dba_tables
-- ㄴ. all_tables
-- ㄷ. user_tables == tabs
--20. HR 계정의 생성 시기와 [잠금상태]를 확인하는 쿼리를 작성하세요.
SELECT *
FROM dba_users;
FROM all_users; -- HR 43 14/05/29
FROM user_users;
DESC dba_users;
SELECT username, account_status
FROM dba_users
WHERE username = 'HR';
--21. emp 테이블에서 잡, 사원번호, 이름, 입사일자를 조회하는 쿼리를 작성하세요.
SELECT job, empno, ename, hiredate
FROM emp;
--22. emp 테이블에서 아래와 같은 조회 결과가 나오도록 쿼리를 작성하세요.
( sal + comm = pay )
-- ORA-00904: "PAY": invalid identifier
-- COMM 컬럼의 값을 NULL 처리를 했더라.
-- NVL( ? , ? ) 커미션이 NULL 인경우에는 0 값으로 처리하겠다.
-- NVL2( ? , ? , ? )
SELECT empno, ename, sal
--, NVL( comm , 0 ) COMM, sal + NVL(comm, 0) pay
, NVL2( comm , comm , 0 ) COMM, sal + NVL2(comm, comm , 0) pay
FROM emp;
EMPNO ENAME SAL COMM PAY
---------- ---------- ---------- ---------- ----------
7369 SMITH 800 0 800
7499 ALLEN 1600 300 1900
7521 WARD 1250 500 1750
7566 JONES 2975 0 2975
7654 MARTIN 1250 1400 2650
7698 BLAKE 2850 0 2850
7782 CLARK 2450 0 2450
7839 KING 5000 0 5000
7844 TURNER 1500 0 1500
7900 JAMES 950 0 950
7902 FORD 3000 0 3000
EMPNO ENAME SAL COMM PAY
---------- ---------- ---------- ---------- ----------
7934 MILLER 1300 0 1300
12개 행이 선택되었습니다.
--23. emp테이블에서
-- 각 부서별로 오름차순 1차 정렬하고 급여(PAY)별로 2차 내림차순 정렬해서 조회하는 쿼리를 작성하세요.
SELECT deptno, ename, sal + NVL(comm, 0) pay
FROM emp
ORDER BY deptno ASC, pay DESC;
-- ORDER BY deptno ASC, sal + NVL(comm, 0) DESC
--24. 계정을 생성하는 쿼리 형식에 대해 적으세요.
--25. 생성된 계정의 비밀번호 , 잠금을 해제하는 쿼리 형식에 대해서 적으세요.
--26. DB에 로그인할 수 있는 권한을 부여하는 쿼리 형식에 대해서 적으세요.
--27. 특정포트( 1521 Port )를 방화벽 해제하는 방법에 대해서 상세히 과정을 적으세요.
--28. SQL*PLUS 툴을 사용해서
-- ㄱ. SYS로 로그인하는 방법(형식)을 적으세요
-- ㄴ. SCOTT로 로그인하는 방법(형식)을 적으세요
--29. SQL의 작성방법
--30. 아래 에러 메시지의 의미를 적으세요.
ㄱ. ORA-00942: table or view does not exist FROM 테이블명 또는 뷰명
enp 코딩 X
접근 권한 X
ㄴ. ORA-00904: "SCOTT": invalid identifier
식별자
ㄷ. ORA-00936: missing expression 표현식( 수식 ) 이 잘못된 경우
ㄹ. ORA-00933: SQL command not properly ended
WHERE score >= 40 ||
SQL ? 구조화된 질의 언어
PL/SQL = SQL + (절차적인 언어(Procedural Language)) 확장
절차적 언어 문법
if
for
제어문
변수
[ SQL 작성 방법 ]
1. 대소문자 구분 X
select *
from emp;
Select *
From emp;
SELECT *
FROM EMP;
WHERE username = 'hr';
WHERE username = 'HR';
2) sqlplus
SQL> select
2 *
3 from
4 emp
5 ;
3)
SELECT empno, ename , deptno
FROM emp;
4) 절 별로 라인 구분
5) 키워드 대문자, 그외 문자( 테이블명, 컬럼명 등등 ) 소문자 - 권장.
6) 탭, 공백 사용 - 권장
-- 31. emp 테이블에서 부서번호가 10번이고, 잡이 CLERK 인 사원의 정보를 조회하는 쿼리 작성.
SELECT *
FROM emp
WHERE depnto = 10 AND job = 'CLERK';
-- 31-2. emp 테이블에서 잡이 CLERK 이고, 부서번호가 10번이 아닌 사원의 정보를 조회하는 쿼리 작성.
SELECT *
FROM emp
WHERE NOT( depnto = 10 ) AND job = 'CLERK';
WHERE depnto <> 10 AND job = 'CLERK';
WHERE depnto ^= 10 AND job = 'CLERK';
WHERE depnto != 10 AND job = 'CLERK';
-- 32. 오라클의 null의 의미 와 null 처리 함수에 대해서 설명하세요 .
ㄱ. null 의미? 미확인된 값
예) 사람의 몸무게 null
ㄴ. null 처리 함수 2가지 종류와 형식을 적고 설명하세요 .
NVL() , NVL2()
-- 33. emp 테이블에서 부서번호가 30번이고, 커미션이 null인 사원의 정보를 조회하는 쿼리 작성.
( ㄱ. deptno, ename, sal, comm, pay 컬럼 출력, pay= sal+comm )
( ㄴ. comm이 null 인 경우는 0으로 대체해서 처리 )
( ㄷ. pay 가 많은 순으로 정렬 )
SELECT deptno, ename, sal, comm, sal + NVL( comm, 0 ) pay
FROM emp
WHERE deptno = 30 AND comm is not null;
WHERE deptno = 30 AND comm is null;
WHERE deptno = 30 AND comm = null;
[NOT] IN ( list )
[NOT] BETWEEN a AND b
IS [NOT] NULL
null
1. 미확인된 값
2. '' 0 다른 값
3. null 유무를 확인할 때는 = 비교연산자를 사용하지 않고
SQL 연산자 중에 is null, is not null 연산자를 사용한다.
-- 34. insa 테이블에서 수도권 출신의 사원 정보를 모두 조회하는 쿼리 작성 ( 오름차순 정렬 )
ㄱ. OR 연산자 사용해서 풀기
SELECT *
FROM insa
WHERE city = '서울' OR city = '경기' OR city = '인천'
ORDER BY city ASC ;
ㄴ. IN ( LIST ) SQL 연산자 사용해서 풀기
SELECT *
FROM insa
WHERE city IN ( '서울' , '경기' , '인천' )
ORDER BY city ASC ;
-- 35. insa 테이블에서 수도권 출신이 아닌 사원 정보를 모두 조회하는 쿼리 작성 ( 오름차순 정렬 )
ㄱ. AND 연산자 사용해서 풀기
SELECT *
FROM insa
WHERE city != '서울' AND city != '경기' AND city != '인천'
ORDER BY city ASC ;
ㄴ. NOT IN ( LIST ) SQL 연산자 사용해서 풀기
SELECT *
FROM insa
WHERE city NOT IN ( '서울' , '경기' , '인천' )
ORDER BY city ASC ;
ㄷ. OR, NOT 논리 연산자 사용해서 풀기
SELECT *
FROM insa
WHERE NOT ( city = '서울' OR city = '경기' OR city = '인천' )
ORDER BY city ASC ;
-- 36. 오라클 비교 연산자를 적으세요.
ㄱ. 같다 : =
ㄴ. 다르다 : != <> ^=
-- 37. emp 테이블에서 pay(sal+comm)가 1000 이상~ 2000 이하 받는 30부서원들만 조회하는 쿼리 작성
조건 : ㄱ. pay 기준으로 오름차순 정렬 --ename을 기준으로 오름차순 정렬해서 출력(조회)
ㄴ. comm 이 null은 0으로 처리 ( nvl () )
-- SQL 실행 순서 *****
SELECT deptno, ename, sal + NVL(comm, 0) pay
FROM emp
WHERE sal + NVL(comm, 0) BETWEEN 1000 AND 2000 AND deptno = 30
--WHERE pay BETWEEN 1000 AND 2000 AND deptno = 30 -- pay를 인식하지 못해서 에러 발생.
ORDER BY pay ASC;
ORA-00904: "PAY": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
477행, 7열에서 오류 발생
-- 두 번째 방법으로 풀이 : with 절 사용.
SELECT deptno, ename, sal + NVL(comm, 0) pay
FROM emp
WHERE deptno = 30;
30 ALLEN 1900
30 WARD 1750
30 MARTIN 2650
30 BLAKE 2850
30 TURNER 1500
30 JAMES 950
위의 결과물을 가지고 WITH 절 사용.
WHERE pay BETWEEN 1000 AND 2000;
--------------------------------------------------------------------
WITH temp AS (
-- 서브쿼리( subquery )
SELECT deptno, ename, sal + NVL(comm, 0) pay
FROM emp
WHERE deptno = 30
)
SELECT t.*
FROM temp t -- 테이블의 별칭
WHERE t.pay BETWEEN 1000 AND 2000;
--------------------------------------------------------------------
-- 세 번째 방법 - 인라인뷰( inline view )
-- 인라인뷰( inline view ) ? FROM 절 안에 있는 서브쿼리를 "인라인뷰" 라고 한다.
SELECT t.*
FROM (
-- 서브쿼리( subquery )
SELECT deptno, ename, sal + NVL(comm, 0) pay
FROM emp
WHERE deptno = 30
) t
WHERE t.pay BETWEEN 1000 AND 2000;
[질문]
강사님
아까 첫번째 방법에서
SELECT 절 사용할 수 있는 키워드 : AS, DISTINCT, ALL
WHERE sal+nvl(comm,0) AS PAY BETWEEN 1000 AND 2000 AND deptno = 30 ;
이렇게 하면 오류나는데 그럼 WHERE에는 별칭들어가면 안되는 건가요?
-- 38. emp 테이블에서 1981년도에 입사한 사원들만 조회하는 쿼리 작성.
LIKE SQL 연산자
REGEXP_LIKE() 함수
-- '80/12/17'
SELECT hiredate, ename
FROM emp
WHERE hiredate LIKE '81%'
--WHERE TO_CHAR( hiredate, 'YYYY' ) = '1981'
--WHERE SUBSTR( hiredate , 0 , 2 ) = '81'
--WHERE hiredate BETWEEN '1981.1.1' AND '1982.1.1'
--WHERE hiredate BETWEEN '1981.1.1' AND '1981.12.31'
ORDER BY hiredate;
-- '80/12/17'
SELECT hiredate
,SUBSTR( hiredate , 0 , 2 ) YY
,SUBSTR( hiredate , 1 , 2 ) YY_1
-- , substr( char, position, length )
-- , substr( char, position [, length] ) 문자열 끝까지 잘르겠다.
FROM emp;
-- 3:05 수업시작~
-- 오라클 날짜에서 년/월/일 얻어오는 방법 ?
TO_CHAR( 날짜형 ) 함수는 날짜형 인자값을 내가 원하는 값(년도, 월, 일, 요일 등등)을 문자열로 반환하는 함수
[ 오라헬프 ] YY와 RR의 차이점:
SELECT hiredate
, TO_CHAR( hiredate, 'RR' )
, TO_CHAR( hiredate, 'YY' )
, TO_CHAR( hiredate, 'RRRR' )
-- 두 함수의 차이점 : '1981' 문자열 1981 숫자
, TO_CHAR( hiredate, 'YYYY' )
, EXTRACT( YEAR FROM hiredate ) "YEAR"
, TO_CHAR( hiredate, 'YEAR' )
, TO_CHAR( hiredate, 'SYYYY' )
FROM emp;
DESC emp;
HIREDATE DATE
Oracle : DATE '1998.01.12'
JAVA : 날짜형 Date, Calendar, LocalDate, LocalTime, LocalDateTime
year 년도만 얻어올 수 있었어요..
Date d = new Date();
int year = d.getYear() + 1900
c.get(Calendar.YEAR)
문제) insa 테이블에서
주민등록번호로 부터
앞자리 6자리 출력,
뒷자리 7자리 출력,
년도 2자리 출력,
월
일
주민번호 마지막 검증 1자리 출력
하는 쿼리를 작성하세요.
771212-1******
SELECT name, ssn
, SUBSTR( ssn, 0 , 8 ) || '******' RRN
, CONCAT( SUBSTR( ssn, 0 , 8 ) , '******') RRN
-- , SUBSTR( ssn, 0 , 6 ) RRN6
-- , SUBSTR( ssn, 1 , 6 ) RRN6
-- , SUBSTR( ssn, 8 , 7 ) RRN7
-- , SUBSTR( ssn, -7 ) RRN7
-- , SUBSTR( ssn, 0 , 2 ) YY
-- , SUBSTR( ssn, 3 , 2 ) MM
-- , SUBSTR( ssn, 5 , 2 ) DD
-- , SUBSTR( ssn, 14 , 1 ) RRN14
-- , SUBSTR( ssn, 14 ) RRN14
-- , SUBSTR( ssn, -1, 1 ) RRN14
FROM insa;
-- 39. emp 테이블에서 직속상사(mgr)가 없는 사원의 정보를 조회
SELECT empno, ename, mgr
FROM emp
WHERE mgr IS NULL; -- SQL 연산자 사용해야 된다. ***
WHERE mgr = null ;
-- 40. emp테이블에서 각 부서별로 오름차순 1차 정렬하고 급여(PAY)별로 2차 내림차순 정렬해서 조회하는 쿼리 작성
--41. Alias 를 작성하는 3가지 방법을 적으세요.
SELECT deptno, ename
, sal + comm (ㄱ) AS "PAY"
, sal + comm (ㄴ) AS PAY
, sal + comm (ㄷ) PAY
FROM emp;
--42. 오라클의 논리 연산자를 적으세요.
ㄱ. && AND
ㄴ. || OR
ㄷ. ! NOT
-- 43. 어제 배운 오라클의 SQL 연산자를 적으세요.
ㄱ. NOT IN ()
ㄴ. NOT BETWEEN a AND b
ㄷ. IS NULL , IS NOT NULL
ANY, SOME, ALL SQL연산자는 WHERE 조건절의 서브쿼리를 사용할 때 쓰이는 연산자이다.
WITH temp AS
(
서브쿼리
)
INLINE VIEW( 인라인뷰 )
FROM (
서브쿼리
)
WHERE SOME, ANY, ALL + (서브쿼리)
-------------------------------------------------------------------------------------
-- LIKE SQL 연산자 설명 --
4:02 수업시작~
-- Java char '' / String ""
-- Oracle ''
-- 문제) insa 테이블에서 성이 "김"씨 인 사원 정보 조회.
-- Java : name.startsWith("김") / endsWith()
SELECT name
-- , SUBSTR( name , 1, 1 )
, ibsadate
FROM insa
WHERE name LIKE '_김_' ;
WHERE name LIKE '_김%' ;
WHERE name LIKE '%김' ;
WHERE name LIKE '%김%' ; -- 이름 속에 '김' 한 문자를 포함하느냐 ?
WHERE name LIKE '김_' ;
WHERE name LIKE '김%' ;
-- WHERE SUBSTR( name , 1, 1 ) = '김';
LIKE 연산자 기호 : 와일드카드( % _ ) wild card
정규표현식 기호 : * _ {1} 반복횟수 0~ 여러번 반복
[ 설명 추후 ] wildcard를 일반 문자처럼 쓰고 싶은 경우에는 ESCAPE 옵션을 사용
-- REGEXP_LIKE() 함수 : 정규표현식을 사용하는 LIKE() 함수
【형식】
regexp_like ( search_string , pattern [,match_option])
[,match_option]
i 대소문자 구분 없음
c 대소문자 구분 있음
n period(.)를 허용함
m source string이 여러 줄인 경우(multiple lines)
x whitespace character(공백문자) 무시
-- 문제) 김 씨 사원
-- 문제) 김씨 또는 이씨 사원 출력.
-- 1) LIKE
-- 2) REGEXP_LIKE()
SELECT name, ssn
FROM insa
-- 1) LIKE 연산자 사용
-- WHERE name LIKE '김%' OR name LIKE '이%'
-- 2) REGEXP_LIKE() 함수 사용
-- WHERE REGEXP_LIKE( name, '^김' ) OR REGEXP_LIKE( name, '^이' )
-- WHERE REGEXP_LIKE( name, '^[김이]' )
WHERE REGEXP_LIKE( name, '^(김|이)' )
ORDER BY name ASC;
WHERE REGEXP_LIKE( name, '남$' ) ;
WHERE REGEXP_LIKE( name, '^김' ) ;
-- 문제)emp 테이블에서 이름(ename) 속에 'la' 문자열을 포함하는 사원 정보를 출력.
-- 2) REGEXP_LIKE()
SELECT ename
FROM emp
-- 1) LIKE
-- WHERE ename LIKE '%LA%';
-- JAVA 문자열을 대문자로 변환 메서드 : TOUPPERCASE()
-- ORACLE
-- WHERE ename LIKE '%' || UPPER( 'la' ) || '%';
-- 2) REGEXP_LIKE()
WHERE REGEXP_LIKE( ename , 'la' , 'i' ) ; -- i 대소문자 구분 X
WHERE REGEXP_LIKE( ename , UPPER('la') ) ;
WHERE REGEXP_LIKE( ename , 'LA' ) ;
WHERE REGEXP_LIKE( ename , '[a-zA-Z]*LA[a-zA-Z]*' ) ;
WHERE REGEXP_LIKE( ename , 'LA$' ) ;
WHERE REGEXP_LIKE( ename , '^LA' ) ;
-- 문제) insa 테이블에서 성이 김씨, 이씨는 제외한 모든 사원 정보 조회(출력)
-- 1) LIKE 연산자.
-- 2) REGEXP_LIKE() 함수
SELECT name, ssn
FROM insa
-- 1) [NOT] LIKE 연산자 사용
-- WHERE NOT ( name LIKE '김%' OR name LIKE '이%' )
-- WHERE name NOT LIKE '김%' AND name NOT LIKE '이%'
-- 2) [NOT] REGEXP_LIKE() 함수 사용
WHERE REGEXP_LIKE( name , '^[^김이]' )
-- WHERE NOT REGEXP_LIKE( name , '^[김이]' )
--WHERE NOT REGEXP_LIKE( name , '^(김|이)' )
ORDER BY name ASC;
--days04
SQL
DQL [SELECT]
dba_접두사 = 오라클 관리자 데이터베이스 내의 모든 사용지정보 뷰 view
user_ 접두사 = 현재 접속자가 접근할 수 있는 모든 사용자정보를 가져올 수 있는 뷰
all_접두사 =모든 사용자정보를 가져오는 뷰
SYS는 최고 관리자니깐 모든 정보를 다가져옴
포트번호 바꾸기
--with절 사용한 코딩
WITH temp AS(
--서브쿼리
SELECT deptno, ename, sal+NVL(comm,0) pay
FROM emp
WHERE deptno=30
)
SELECT t.*
FROM temp t --테이블의 별칭
WHERE t.pay BETWEEN 1000 AND 2000;
인라인뷰
from절 안에 있는 서브쿼리
SELECT t.*
FROM (
SELECT deptno, ename, sal+NVL(comm,0) pay
FROM emp
WHERE deptno=30
)
WHERE t.pay BETWEEN 1000 AND 2000;
대문자로 바꾸는 함수 UPPER
'Java' 카테고리의 다른 글
오라클 days06 (0) | 2022.04.11 |
---|---|
[오라클 ] days0 (0) | 2022.04.07 |
days02 오라클 (0) | 2022.04.06 |
순서도 그리기 (0) | 2022.04.02 |
28일차 -입출력 IO (0) | 2022.03.29 |
Comments