이 글은 지극히 개인적인 용도이다.
쿼리는 보기 시작한지도 얼마 안되었고 DB도 여러가지 볼때마다 헷갈리고 써도 쓸때만 찾았다가 또 잊어먹고 하다보니 좀 헛된 검색과 낭비를 좀 막아보고자 모은다.... 아직 초기라 틀린 부분도 많고 좀 목적이 계속된 정리작업이 필요할 것을 염두에 두고 있는 포스팅이기 때문에 다른 사람들이 참고하기엔 무리가 있다고 본다.
(틀린 점도 꽤 있을것도 같기 때문에..)
원래는 SLQ 표준안인 ANSI 쿼리문을 기준으로 모아보려고 했는데 막상 하려니까 ANSI쿼리 정보를 많이 구할수 없어서 일단 작성하고 더 정리해 나가기로 했다.
오라클 / MS SQL
DESC 테이블명; 테의블 정의 보기
SELECT
SELECT * FROM 테이블명 WHERE 필드='조건' AND 필드2='조건2'
SELECT 필드1, 필드2, 필드3 FROM 테이블명
SELECT * FROM TAB; 존재하는 모든 테이블 보기
SELECT DISTINCT 필드1 FROM 테이블명; 중복제거하기
SELECT 필드1 FROM 테이블 WHERE 필드2 BETWEEN 00 AND 00; //00부터 00사이에서
SELECT 필드1 FROM 테이블 WHERE 필드2 IN (00, 00); //00과 00중에서
SELECT 필드1 FROM 테이블 WHERE 필드2 LIKE '%단어%';
SELECT 필드1 FROM 테이블 WHERE 필드2 IS NULL; or NoT IS NULL
UPDATE
UPDATE 테이블명 SET 필드='값', 필드2='값', 필드3='값' WHERE 필드 LIKE '조건'
INSERT
INSERT INTO 테이블명(필드1, 필드2) VALUES ('값', '값' );
비교연산자 : >, >=, <, <=, =, <>(not equal)
DROP TABLE 테이블명;
CREATE TABLE 테이블명 (
필드명 타입 조건,
id varchar2(15) primary key,
pass varchar(15) not null,
no number(5)
)
시퀀스 생성 : CREATE SEQUENCE 시퀀스이름
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
외래키 생성 : ALTER TABLE 테이블명 ADD ( FOREIGN KEY (필드) REFERENCES 테이블명2);
칼럼 수정 : ALTER TABLE 테이블명 MODIFY (필드 타입);
컬럼 추가 : ALTER TABLE 테이블명 ADD ( 필드이름 필드타입 );
칼럼 리네임 : ALTER TABLE 테이블명 RENAME COLUMN 컬럼이름 TO 새이름;
Null값 처리하기 : SELECT isNULL(필드, '0') FROM 테이블
방금 인서트한 자동증가값 ID 가져오기 : SELECT @@IDENTITY (현재 세션에서만 사용가능)
현재 테이블의 가장큰 큰큰값 가져오기 : SELECT IDENT_CURRENT('테이블명')
수행된 SQL문에 의해 영향받은 행의 수 : SELECT @@ROWCOUNT
날짜 계산하기 : SELECT * FROM 테이블명 WHERE DATEADD(DAY, CONVERT(INT, 컬럼명), 날짜컬럼) > getdate()
테이블 정보보기 : EXEC sp_help 테이블
컬럼 정보보기 : EXEC sp_columns 테이블
앨리어스 사용 : SELECT 필드 AS A FROM 테이블 (별칭에 특수문자 있으면 [] 사용]
주석 : -- or /* */
변수의 선언 : DECLARE @변수명 자료형, @변수명 자료형
변수 할당 : SET @변수명 = 값
변수값 가져오기 : SELECT @변수명
일부분만 가져오기 : SELETC TOP 5 컬럼 FROM 테이블
범위정하기 SELECT 컬럼 FROM 테이블 WHERE 컬럼 BETWEEN 10 AND 20
SELECT 컬럼 FROM 테이블 WHERE 컬럼 IN ('aaa', 'bbb', 'ccc')
패턴매칭 : SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '%제목%"
_ : 어떤것이든 한 문자
% : 없거나 아무 글자오거나
[] : []안에 있는 글자들 - [b-f]
[^] : ^다름에 있는 글자를 제외한 다른 것
중복제거 : SELECT DISTINCT 컬럼 FROM 테이블
GROUP BY : SELECT 컬럼1, sum(컬럼2) FROM 테이블 WHERE 조건 GROUP BY 컬럼1 HAVING sum(컬럼2) >= 30
(계산함수가 반드시 있어야 한다, GROUP BY ALL을 사용하면 WHERE제외된것 도 포함)
이너조인 : SELECT 컬럼 FROM 테이블 INNER JOIN 테이블 ON 컬럼=컬럼
아웃터조인 : SELECT 컬럼 FROM 테이블 LEFT OUTER JOIN 테이블 ON 컬럼=컬럼
(어느한쪽의 데이터를 모두 가져온다.)
IN : SELECT 컬럼 FROM 테이블 WHERE 컬럼2 IN ( SELECT 컬럼2 FROM 테이블 )
(IN안의 하위질의는 DISTINCT가 붙은 것으로 동작)
EXISTS : SELECT 컬럼1 FROM 테이블 WHERE EXISTS ( SELECT * FROM 테이블 WHERE 조건 )
(EXISTS는 하위쿼리가 어떤 결과라도 돌려지면 참)
임시테이블 만들기 : SELECT INTO SELECT * INTO 새테이블명 FROM 테이블 (다른세션에서도 가능, DROP해야 삭제됨)
SELECT INTO SELECT * INTO #새테이블명 FROM 테이블 (해당세션에서만 가능, 세션끊어지면 삭제됨)
SELECT INTO SELECT * INTO ##새테이블명 FROM 테이블 (다른세션에서도 가능, 세션끊어지면 삭제됨)
UNION : SELECT 컬럼1, 컬럼2 FROM 테이블
UNION
SELECT 컬럼1, 컬럼2 FROM 테이블
(UNION은 컬럼의 자료형과 순서가 맞아야 한다. 중복데이터는 제거되며 UNION ALL을 하면 중복데이터도 가져온다.)
컬럼 추가 : ALTER TABLE 테이블명 ADD 새컬럼 VARCHAR(10) NULL
컬럼 변경 : ALTER TABLE 테이블명 ALTER COLUMN 컬럼 VARCHAR(10) NULL
컬럼 삭제 : ALTER TABLE 테이블병 DROP COLUMN 컬럼
삭제 : DELETE FROM 테이블명 WHERE 조건
업데이트 : UPDATE 테이블 SET 컬럼 = 값 WHRER 조건
트랜잭션 : BEGIN TRAN
ROLLBACK
COMMIT
덧) SELECT에 왠만하면 * 는 사용하지 않는다.
덧) WHERE절에서 연산자의 왼쪽은 가동하지 않는다. 컬럼을 가공하면 색인을 사용할 수 없다.
WHERE 컬럼 * 3 < 10 말고 WHERE 컬럼 < 10 / 3 을 사용하자
깔끔하게 정리해 주셧네요 감사합니다!!
제가 쿼리를 잘 못해서 오래전에 적어놓은대로 방치해 놓은건데.. 도움되셨다니 다행입니다.(이글도 한번 정리해야 하는데요 ㅎㅎ)
지금 오라클을 공부중인데요, 내용이 좋네요. 따로 정리하고 싶어서요, 퍼가도 되나요?
출처 남기겠습니다.
초반에 정리하려다가 만거라서 좋은 내용이긴 한데 출처남기시고 퍼가셔도 좋습니다.
출처 남기고 퍼가겠습니다.^^
예 CCL 만 지켜주세요.
SQL 은 지금도 참 어렵네용.. 단순 쿼리는 뻔하지만.. 여러 조건들이 들어가면.. 거 참..