Oracle SQL(1)

YangJiWon·2021년 1월 5일
0

DB

목록 보기
1/12

1. 오라클 DBMS 설치 - 11g xe

2. 관리자 sys/oracle 계정 생성

3. sqldeveloper 설치 - sys 계정 접속 추가

4. 계정 생성 SQL

create user scott IDENTIFIED by tiger;
-- scott/tiger 계정의 생성
alter user scott IDENTIFIED by tiger;
-- scott 계정의 사용자 패스워드를 tiger로 설정(변경)
grant connect, resource to scott;
-- 관리자 scott에게 접속, 데이터베이스 사용권한 부여 

5. sys로부터 scott의 테이블 생성

!! 계정이 Lock 걸려 있는 경우

-- 계정이 없는 경우 create, 계정이 있는 경우 alter
-- 계정의 잠금을 해제하고 동시에 비밀번호 변경하는 SQL문
alter user 계정이름 IDENTIFIED BY 계정비밀번호 account unlock;
grant connect, resource to shop;

데이터베이스를 사용하는 이유

  • '서로 다른 시스템'에서 데이터를 공용하여 사용하기 위해서 필요하다.
  • 예전에는 파일로 저장할 수 있는 만큼의 데이터 개수였으나 지금은 데이터의 개수가 많아졌고, 각 시스템에서 파일로 저장하다 보니 데이터의 중복을 처리하기 힘들어졌다.
  • 데이터베이스를 통합하여 관리해 정보를 구조적, 효율적으로 저장할 수 있다.

데이터베이스의 특징

  1. 공유해서 사용되는 공용 데이터
  2. 통합 데이터
  3. 저장된 영속성 데이터
  4. 운영/관리 데이터

DBMS

  • 사람이 모든 데이터를 관리하는 것은 불가능하다.
  • 데이터를 소프트웨어로 관리하려고 만든 것이 데이터베이스 관리 시스템(DBMS)라고 한다.
  • 즉, 여러 응용 프로그램들과 데이터베이스의 중재자로서 응용프로그램들이 데이터베이스를 공유해서 사용할 수 있도록 관리해주는 소프트웨어이다.

인덱스(index)는 테이블에 저장된 데이터의 검색 속도를 향상시키기 위하여 사용된다.
일반적으로 도서에서는 색인표를 사용하여 특정 검색어에 해당하는 페이지를 빠르게 찾을 수 있듯이 DB에는 인덱스를 사용하여 검색 속도를 향상시킨다.

관계형 데이터 베이스 3요소

  1. 데이터 구조 : 2차원 테이블(열(컬럼), 행(레코드))
  2. 연산 : union, minus, join 등
  3. 제약 조건 : primary key, not null 등

DESC, DESCRIBE

DESC 테이블명
DESCRIBE 테이블명

테이블의 컬렴명, 데이터형, 데이터 길이와 NULL 허용 여부 등과 같은 정보를 알려주는 명령어이다.

select

문법

SELECT [DISTINCT] {*, 컬럼명 [Alias], }
FROM 테이블명;

예시

SELECT * FROM emp;
SELECT ename FROM emp;
SELECT empno, ename FROM emp;

SELECT empno, ename
FROM emp
WHERE ROWNUM < 10;

관계형 데이터베이스는 동일한 컬럼으로 다른 테이블과 연결 가능함
SQL문은 대문자, 테이블명과 컬럼명은 소문자 권장

SELECT * FROM TAB;
- 현재 갖고있는 모든 테이블 조회

DESC dept;
- DEPT테이블의 컬럼정보 조회

쉼표로 여러 컬럼 select 하면 쓴 순서대로 나옴

숫자, 날짜형에 사칙연산 쓰면 가상의 컬럼으로 결과 보여짐

  • 연산식이 컬럼명으로 표시됨
  • 원본 데이터가 바뀌거나 연산 결과가 테이블에 추가된건 아님
SELECT  ENAME AS 성명, EMPNO AS 사번, SAL AS 급여 FROM EMP;
	-- select할때 컬럼에 별칭 사용 가능
	-- 원본 컬럼명이 바뀌진 않음
  • alias를 사용해야 하는 경우
  1. 대소문자를 구분하여 출력할 때
  2. 공백문자를 출력할 때
  3. 특수문자를 출력할 때 ($, _, #만 가능)

프로그래밍 언어에서는 나머지 연산자를 %를 사용한다.
하지만 SQL문에서는 MOD()함수를 사용하여 나머지를 구하고 %는 LIKE 연산자에서 사용하는 패턴 매칭 연산자로 사용되기 때문에 나머지 연산자로 사용할 수 없다.

null 값을 가진 컬럼 연산하려면 NVL이나 NVL2 써야함

  • NVL(컬럼, 기본값): 컬럼값이 null이면 기본값으로 표시
  • NVL2(컬럼, A, B): 컬럼값이 null이 아니면 A, null이면 B로 표시
  • 역시나 원본값은 안바뀜

dual 테이블은 연산값을 테스트하고 테이블로 출력해보고 싶을때 씀 (sys에 디폴트로 있는 테이블)
SELECT 10*10 FROM dual;  ->100
SELECT sysdate FROM dual;  ->21/01/05

--별칭에서 AS는 생략 가능함
SELECT ename AS 이름 FROM emp;
SELECT ename 이름 FROM emp; (동일결과)

--별칭에 공백문자 등 특수문자를 사용하려면 쌍따옴표로 묶어줘야 함
SELECT ename AS "사원 이름" FROM emp;

SQL에선 반드시

  • 작은따옴표 사용: 문자, 문자열, 날짜데이터
  • 큰따옴표 사용: only 별칭(alias)
SELECT  empno 번호, ename 이름, sal 월급, sal*12+NVL(comm, 0) 연봉 FROM emp;

|| 이건 여러개의 문자열을 연결해서 하나의 문자열로 생성함

SELECT ename || sal AS "이름+월급" FROM emp; (컬럼+컬럼)
SELECT ename || '사원' "이름 직업" FROM emp; (컬럼+문자열)
SELECT ename || '의 직급은 ' || job || '이다.' AS "사원별 직급" FROM emp;

-- 이건 SQL에서의 주석

DISTINCT

  • DISTINCT 키워드는 중복값 제거
SELECT DISTINCT job FROM emp;

WHERE

  • WHERE 키워드는 검색조건 지정
SELECT empno, ename, job, deptno
FROM emp
WHERE deptno = 30;

SQL에서는 '같다'라는 표현식을 = 하나만 씀 (== 아님)

SELECT empno, ename, sal, sal*12 연봉
FROM emp
WHERE ename = 'BLAKE';

= 연산자로 검색할 때 문자열이 대소문자까지 정확히 일치해야함

SELECT empno, ename, job, deptno
FROM emp
WHERE hiredate = '81/11/17';
profile
데이터데이터데이터!!

0개의 댓글