BETWEEN 'ㄱ' and 'ㄴ'
BETWEEN 'ㄴ' and 'ㄷ'
BETWEEN 'ㄷ' and 'ㄹ'
BETWEEN 'ㄹ' and 'ㅁ'
BETWEEN 'ㅁ' and 'ㅂ'
BETWEEN 'ㅂ' and 'ㅅ'
BETWEEN 'ㅅ' and 'ㅇ'
BETWEEN 'ㅇ' and 'ㅈ'
BETWEEN 'ㅈ' and 'ㅊ'
BETWEEN 'ㅊ' and 'ㅋ'
BETWEEN 'ㅋ' and 'ㅌ'
BETWEEN 'ㅌ' and 'ㅍ'
BETWEEN 'ㅍ' and 'ㅎ'
BETWEEN 'ㅎ' and '힣'
현재 데이터베이스에서 현재 사용자가 액세스할 수 있는 각 저장 프로시저와 함수에 대해 한 행을 반환합니다. 반환 값을 설명하는 열은 함수에만 적용됩니다. 저장 프로시저의 경우 이러한 열은 NULL이 됩니다.
이러한 뷰에서 정보를 검색하려면 INFORMATION_SCHEMA.view_name 형식으로 정규화된 이름을 지정합니다.
ROUTINE_DEFINITION 열은 함수 또는 저장 프로시저를 만든 원본 문을 포함합니다. 이러한 원본 문은 중간 캐리지 리턴을 포함하는 경우가 많습니다. 결과를 텍스트 형식으로 표시하는 응용 프로그램에 이 열을 반환하는 경우에는 ROUTINE_DEFINITION 결과의 중간 캐리지 리턴이 전체 결과 집합의 형식에 영향을 줄 수 있습니다. ROUTINE_DEFINITION 열을 선택하는 경우에는 반드시 중간 캐리지 리턴에 맞게 조정해야 합니다. 예를 들어 결과 집합을 표 형태로 반환하거나 ROUTINE_DEFINITION을 자체 입력란 형식으로 반환해야 합니다.
select specific_catalog, specific_schema, specific_name, convert(varchar(10),created, 112)
from INFORMATION_SCHEMA.routines
-- group by convert(varchar(10),created, 112)
## 트랜잭션: 하나 이상의 작업이 모여 이루어진 하나의 논리적인 작업 단위로서 한번에 수행되어지는 작업.
+ 트랜잭션의 조건
원자성 - 트랜잭션은 더 이상 나눌 수 없는 단위로 구성되어야 한다.
일관성 - 트랜잭션이 수행된 후 모든 데이터는 무결성을 유지해야 한다.
격리성 - 현재 변경 작업이 진행중인 트랜잭션의 대상 데이터는 잠금 상태(LOCK)가 되어 다른 트랜잭션에 의해 접근이 허용되어서는 안된다.
@ 자동커밋 트랜잭션 - SQL-SERVER는 기본 트랜잭션 모드가 자동 커밋으로 동작한다.
@ 명시적 트랜잭션 - 트랜잭션의 시작과 끝을 모두 명시하는 방법으로 BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN 문 등을 이용한다.
명시적 트랜잭션은 ROLLBAKC 이나 COMMIT 으로 끝나지 않으면 트랜잭션이 계속 잠금상태로 남아 있으므로 주의해야 한다.
BEGIN TRAN - 명시적 트랜잭션의 시작 위치
COMMIT TRAN - 데이터 변경작업의 결과를 실제 데이터베이스에 적용하도록 하는 구문. COMMIT 된 후의 데이터베이스는 변경전으로 되돌릴 수 없다.
ROLLBACK TRAN - 데이터 변경작업 취소하고, 데이터베이스의 내용은 트랜잭션 작업 이전의 상태로 되돌린다. 여기서 전체 트랜잭션의 내용을 취소하지 않기 위해 특정 지점에 저장점(SAVE POINT)을 지정하면 저장점이 있는 부분까지만 트랜잭션을 취소할 수 있다.
SAVE TRAN - 저장점을 지정하기 위한 구문으로 지정된 저장점까지 ROLLBACK으로 트랜잭션을 취소할 수 있다.
어떤 테이블의 데이터가 변경될때 자동으로 지정된 어플리케이션이 동작한다던지 다른 테이블의 데이터를 변경하도록 설계된 저장프로시저의 특별한 형태.
저장프로시저와 달리 직접 호출되어 동작하지 않고 자동으로 호출되어 실행되며 매개변수도 사용할 수 없다.
생성 : CREATE TRIGGER
삭제 : ALTER TRIGGER
수정 : DROP TRIGGER
CREATE TRIGGER 트리거이름
ON 테이블[뷰]
FOR { INSERT | DELETE | UPDATE }
AS
[BEGIN]
SQL문
[END]
create
alter trigger trg_tbl_member
on tbl_member
for update
as
declare @nickname varchar(32),@userid varchar(32)
begin
select @nickname = nickname, @userid= userid from tbl_member d where userid = d.userid
update tbl_blog set userNick = @nickname where userid = @userid
select @nickname, @userid
end
- SQL문의 기능을 더욱 보강하여 데이터베이스 사용을 효과적으로 할 수 있도록 하는 것이 저장프로시저.
생성 : CREATE PROCEDURE
수정 : ALTER PROCEDURE
삭제 : DROP PROCEDURE
변수선언 : DECLARE @mem_id varchar(32)
SET @mem_id = '홍길동'
- 조건 처리
IF ~ELSE 문 : 각종 변수위 정위와 조건처리를 지원
WHILE 문 : 반복처리
BREAK,CONTINUE 문 : LOOP 문에서 벗어나기.
OUTPUT : 결과값을 응용프로그램에 반환해야 할때, 매개변수 선언시 사용.
- 시스템 저장프로시저
sp_helpdb : 모든 데이터베이스의 정보를 제공.
sp_help : 특정 데이터베이스의 모든 객체, 또는 지정한 하나의 객체에 대한 자세한 정보를 제공.
sp_helptext : 지정한 저장프로시저의 소스를 보여준다.
sp_helplogins : 현재 접속중인 사용자에 대한 정보 제공.
sp_fkeys : 지정된 테이블의 외래키를 보여준다.
sp_pkeys : 기본키 정보를 보여준다.
1. select * from 상품 where ( 색상코드 = ( select 색상코드 from 색상분류 where 색상 = '그린' ) )
2. select * from 소분류코드 where ( 업체코드 IN ( select 업체코드 from 납품업체 where 업체명 IN ('우주','세현','동방') ) )
3. select 상품코드, 사이즈, 재고수량 from 상품 where ( 소코드 = ( select 소코드 from 소분류코드 where 소분류명 = '가죽쟈켓' ) ) and ( 색상코드 = ( select 색상코드 from 색상분류 where 색상 = '블랙' ) )
4. select 상품코드, 사이즈, 재고수량 from 상품 where 재고수량 < ( select AVG(재고수량) from 상품 )
5. select 소코드, AVG(재고수량) AS 소코드별평균 from 상품 group by 소코드 having ( AVG(재고수량) < ( select AVG(재고수량) from 상품 where 소코드 = 'S7' ) )
Transact-SQL은 DDL, DML, DCL 3가지 종류의 SQL로 구성되어 있으며, MS utility인 isql이나 ISQL/w을 이용하여 수행시킬 수 있다.
Transact-SQL은 IF-THEN-ELSE같은 control-of-flow를 지원한다.
SQL을 잘 구사하려면 물론 SQL Server 구조와 동작에 대한 기본 지식이 필요하다. SQL의 특징을 잘 알고 사용을 하여야 효과적인 data access가 가능하여 지는 것이다.
SQL은 기본적으로 set-oriented processing을 기반으로 하는 언어이다. Set-oriented란 필요한 범위의 데이타를 한꺼번에 처리하는 방식이다. 이것은 파일 처리에서 하나의 레코드씩 순차적으로 처리하였던 방식과 비교가 된다. 그러나 대부분의 프로그래머가 파일 프로세싱 사고방식에 젖어서 SQL을 파일 처리 방식인 순차적 방식으로 코딩하는 사례가 대단히 많다. 결과적으로 액세스 성능이 저하되게 되지만 이것을 하드웨어 용량을 증설하여 해결하는 소위 무식한 처리를 하는 경우가 다반사임은 안타까운 일이다. RDBMS와 SQL을 사용하는 프로그래머는 RDBMS와 SQL의 특성을 파악하고 그에 맞는 사고의 전환으로 비싸게 구입한 내것을 알뜰하게 사용하고 자신의 기술을 축적하는 마음의 자세를 가지는것이 중요할 것이다.
Control-of-Flow는 SQL의 원래 취지와는 부합하지 않는다. SQL은 비절차적인 언어로써 원하는 것을 요청하면 그 방법은 RDBMS가 결정하여 처리하여주는 방식이다. 그러나 다양한 혀현실세계는 절차적인 수행을 반드시 필요로 하는 부분이 있고, 이를 지원하기 위하여 부가된것이 Control-of-Flow 지원 keyword들이다.
따라서 이 절차적인 언어는 불가피한 경우가 아니면 사용하지 않는것이 RDBMS를 사용하는데 있어서 효과적인 방향이라는것을 명심하여야 한다.