< SQL 요약 정리 >

//======================================================================

* SELECT 칼럼들,... FROM 테이블
    WHERE 칼럼='문자값', 칼럼<=수,  칼럼 LIKE='%문자%' ,... (AND|OR)
    ORDER BY 칼럼 ASC(작은수,오름)|DESC(큰수,내림)
    LIMIT 0,100 (첫번째 부터~100번째 까지)

* INSERT INTO 테이블 VALUES ( 칼럼들,...)
  INSERT INTO 테이블(칼럼들,...) VALUES ( 값들,...)

* UPDATE 테이블 SET 칼럼=값,...
    WHERE 칼럼=값,...

* DELETE FROM 테이블
    WHERE 칼럼=값,...

//======================================================================



http://www.databasedesign.co.uk/sqlselectshortsummary.htm



SQL SELECT statement - short summary


Function

Example

select

from

select * from customer

select c_no, sname from customer

distinct

select distinct c_no from invoice

order by

select * from customer order by sname

select * from customer order by city, balance desc

where

select * from customer where city = ‘London’ and balance <= cred_lim

between

select * from invoice where inv_date between #10-dec-99# and #14-1-00#

like

select * from customer where sname like ‘Dz*’

in

select * from customer where city in (‘London’, ‘Leeds’)

avg,count,max,

min,sum,var,

stddev

select sum(balance) from customer

select count(*) from customer

select sum(balance) as TotalBalance from customer

select sum(balance), max(cred_lim) from customer

group by

select city, sum(balance) from customer group by city

select city, max(balance) as [Highest balance for this city] from customer group by city

having

select city, sum(balance) group by city having sum(balance) > 500

top

select top 2 * from customer order by balance desc

select top 1 city, sum(balance) from customer group by city order by sum(balance) desc

select top 20 percent * from customer order by balance desc

inner join

select a.c_no, sname, inv_no, amount from customer as a inner join invoice as b on a.c_no = b.c_no where city = ‘London’ and balance > 100

left join

select a.c_no, sname, inv_no, amount from customer as a left join invoice as b on a.c_no = b.c_no where city = ‘London’ and balance > 100

subquery

select * from customer where city = (select city from customer where sname = ‘Sallaway’)

select * from customer where c_no not in (select c_no from invoice)

any, all

select * from employee where salary < any (select salary from employee)

select * from employee where salary >= all (select salary from employee)

exists, not exists

select * from customer where not exists (select * from invoice where customer.c_no = invoice.c_no)

union

select * from violinplayers union select * from pianoplayers

from a query

select * from query1 where city = ‘London’

select into

select * into temp1 from customer where city = ‘London’

select * into customer in ‘accts1.mdb’ from customer

crosstab query

transform sum(weeklysales.s_value) as sumofs_value

select employee.e_name from employee inner join (category inner join weeklysales on category.c_no = weeklysales.c_no) on employee.e_no = weeklysales.e_no group by employee.e_name

pivot category.c_name




http://winapi.co.kr/toollec/SQL/3-3.htm

LIKE

= 비교 연산자는 완전히 일 치하는 조건식을 표현하는데 비해 LIKE 연산자는 일정한 패턴을 가 지는 문자열을 검색할 사용한다. 연산자를 사용하면 특정한 문자가 포함되어 있는 부분 문 자열 검색이 가능하다. 예를 들어 성이 김 씨인 사람, 주소가 강남구인 사람 등 을 검색할 아주 편리하다. LIKE 문의 패턴에는 다음과 같 은 와일드 카드가 사용된다.

 

문자

설명

%

복수개의 문자와 대응된다. 도스의 * 동일한 의미를 가지며 %자리에는 임의 개수의 임의 문자가 있다.

_

하나의 문자와 대응된다. 도스의 ? 동일한 의미를 가지며 _자리에 하나의 임의 문자가 있다.

[ ]

[ ]안에 포함된 문자 리스트 하나의 문자와 대응된다.

[^ ]

