예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.
| 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; 파란색부분이 먼저 실행됨 |
'database > oracle' 카테고리의 다른 글
| 오라클 날짜 관련 함수 (2006.09.05) (0) | 2025.05.10 |
|---|---|
| sum () over () (2006.07.13) (0) | 2025.05.10 |
| sql관련 함수정리 (2006.03.15) (0) | 2025.05.10 |
| 쿼리문 간단 정리 (2006.03.15 ) (0) | 2025.05.10 |
| 오라클 강좌 퍼오기 !! (2005.05.27) (0) | 2025.05.10 |