select GETDATE()+10 --10일후로 입력.
dateadd
/*년 yy
월 mm
일 dd
시 hh
분 mi
초 ss,
dy(day of year), dw(day of week), qq
*/
select DATEADD(yy,5,GETDATE());
select DATEDIFF(dd,'2011-12-31',GETDATE()); -- 년도끼리 연산.

select DATENAME(DW,GETDATE()); --문자형반환. /목요일
select DATEPART(DW,GETDATE()); --숫자형 반환 /5일

select YEAR(GETDATE()); --GETDATE에서 YEAR값리턴.
select MONTH(GETDATE()); --GETDATE에서 MONTH값리턴.
select DAY(GETDATE()); -- GETDATE에서 DAY값리턴.

--정수형 문자형을 합치는 방법.
select ename, empno --ename은 문자형 empno가 숫자형일때
from emp;

--CONVERT로 문자형으로 형변환.
select ename + CONVERT(varchar(10), empno)
from emp

--CAST로 문자형으로 형변환.
select ename + CAST(empno as VARCHAR(10))
from emp

--년월일 표기식 변경.
select convert(varchar(20),GETDATE(),101); -- 미국표기식 년월일.
select convert(varchar(20),GETDATE(),102); -- ansi식 년월일.
select convert(varchar(20),GETDATE(),112); -- ios식 년월일


--집계함수는 null을 배제하고 사용한다.
/*
평균 avg
최대값 max
최소값 min
합계 sum
  count
*/

--empno안에 총 몇가지 값이 있는지 갯수 체크.
select count(isnull(empno,0))
from emp

select SUM(comm) as [합계]
from emp

select AVG(isnull(comm,0)) as [평균]
from emp

--clerk를 제외
select job, AVG(sal) as [합 계]
from emp
where job != 'clerk'
group by job

select MAX(SAL)
from emp

select min(sal)
from emp

select job, deptno,avg(sal)
from emp
group by job


--distinct
중복제거

select distinct job
from emp


--exec sp_help
시스템 내장변수
테이블정보.
exec sp_help emp

비트 연산
2진수변환


--in
Select ename, sal, deptno, job
from emp
where deptno in(10,20)

10보다 크고 20보다 적다.

--like
select ename, sal
from emp
where ename like '%e%'

문자열에서 시작하는 위치

where ename like '_a%' 두번째가 a인사람
where ename like '[as]%' a나 s로 시작하는 사람.
where ename like '[^s]%' s로 시작하지 않는 사람.

 

select reverse('abcdef') as reverse; // 역방향정렬
select replace('abcdef','bc','kkk'); // bc를 kkk로 대체
select STUFF('abcdef',2,3,'kkk'); // 2~3번까지를 kkk로 대체
select round(123.456,1); // 소수점이하 1자리까지 출력
select round(123.456,-1); // 1번자리까지 출력
select power(2,3); // 제곱
select ceiling(123.456);//124 가로안에 있는 숫자보다 큰 정수 출력.
select ceiling(-123.456); //-123가로안에 있는 숫자보다 큰 정수 출력.
select floor(123.456);// 123 // 보다 작은 최대정수
select floor(-123.456);//-124 // 보다 작은 최대정수
select sqrt(9);//제곱근함수(루트)
select SQUARE(9);//81
select abs(100);//절대값
select abs(-100);//절대값


select reverse('abcdef') as reverse;
select replace('abcdef','bc','kkk') as replace;
select STUFF('abcdef',2,3,'kkk') as STUFF;
select round(123.456,1) as round;
select round(123.456,-1) as round;
select power(2,3) as power;
select ceiling(123.456) as ceiling;
select ceiling(-123.456) as ceiling;
select floor(123.456) as floor;
select floor(-123.456) as floor;
select sqrt(9) as sqrt;
select SQUARE(9) as SQUARE;
select abs(100) as abs;
select abs(-100) as abs;


//소스
--select * from emp

/*select empno, ename
from emp
go*/
/*
use master

select *
from test408.dbo.emp
*/

/*select 7+5
select 7*4
select 'tom' + 'bill'*/

select ename as [사원이름], deptno as [부서이름]
from emp

select distinct job
from emp

exec sp_help emp

Select empno, sal, sal*12 As [연봉]
From emp

Select ename, sal, comm, sal+isnull(comm,0)
From emp

Select ename, sal, deptno, job
from emp
where job = 'salesman'

Select ename, sal, deptno, job
from emp
where sal >= 1500 and sal < 3000

Select ename, sal, deptno, job
from emp
where deptno in(10,20)
--where sal between 1500 and 3000

select ename, sal
from emp
where ename like '[s]%'

'개발 > SQL' 카테고리의 다른 글

MS-SQL 기초문제  (0) 2011.05.18
MS-SQL 문법 [ DATE ]  (0) 2011.05.18
기초 문법 [ pivot , ROW_NUMBER , Rank , DENSE_RANK , NTILE ]  (0) 2011.05.18
기초문법 [ GROUPING , with rollup , is not null ]  (0) 2011.05.18
sql 기초문법  (0) 2011.05.18

--pivot
select YEAR, [1] as '1분기', [2] as '2분기', [3] as '3분기', [4] as '4분기'
From (select YEAR, quater, amount from PivotT) as t1
pivot( sum(amount)
  for quater in ([1], [2], [3], [4]) ) as pvt;

PIVOT (집계함수(값이있는 열의 이름)
  FOR 피벗하고자하는열 in (목록))


--ROW_NUMBER()
SELECT Year
,  Part
,  quater
,  amount
,  ROW_NUMBER() OVER(ORDER BY 타겟 DESC) AS 'Row Nmber'
FROM PivotT
go

모든 개체의 넘버를 빠지는 번호없이 순서를 정하는 함수.


--RANK()
SELECT Year
,  Part
,  quater
,  amount
,  RANK() OVER(ORDER BY 타겟 DESC) AS 'rank'
FROM PivotT
go

개체의 타겟을 기준으로 순위를 매김.


--DENSE_RANK()
DENSE_RANK() OVER (ORDER BY amount DESC) as 'densh'

중복된 다음의 넘버가 건너뛰는 번호없이 모두 표시됨.


--NTILE(넘버)
NTILE(5) OVER (ORDER BY amount DESC) as 'tile'

0부터 넘버에 표시되는 숫자까지의 수를 균등하게 적용하여 표시됨.


--partition by
RANK() OVER(partition by 타겟 ORDER BY amount DESC) AS 'rank'

표시된 타겟을 같은수끼리 영역으로 묶어 영역별 순위를 매김.

 

 

 

 

 

/*
INSERT PivotT (Year,Part,quater,amount)
values (2001,'g',3,2.7);
*/

SELECT *
FROM PivotT
go

SELECT Year
,  Part
,  quater
,  amount
,  ROW_NUMBER() OVER(ORDER BY amount DESC) AS 'Row Nmber'
,  RANK() OVER(partition by Year ORDER BY amount DESC) AS 'rank'
,  DENSE_RANK() OVER (ORDER BY amount DESC) as 'densh'
,  NTILE(5) OVER (ORDER BY amount DESC) as 'tile'
FROM PivotT
go

'개발 > SQL' 카테고리의 다른 글

MS-SQL 기초문제  (0) 2011.05.18
MS-SQL 문법 [ DATE ]  (0) 2011.05.18
MS-SQL 숫자,텍스트,문법 [ in , like , Math ]  (0) 2011.05.18
기초문법 [ GROUPING , with rollup , is not null ]  (0) 2011.05.18
sql 기초문법  (0) 2011.05.18

+ Recent posts