원문 : http://force44.blog.me/130110300966
모든 저작권은 원문 저자에 있습니다.
SQL 언어의 종류
- 전에
- [OracleXEUniv.exe] 설치시 제공되는 계정 hr안에 있는 ERD 그림 -
1) DQL : 테이블 내의 데이터를 조회할 때 사용하는 SQL언어
- 기본 -
select [컬럼들] from [테이블] where [조건절] |
□ 그 외 필요한 명령어들
ⅰ) distinct : 중복되는 컬럼의 값중에서 하나씩만 추출
ex) select distinct job_id from employees;
ⅱ) order by [컬럼]: 해당하는 컬럼을 기준으로 분류
- asc/desc 생략시 default -> asc
- 오름 차순 ? asc, 내림 차순 ? desc
- 문자는 알파벳 순서로(default)
- 날짜는 가장 ㅃㆍ른 날이 먼저 출력(default)
- null 값은 asc에서 가장 마지막에 출력 desc는 가장 먼저
ex) select * from employees order by salary
-> 월급을 기준으로 낮은놈부터 쭈욱 출력된다.
ⅲ) alias : 별칭 정하기
- select salary as sal from employees
- select salary "sal" from employees
- select salary sal from employees
==> 3가지 모두 같은 의미
Tip) 아무것도 아닌 것 같지만 가독성을 높여준다.
ex) 최저가 경매 중에 중복되지 않은 최저가를 뽑기위한 SQL문이다. SQL문을 잘 활용하지 못했을때는 Java를 이용해 처리 했는데;; SQL문만 잘써도 파워풀 해진다.
select min(bid_price) from(
select count(*) as one, bid_price from(select rownum, bid_price from
(select bid_price from auctions where goods_id = #goods_id#)order by bid_price) group by bid_price order by one)where one = 1
ⅳ) 연산자
산술 연산자 : ‘+’/‘-’/‘*’/‘/’
ex)select 10*(salary + 100)/5 as bonus from employees
비교 연산자 : ‘=’/‘!=’/‘<>’/‘<’/‘>’/‘<=’/‘>=’
- != , <> 같은 의미 인듯?
- 날짜를 비교 연산 할때는 ‘ ’로 정의해서 한다.
- 비교되는 문자의 대소문자 구별
ex) select * from employees where hire_date < '89/09/21’
논리 연산자 : and/or/not
- !=, not, <> 같은 의미 인듯?
ex)(생략..) where job_id = 'AD_VP' and employee_id = 101
ex)(생략..) where not job_id = 'AD_VP'
SQL 연산자 : in/like/between A and B/is null/is nan(10g)
in : 여러 개의 조건 값 중 하나만 만족하면 참
- 여러개의 and를 편하게 쓰기 위함
like : 조건 값을 명확히 알지 못하는 경우
ex) select * from employees where job_id like 'AD%'
=> AD로 시작하는 모든 녀석들을 검색한다.
ex) select * from employees where job_id like '%AD’
=> AD로 끝나는 모든 녀석들을 검색한다.
ex) select * from employees where job_id like '_AD%’
=> AD로 끝나고 앞에 한 글자만 있는 녀석을 검색한다.
Between A and B : 범위를 가진 조건 값으로 검색해야 하는 경우
Is null : Null 값을 가진 컬럼을 검색하는 경우
Is nan : nan(Not a Number)값을 가진 컬럼을 검색하는 경우
union 집합 연산자 : 첫 번째 질의와 두 번째 질의의 중복된 정보를 한 번만 보여 준다.
- 열의 개수와 타입이 동일해야 한다.
ex)
select * from employees where hire_date < '89/09/21'
union
select *from employees where department_id = 100
minus 집합 연산자 : 두 번째 질의에는 없고 첫번째 질의에만 있는 데이터를 보여준다.
select * from employees where hire_date < '89/09/21'
minus
select *from employees where department_id = 100
intersect 집합 연산자 : 두 번째 질의와 첫번째 질의에 중복된 데이터를 보여준다.
select * from employees where hire_date < '89/09/21'
intersect
select *from employees where department_id = 100
--- 각 문제당 1분이면 풀수 있는 문제들 ---
1. 사원의 이름과 급여, 입사일만 출력하는 SQL문을 작성해보자.
2. 사원들이 어떤 부서에 소속되어 있는지 소속 부서번호를 출력하되 중복되지 않고 한번씩 출력되는 쿼리문을 작성하라.
3. 테이블 employees 중에서 부서번호가 10번인 사원에 관한 모든 정보를만 출력하라.
4. 테이블 employees 중에서 급여가 2000미만이 되는 사원브이 정보를 중에서 사번과 이름, 급여를 출력하라.
5.이름이 'Austin' 사람의 사번과 이름 직급을 출력하라.
6. 커미션이 15,25,35 인 사원의 사번,이름,커미션을 출력하라.
7. 급여가 5000과 10000 사이인 사원의 사번,이름,급여를 추력하라.
8. 이름에 A를 포함하지 않은 사원의 사번,이름을 출력하라.
9. 자신의 직속상관이 없는 사원의 이름과 직급과 직속상관의 사번을 출력하라.
10. 입사일이 가장 최근인 사원 순으로 사번,이름,입사일을 출력하라.
--------------------------------------------
2) DML : 테이블 내의 데이터를 입력, 수정, 삭제 할때 사용하는 SQL 언어
ⅰ) 입력
Insert into [테이블] Values [컬럼값들] |
ex) insert into employees values (100, khc,...)
ⅱ) 수정
UPDATE [테이블] SET 컬럼명=값, 컬럼명=값 where 조건식 |
ex) update employees set employee_id = 21 where employee_id = 23
- 조건이 없다면 테이블 모든 데이터 변경
ⅱ) 삭제
delete from [테이블] where 조건식 |
ex) delete from dept01 where dname='인사부‘;
- 조건이 없다면 테이블 모든 데이터 삭제
3) DDL : 테이블을 생성하고 변경, 삭제할 때 사용하는 SQL
ⅰ) 생성
create table abc
(
컬럼 데이터타입, ...,
abc varchar2(30) not null,
제약 조건
constraint abc_pk primary key(abc) ,
//두개이상
constraint pks primary key(abc,def)
);
ⅱ) 수정
- 기존 컬럼 데이터 타입 변경 // 제약조건도 변경할 수 있다.
alter table abc modify(abc varchar2(60) primary key);
- 테이블에 컬럼 추가 // 제약조건도 추가할 수 있다.
alter table abc add(def varchar2(10) primary key);
- 테이블 이름 변경
alter table abc rename ccc;
- 컬럼명 변경
alter table abc rename column aaa to bbb;
ⅱ) 삭제
- 테이블 삭제
drop table [테이블명];
tip) 테이블 삭제 후 쓰레기 값이 남는다 쓰레기값 청소
(purge recyclebin)
- 테이블에 컬럼 삭제
alter table abc drop column def;
- 제약조건 삭제
alter table abc drop constraint [제약조건이름];
alter table abc drop primary key ; - 모든 pk 제거
4) TCL : 테이블 내에 입력, 수정, 삭제된 데이터를 저장 또는 취소하는 SQL 언어
5) DCL : 데이터베이스 내의 사용자가 테이블을 생성하고 변경시키게 하는 일을 할수 있게 하는 SQL 언어
'프로그래밍 > SQL' 카테고리의 다른 글
SQLite 속도 비교 (PostgreSQL, MySQL, SQLite, SQLite<nosync>) (0) | 2011.11.10 |
---|---|
데이터베이스 명명법 (0) | 2011.10.31 |
trigger를 이용해 sqlite에서 foreign key를 사용하자! (1) | 2011.08.16 |
[SQL] 제약조건, Constraint(NOT NULL, UNIQUE, PRIMARY KEY(기본키), FOREIGN KEY(외래키)) (0) | 2011.08.16 |
[MySQL] 한글 깨짐 현상과 한글 마이그레이션 노하우 (0) | 2011.04.08 |