728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

 

1.sql & sql*plus 시작


SQL(Structued Query Language) : 데이터베이스를 정의, 접근, 제어하는 유일한 언어로 현재 거의 모든 사용 관계형데이터베이스에서 채택된 표준언어이다.
SQL*PLUS : 오라클에서만 사용되는 프로그램으로 sql명령등을 입출력해주는 oracle tool이다.

sql 구문 3가지    
DDL(Date Definition Language) 데이터를 정의하는 명령어군 ex)CREATE,ALTER,DROP,RENAME등
DCL(Data Control Language)  데이터보안,접근제어를 하는 명령어군 ex)REVOKE,GRANT
DML(Data Manipulation Language) 데이터 처리에 사용되는 명령어군 ex)(SELECT),INSERT,DELETE,UPDATE

SQL 명령어와 SQL*PLUS 명령어 비교

SQL SQL*PLUS
데이터에 접근하기 위한 데이터베이스 언어 SQL,PL/SQL을 SERVER에 보낸다. 편집,저장
ANSI(American National Standard Institute) 기반 ORACLE TOOL
데이터베이스안에 있는 데이터를 조작 조작할 수 없다.
SQL BUFFER 에 저장된다.(한문장만 저장됨) SQL BUFFER에 저장되지 않는다.
LINE 연결문자(Contiuation Character)가 없다. LINE 연결문자가 있다. ' - '
축약(Abbreviated)될 수 없다. 축약될 수 있다.
실행을 위해 종결문자(Termination Character) 사용 ' ; ' 종결문자없다.
Formattion 을 위해 함수를 사용 Formatting 을 위해 명령어를 사용

◆ 테이블과 컬럼의 명명법(NAMING RULES)
① 테이블과 컬럼이름등의 길이는  1 ~ 30 까지 사용가능
예) CREATE TABLE A123456789012345678901234567890(ID NUMBER);    결과 : 테이블이름31자 에러
② QUOTATION MARK(')를 사용하면 안된다.
예) CREATE TABLE 'SON'S'(ID NUMBER);
대소문자를 구분하지않는다.(저장되는 데이터들은 대소문자가 구분됨)
④반드시 ALPHABETIC CHARACTER로 시작해야한다.(숫자나 특수문자로 시작될 수 없다.)
⑤ALPHANUMERIC CHARACTER 만을 사용한다.(#, $, _  이 세가지는 사용가능)
⑥오라클에서 사용되는 예약어와 "DUAL" 이라는 단어는 테이블 이름으로 사용될 수 없다.
   DUAL이라는 테이블은 오라클내에 이미 존재한다.( SELECT * FROM DUAL; )
⑦권고사항 : 
이름은 길고 정확한 표현을 사용해라. MAKE NAME LONG AND DESCRITIVE
지속적인 규칙을 가지고 이름을 지어라. CONSISTENT NAMING RULE  EX) SIM_
관련이 있는 것들은 비슷한 이름을 사용하라. USE SAME NAME TO DESCRIBE SAME THING  
EX) DEPT,DEPTNO, EMP,EMPNO
☞ "  " 를 사용하면 소문자로 저장시킬 수 도 있으며,숫자로 시작하는 이름도 만들 수 도 있다. 하지만 사용은 하지말랍니다요
예) CREATE TABLE "123simple"(ID NUMBER);
      SELECT * FROM "123simple";

☞SQL 문과 SQL*PLUS 명령문은 대소문자를 구별하지 않는다. 
  단, 주의할 것은 입력되어 있는 자료(DATA)들은 대소문자를 구별한다는 것이다.

SELECT 문과 기본 연산자들...

SCHEMA USER생성시 같은 이름으로 동시에 생성되며. 해당 OBJECT의 소유자를 뜻한다.
SELECT 보고자하는 데이터를 선택한다.
SELECT [DISTINCT] 컬럼(들,) or *(컬럼전체를 의미) FROM [SCHEMA.]테이블이름 [ WHERE 조건절]
[ORDER BY 컬럼(들) or 표현식 [ASC | DESC] ]
SELECT 절로 COLUMN 제한, WHERE절로 선택되는 ROW제한, ORDER BY절로 ROW 순서제한.
DISTINCT 중복된 값이 제거되고 결과를 보여준다.   SELECT 문 바로 다음에 단한번만 위치하며, SELECT 리스트에 있는 모든 대상에 영향을 준다.
예) SELECT DISTINCT JOB FROM EMP;    SELECT DISTINCT JOB,DEPTNO FROM EMP;
     SELECT JOB, DISTINCT DEPTNO FROM EMP; (X)