[^ ]안에 포함된 문자 리스트에 포함되지 않은 하나의 문자와 대응된다.

 

다음 명령은 이름이 자로 끝나는 나 라를 검색한다.

 

SELECT * FROM tblCountry WHERE Name LIKE '%';

 

LIKE ‘%이란 앞쪽에는 임의 개 수의 어떤 문 자라도 상관없되 제일 끝자가 자인 조건을 의미한다. 조건문에 의해 대 한민국, 미국, 중국, 영국 등이 검색된다. 국자로 시작하는 경우나 이름 중간에 국 자가 포함된 경우는 검색되지 않는다. 도스의 와일드 카드식이라도 작성해 적이 있다면 어렵지 않 을 것이고 정규식에 익숙하다 면 정 도는 누워서 떡먹기일 것이다.

LIKE 연산자에는 한가지 골치 아 픈 문제가 있는데 바로 와일드 카 드 문자 자체를 검색하려고 때 이다. % _ 와일드 카드 문자로 사용되기 때문에 정작 문자들이 포함된 문 자열을 검색하고자 때는 문 제가 된다. 예를 들어 Sale이라는 필드가 '30%' 레코드를 찾는다고 보자.

 

WHERE Sale LIKE '30%';

 

이렇게 하면 같 지만 % 문자 그 대로 해석되는 것이 아니라 임의의 여 러 문자를 의미하는 와일드 카드이기 때문에 '30%'뿐만 아니라 '30만원', '30일간 세일' 요딴 문자열도 같이 검색되어 버린다. 이런 문제를 해결하려면 와일드 카드 문 자를 일반 문자로 표현할 있 는 방법이 필요하다. 와일드 카드 문자 자 체를 검색하려면 와일드 카드 문자를 [ ] 감싼다. %문자 자체를 패 턴안에 포함시킬 때는 [%]라고 써야 하며 문 자열 내에서 [%] 와일드 카드가 아 니라 % 문자 자 체를 표현한다.

 

WHERE Sale LIKE '30[%]';

 

그렇다면 와일드 카드를 일반 문 자로 바꿔 주는 [ ] 어떻게 표현할까? 점점 복잡해지는데 [ 문자도 [ ] 괄호안에 싸서 [[] 요렇게 표기하면 된다. 예를 들어 자 는 임의의 문 자이고 번째는 0이고 번째는 % 문자열을 검색한다면 다음과 같은 조 건문을 만든다.


LIKE '_0[%]'

 

패턴의 문자가 _이므로 임의의 문자로 시작할 있 고 가운데는 무조건 0이어야 하며 번 째 문자는 % 자체여야 한다. 조건에 의해 '40%', '50%' 등은 검색되지만 '100%', '82%', '40퍼센트' 등은 검색되지 않는다. 방법외에 ESCAPE절로 와일드 문자를 일 반문자를 취급하는 특수한 문자를 지 정하는 방법도 있다.

 

LIKE '_0\%' ESCAPE '\'

 

ESCAPE 절에서 \ 이스케이프 문자로 정의하고 \ 다음의 % _ 와일드 카드로 인정하지 않는다는 뜻이다. C 자바같은 프로그래밍 언어의 확장열 표시 방 법과 동일하되 C 확장열은 이스케이프 문자가 역슬레시로 고정되어 있는데 비해 SQL 이스케이프 문자를 ESCAPE 절에서 지정한다는 점이 다르다.






반응형

'Code > Database (DB)' 카테고리의 다른 글

FireFox DB(sqlite) 정리  (0) 2017.02.14
손상된 SQLite 데이터베이스 파일 복구  (0) 2015.07.18
MDB 파일 관리 - SQL 명령  (0) 2015.01.15
SQLite 성능 테스트(auto_vacuum 설정)  (0) 2014.01.22
SQL 명령어 요약  (0) 2012.08.19
SQLite 사용법 정리  (0) 2012.08.18
Posted by codens codens

댓글을 달아 주세요