MSSQL은 기본적으로 SELECT 시에 공유잠금이 걸린다.

즉, SELECT 문이 수행되는 테이블에 대해서 INSERT,UPDATE,DELETE 문이 수행되고 있다면

SELECT 문은 선행작업이 모두 끝날 때까지 LOCK이 걸린다. 

이때 SELECT문에 WITH(NOLOCK)을 추가하면 선행작업의 결과와 관계없이 바로 

SELECT문이 수행되어서 결과를 반환하게 된다.

SELECT * FROM TABLE WITH(NOLOCK)

 

* 프로시저 내에서 사용되는 SELECT문에서 WITH(NOLOCK)을 사용하기 위해서는 각 문장마다 삽입할 필요없이 

프로시저 시작부분에 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMTTED

'[DB] > [MSSQL]' 카테고리의 다른 글

# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26
테이블 복사 및 데이터 복사  (0) 2020.03.26

 

'[DB] > [오라클]' 카테고리의 다른 글

GREATEST, LEAST  (0) 2023.06.22
스칼라서브쿼리, 인라인뷰,서브쿼리  (0) 2019.11.06
PIVOT 을 이용하여 달력 만들기  (0) 2019.11.01
Oracle PIVOT  (0) 2019.10.28
PL/SQL : CURSOR(커서)  (0) 2019.08.26

 

'[DB] > [오라클]' 카테고리의 다른 글

스칼라서브쿼리, 인라인뷰,서브쿼리  (0) 2019.11.06
WITH 구문  (0) 2019.11.04
Oracle PIVOT  (0) 2019.10.28
PL/SQL : CURSOR(커서)  (0) 2019.08.26
Orange,Oracle Client 설치 및 사용법  (0) 2019.07.11

Orange for ORACLE : DB관리 및 개발할수 있는 틀

Oracle Client : 로컬 DB혹은 remoteDB랑 연결할수 있게 해주는 툴

 

1.Oracle Client설치

 º 관리자 모드로 설치해야함 

2. Oracle Client에 DB정보 연결

 º Client-network-admin에 tnsnames.ora에 DB정보입력

3. Orange 설치

4. Orange에 Oracle DB 연결

 º Orange Logon : TNS Name에서 연결할 DB이름 선택(tnsnames.ora에 잘 넣어놨으면 될 것) , Username, Password 입력하고 Connect 버튼 클릭

 

5. DB 정보 조회

 º  View – Schema Browser – Table에서 각 테이블의 column, PK 등 여러 정보 조회가능

 

'[DB] > [오라클]' 카테고리의 다른 글

Oracle PIVOT  (0) 2019.10.28
PL/SQL : CURSOR(커서)  (0) 2019.08.26
Oracle : Scott 계정 생성하기  (0) 2019.06.04
12. 시퀀스와 인덱스  (0) 2019.05.18
10. 서브쿼리  (0) 2019.05.18

 

Cmd창을 키신후  SYS로 들어갑니다.

위의 마지막줄 처럼 Oracle db에 연결되었다고 나옵니다. 이제 Scott을 만들어 볼까요?

 

C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\scott.sql

을 입력해주세요 

그다음에  사용자 변경을 해주세요

연결하기  위해 conn scott/tiger을 해주세요

show user는 지금 사용하는  user을 보는 것 입니다.

테이블이 뭐가 있나 궁금하신 분들은 select * from tab;을 하시면 됩니다. 

 

'[DB] > [오라클]' 카테고리의 다른 글

PL/SQL : CURSOR(커서)  (0) 2019.08.26
Orange,Oracle Client 설치 및 사용법  (0) 2019.07.11
12. 시퀀스와 인덱스  (0) 2019.05.18
10. 서브쿼리  (0) 2019.05.18
09. 조인  (0) 2019.05.18

▶ 시퀀스는 테이블 내 유일한 숫자를 자동으로 생성하는 자동 번호 발생기

º  시퀀스 생성

CREATED SEQUENCE [스키마명.]시퀀스명

INCREMENT BY 증감숫자

START WITH 시작숫자

NOMINVALUE | MINVALUE 최소값

NOMAXVALUE | MAXVALUE 최대값

NOCYCLE | CYCLE     

NOCARE | CACHE; //CACHE : 메모리에 시퀀스 값을 미리 할당해 놓음

 

EX)

CREATE SEQUENCE MY_SEQ1
INCREMENT BY 1
START WITH 1
MAXVALUE 1000
NOCYCLE
NOCACHE;