1.SELECT DISTINCT JOB FROM EMP;  2번과 선택되는 결과는 같다.
2.SELECT DISTINCT JOB FROM EMP ORDER BY JOB;  ORDER BY 에의한 SORT가 다시 일어난다. 자원 낭비다.
☞ 내부적으로 SORT를 유발하며, 보여지는 ROW는 정렬되어서 나타난다.
ORDER BY 행(ROWS)을 정렬한다.  ASC : 오름차순(Default)  DESC : 내림차순
SELECT 문장의 마지막에 위치하며,  표현식,ALIAS,POSITION을 사용해서 정렬 할 수 있다.
NULL 값은 SORT시 가장 큰값으로 간주된다.(ASC 인경우 가장 나중에 나타난다.)
SELECT ENAME FROM EMP ORDER BY ENAME;
SELECT ENAME FROM EMP ORDER BY HIREDATE ASC;    컬럼 리스트에 없는 컬럼을 정렬에 사용
SELECT JOB FROM EMP ORDER BY ABS(LENGTH(JOB) - 4);    표현식을 정렬에 사용
SELECT ENAME,SAL,JOB FROM EMP ORDER BY 2 DESC;     COLUMN POSITION을 사용함
WHERE~ 선택할 행을 제한한다.   컬럼이름,표현식,상수,연산자,리터럴등으로 구성된다.
예) WHERE EMPNO > 6999 AND SAL >= 1000 - 3      비교연산자 =, >, >=, <=, != (<>와 같은 의미) , <>
COLUMN
LABEL
COLUMN LABEL, DATA 중 문자와 날짜는 왼쪽 정렬, 숫자는 오른쪽 정렬됨
Default 문자는 대문자(UpperCase)이다.
합성 연산자 COLUMN 또는 리터럴(LITERAL)을 다른 COLUMN,산술표현식,상수값에 연결,결합하여 문자 형태로 표현해주는 연산자
예) SELECT 'TO  '|| ENAME FROM EMP;       ( || 이 합성연산자 )
      SELECT ENAME|| '''s SALARY IS '||SAL FROM EMP;
COLUMN ALIAS COLUMN LABEL을 바꾼다.
SELECT 되어 화면에 나타나는 컬럼이름을 임의로 바꾼다. 새로운 의미부여등 쉽게 알아보기 위해 사용.
(공백문자사용) SELECT SAL salary FROM EMP;   컬럼이름다음에 한칸띄고 예명을 사용함 
(AS 사용) SELECT SAL AS salary FROM EMP;   (소문자로 적어도 결국 컬럼에 SALARY로 표시된다.) 
(" " 를 사용) SELECT SAL "#my salary" FROM EMP;   "  " 안에 들어간 문자들은 대소문자가 구별되고 공백이 사용가능하다. 모든 규칙의 예외로 처리된다. (위에 명명법을 보시길...) 
리터럴문자 COLUMN, ALIAS 가 아닌 SELECT 리스트에 포함된 문자(DATE,CHARACTER),표현식,숫자를 말한다.
SELECT 리스트란 SELECT 에서 FROM 전까지를 말한다.
예) SELECT 'test literal', LENGETH('test literal'),TO_DATE('1999/12/01'.'YYYY/MM/DD'),SAL*12,100 FROM EMP;
 날짜와 문자는 ' ' 로 둘러쌓여야한다.
NULL 아무것도 없는, 존재하지 않는, 이용할 수 없는,적용불가한 값.  숫자 0(Zero), 공백문자(Space)가 아니다.
NULL값을 포함하는 산술연산식은 NULL이다.  내부적으로 1Byte를 사용한다.  모든 데이터 TYPE에 사용된다.
NULL을 제어하는 연산자 : IS NULL, IS NOT NULL, DECODE
예)SELECT * FROM EMP WHERE COMM IS NULL;
SELECT * FROM EMP WHERE COMM IS NOT NULL;
SELECT ~ WHERE COMM = NULL;  (X)
SELECT ~ WHERE COMM != NULL; (X)    SELECT ~ WHERE COMM = 0;     (X)
SELECT EMPNO,ENAME,DECODE(COMM,NULL,-999,COMM) FROM EMP;
☞DECODE설명  COMM컬럼이 NULL이면 -999를 표시하고 NULL이 아니면  COMM컬럼의 원래값을 표시한다.
⊙NULL을 제어하는 유일한 함수 NVL( )  
예) SELECT EMPNO,ENAME,NVL(COMM,-999) FROM EMP;  
        => NVL(COMM,-999)의 뜻은   COMM이 NULL 이면 -999를 표시.
여기서 NULL 대신 표시하는 값은 원래 데이터형과 일치해야한다.
BETWEEN BETWEEN from_value AND to_value  범위내의 값을 골라냄
반드시 from_value가 to_value보다 작아야한다.    모든 데이터TYPE 에 사용된다.
예)SELECT * FROM EMP WHERE SAL BETWEEN 1200 AND 1600; 
IN(리스트) 리스트상에 값이 포함되었는지를 CHECK, 리스트상에 값을 정렬할 필요는 없다. 모든 데이터TYPE 에 사용된다.
SELECT EMPNO,ENAME,SAL FROM EMP WHERE JOB IN('CLERK','MANAGER');   대소문자 주의
LIKE 패턴매칭 연산자,    모든 데이터TYPE 에 사용된다.
사용되는 특수 기호 :   %(WILD CARD) 0개 이상의 문자를 의미,  _(POSITION MAKER) 1개의 문자를 의미
예) SELECT * FROM EMP WHERE JOB LIKE 'C%';
☞패턴매칭시 데이터 TYPE변환을 일으킬 수 있다.
예) ~ SAL LIKE '%5%';  일때 SAL이 숫자이고 '%5%'가 문자이기 때문에 SAL이 문자로 변환되서 비교가 된다.
이때 비교될 데이터가 많다면 좋지 않다. 테이블 제작시 유념.
논리연산자 더욱 정교한 WHERE 구문을 만든다.  우선순위  비교연산자 > AND > OR
SELECT * FROM EMP WHERE ENAME LIKE 'A%' OR JOB = 'CLERK' AND SAL < 950; 파란색부분이 먼저 실행됨
728x90

+ Recent posts