일단 해보는 코딩/Oracle SQL

[오라클/SQL] SQL규칙과 CMD 실행하기

eun_zoey2 2022. 6. 1. 14:50
728x90

  Oracle에서의 관리자 계정

관리자 계정 설명 비고
SYS 데이터베이스 관리 작업을 수행하는 일반적인 관리자 Windows의 Administrator나 Linuxl root 권한과 유사 
SYSDBA  데이터베이스의 구조, 설계 등을 관리하는 관리자  
SYSTEM 데이터베이스를 위한 순수 데이터베이스 관리자 Oracle에서는 SYSTEM 계정으로 작업하는 것보다 개별 데이터베이스 관리자 계정을 생성해서 데이터 작업을 수행하는 것을 권장


Oracle에서의 일반 사용자

일반 관리자 
Scott, BI(Business Intelligence), HR(Human Resources), OE(Order Entry),
PM(Product Media), IX(Information Exchange), SH(Sales), 


SQL 규칙

1. 키워드와 구문에서 대소문자를 구분하지 않는다. 
	SELECT * FROM Employees;
	select * from Employees;
	SeLeCt * FrOm Employees;
하지만 테이블 명과 필드의 이름은 대소문자를 구분하므로 
주의해서 사용해야 한다.

2. 주석처리
	# 한 줄 주석
	-- 한 줄 주석 (두개 이상의 하이픈(-) 뒤에는 반드시 한 칸의 공백이 존재해야만 주석으로 정상 인식)
	/* 두줄 
	이상의
	주석*/

3. 문장의 끝에는 ; 을 찍는다(C로 생성한 모든 프로그램은 그렇다).

4. 정규표현식에서 *는 any(여러 개)의 의미이고, ?는 한 문자를 의미하지만 
    Oracle에서는 any 대신 %를 사용하고 ? 대신 _를 사용한다.
	ex) H%, _ong, H_n_, ....

5. 년도와 이름은 ' '로 묶어준다.

6. SELECT 문을 사용하여 테이블의 레코드를 선택
	SSELECT 필드이름
	FROM 테이블이름
	[WHERE 조건]

 

SQL* PLUS CMD 관리자 권한으로 실행

 /* SYSDBA 권한으로 접속 */
C:\> SQLPLUS / AS SYSDBA

/* scott유저의 계정을 잠금
계정 잠금을 해제 할 때까지 scott유저로 접속 불가. */
SQL> ALTER USER scott ACCOUNT LOCK;

/* scott유저에 접속 불가 */
SQL> CONN scott/tiger
     ERROR: ORA-28000: 계정이 잠금

 

 

/* SYSDBA 권한으로 접속*/
C:\> SQLPLUS / AS SYSDBA

/* scott유저의 계정 잠금 해제 */
SQL> ALTER USER scott ACCOUNT UNLOCK;

/* SCOTT유저에 다시 접속 가능 */
SQL> CONN scott/tiger

 

 

/*  SYSDBA 권한으로 접속 */ 
C:\> SQLPLUS / AS SYSDBA

/* scott유저의 암호를 만료 */ 
SQL> ALTER USER scott PASSWORD EXPIRE;

/*  scott유저는 더이상 접속 불가 */
SQL> CONN scott/tiger
     scott에 대한 암호를 변경합니다
      새로운 암호: *****
      새로운 암호를 다시입력합니다: *****
      ERROR:
      ORA-00988: 암호가 틀립니다

/* SYS USER가 암호를 재 설정 */
SQL> CONN / AS SYSDBA

/* 암호 생성 */
SQL> ALTER USER scott IDENTIFIED BY tiger;

/* 접속 가능 */
SQL> CONN scott/tiger;

 

 

SQL> shutdown immediate -> 데이터 베이스 정지
SQL> startup -> 다시 데이터베이스가 실행

 

 

/* set sqlprompt "_USER>" */

set sqlprompt "hr>"

set time on ;	
set time off ;

쿼리명령 시간

set timing on ;

SQL 수행속도

SQL 기본 문법

/* SELECT 열_명1, 열_명2, .. FROM 테이블_명 
 WHERE 조건;' 형태로 해주는데 대부분 SELECT ~ FROM ~ */
 
SELECT * from tabs; -> 특정 사용자가 소유한 테이블들을 보고
SELECT * FROM employees; ->  employees 테이블의 데이터들을 보고
DESC employees; -> 항목(컬럼)_명을 확인한 뒤 =>항목_명을 알아야 select ~(항목)~ 에 나열할 수 있다.
SELECT employee_id, last_name FROM employees; -> 특정 employee_id, last_name 열만 쿼리한다.

 

WHERE 조건 사용

Q. last_name이 King 으로 시작되는 사람을 보이시오.
SELECT employee_id, hire_date FROM employees
WHERE last_name = 'King'; -> K를 소문자 k로 해서 'king' 쿼리실행 하면 오류, 
							 저장된 데이터는 대소문자를 구분

Q. 전체 사원 중 급여가 $1,000 이상인 사원의 사원번호, 이름, 월급을 보이시오.
select employee_id, last_name, salary from employees
where salary >= 10000; 전체 사원 중 급여가 $1,000 이상인 사원의 사원번호, 이름, 월급을 보인다.