-- 이 시퀀스는 1부터 시작해서 1씩 증가하여 최솟값부터 최대값까지 1000까지 순번을 자동 생성한다.

INSERT INTO EX2_8 (COL1) VALUES (MY_SEQ1.NEXTVAL);

NEXTVAL : 해당 시퀀스에서 다음 순번 값을 자동으로 가져온다.

//INSERT문이 아닌 SELECT문에서 사용하더도 값이 증가된다. // SELECT MY_SEQ1.NEXTVAL FROM DUAL;

CURRVAL : 현재의 값을 알수 있다.

SELECT MY_SEQ1.CURRVAL FROM DUAL;

 

데이터를 집어 넣은후 확인을 해 보면

 

▶CURRVAL는 'CURRENT VALUE'의 약어로 현재의 값 반환

▶NEXTVAL 'NEXT VALUE'의 약어로서 다음 값이란 의미

▶데이터 딕셔너리 USER_SEQUENCES는 시퀀스 객체의 정보를 보여줌

 

'[DB] > [오라클]' 카테고리의 다른 글

Orange,Oracle Client 설치 및 사용법  (0) 2019.07.11
Oracle : Scott 계정 생성하기  (0) 2019.06.04
10. 서브쿼리  (0) 2019.05.18
09. 조인  (0) 2019.05.18
07. 테이블의 내용을 추가,수정, 삭제하는 DML과 트랜잭션  (0) 2019.05.18

▶ 모든 서브 쿼리는 괄호를 싸여 있으며 메인 쿼리 안에 SELECT문이 들어가는 것을 서브 쿼리

▶ 서브쿼리의 결과 값이 하나일 경우에는 =,!=,<,<=,>,>= 연산자를 사용해야 합니다.

▶ 서브쿼리의 결과 값이 여러개일 경우에는 IN,SOME,ALL,ANY 연산자를 사용해야 합니다.

▶ 연산자 IN은 서브쿼리에서 돌려주는 리턴 값과 동등하게 비교합니다.

▶ ANY는 같은 의미이며, 서브 쿼리에서 돌려주는 값이 하나라도 비교 조건을 만족하면 참이 됩니다.

▶ALL은 서브쿼리에서 돌려주는 모든 값이 비교조건을 만족할때, 참이 됩니다.

▶메인 쿼리의 SELECT문에서 SELECT_LIST에 해당하는 값으로 서브 쿼리를 사용할수 있는데,

  이때 반드시 단일 값만을 리턴해야함

▶ 메인 쿼리와의 연관성에 따라 

- 연관성 없는 서브쿼리

-연관성 있는 서브 쿼리

 

 

▶ 연관성이 없는 서브쿼리 : 메인테이블과 조인조건이 걸리지 않는 서브쿼리

 

SELECT COUNT(*) FROM EMPLOYEES 
WHERE SALARY >= (SELECT AVG(SALARY) FROM EMPLOYEES );

// 전사원의 평균급여 이상을 받는 사원의 수를 조회하는 쿼리

SELECT EMPLOYEE_ID,FIRST_NAME,JOB_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID,JOB_ID) 

IN (SELECT EMPLOYEE_ID,JOB_ID FROM JOB_HISTORY);

 

//JOB_HISTORY 테이블에 있는 EMPLOYEE_ID,JOB_ID 두 값을 같은 건을 사원테이블에서 찾는 쿼리로 서브쿼리는 메인 쿼리와 연관성이 없다. 

//동시에 2개이상의 컬럼 값이 같은 건을 찾고있다. 

//서브 쿼리는 SELECT문 뿐만 아니라 다음과 같이 UPDATE문,DELETE문에서도 사용할수 있다.

▶ 연관성 있는 서브쿼리

메인테이블과 조인조건이 걸리 서브쿼리

EXISTS 연산자를 사용해서 서브쿼리내에 조인 조건이 포함되었다.

 

SELECT A.DEPARTMENT_ID,A.DEPARTMENT_NAME FROM DEPARTMENTS A WHERE EXISTS 

(SELECT 1 FROM JOB_HISTORY B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID );

서브쿼리 안에서 메인쿼리에서 사용된 부서 테이블의 부서번호와 JOB_HISTORY테이블의 부서번호가 같은 건을 조회하고있다.

 

 

 

 

▶ 형태에 따라

-일반 서브쿼리(Select 절)

-인라인 뷰 (from절)

-중첩쿼리 (where절)

+ Recent posts