sql 메모

프로그래밍/SQL 2017. 10. 11. 21:20

예전에 sql수업 좀 들으면서 메모장에 메모한 메모


하나씩 잘 정리해서 블로그에 꾸준히 올리려고 했는데

귀찮아서 안 하다가 파일을 잃어버릴 뻔했다.


다행히 외장하드 한구석에 남아있어서 꺼내오기는 했는데

다시 잃어버릴까봐 그냥 한번에 올림.








sql 메모



CREATE DATEBASE 이름; -- 데이터 베이스 만들기


use Test; -- Test데이터 베이스 사용                                                


CREATE TABLE testTable(


number int identity(1,1) not null, --바꿀수 없는 자료 identity(시작하는 숫자,추가할따마다 추가되는 숫자)


Code INT, --코드 int

Title NVARCHAR(50), --타이틀 string NVARCHAR = 유니코드를 사용하는 문자

Price INT -- 가격 int

);                                     


dbcc checkident(테이블이름,0); -- 테이블의 아이덴티티값을 초기화


INSERT INTO 테이블이름(Code,Title,Price) --집어넣을 테이블 이름과 자료형 명시

VALUES (123,'스트링',500);--집어넣을 자료    


DELETE 테이블이름; --싸그리 지워 버리기                    


SELECT * FROM 테이블이름; --모든 테이블 정보

SELECT 원하는항목,원하는항목2 FROM 테이블이름; 


SELECT DISTINCT 원하는항목 FROM 테이블이름 --원하는 항목중 중복되는 것은 거름


--행추가

ALTER TABLE 테이블이름

ADD 추가할데이터이름 데이터형 초기값;


--행제거

ALTER TABLE 테이블이름

DROP COLUMN 행이름


--오름차순 정렬

SELECT * FROM 테이블이름 ORDER BY 행이름 ASC;

--내림차순 정렬

SELECT * FROM 테이블이름 ORDER BY 행이름 DESC;


--비교

select  * from 테이블이름 where 조건식; --논리연산자는 영어로 씀 and,or,not 그리고 "같다"는 '=' 하나만


--문자열 찾기

select * from 테이블 where 행이름 like '%예%';-- %''앞에 어떤글자를 포함함

select * from 테이블 where 행이름 like '__예';-- _앞에 _만큼의 글자가 있음


--값의 범위

select * from 테이블이름 where 행이름 between 0 and 30;


--널 검사

select * from 테이블이름 where 행이름 is null;--널이면 트루 

select * from 테이블이름where 행이름 is not null;--널이아니면 트루


--원하는값

select * from 테이블이름 where 행이름 in (원하는값1,원하는값2,ext)

select * from 테이블이름 where 행이름 not in (원하는값1,원하는값2,ext)


--출력하는 개수

select Top 1 * from 테이블이름;--위에서 선착순으로 출력


--foreach

update 테이블이름 set 설정값1,설정값2 where 설정조건;


--삭제

delete from 테이블이름 where 조건;




--함수들


--모든곳에서 사용가능한 함수


ceiling(실수) -- 올림

floor(실수) -- 내림


rand() -- 0~1 까지의 랜덤 숫자

round(숫자,반올림할 자리) -- 반올림할자리를 지정하여 반올림


len('문자열') --문자열의 길이

SUBSTRING('text',자릿수,가지고올길이) -- 텍스트의 자릿수번째부터 가지고올길이까지 가지고오기


ltrim('문자열')--왼쪽의 공백 제거

rtrim('문자열')--오른쪽의 공백 제거


upper('문자열') --문자열 대문자화

lower('문자열')--문자열 소문자화


getdate() -- 날자와 시간 정보

year(getdate()); --날자와 시간정보에서 연도구하기

month(getdate());--날자와 시간정보에서 달구하기

day(getdate());--날자와 시간정보에서 날자구하기


dateadd(d,1,'2017-3-13'); --날자에 1더하기

datediff(m,'2016-2-13','2017-3-13');  -- 2날자의 차이 구하기 (달단위)


datename(weekday,getdate()); -- 현제 요일의 이름


datepart(yyyy,getdate()); --현제 날자의 년도 뽑기

convertconvert(nvarchar(10),getdate(),112);; --날자 표시 형식 변경 (반환형,변경할거,코드)


--타입변환

cast(0,245 as varchar);--실수를 문자열로

cast('2016-03-11' as datetime)--문자열을 날자형으로


--테이블의 함수


select avg(행이름) from 테이블이름


AVG -- 평균

SUM -- 합계

COUNT -- 모든개수

MAX --최대값

MIN --최솟값



--그룹 바이

select name , Max(score) as high, min(score) as low from tbl_game group by name;

--이름이 같은사람끼리 그룹을 지어서 최댓값과 최솟값을 출력


select name , SUM(score) as su from tbl_game group by name having (sum(score) >= 300);

--그룹바이가 된 항목에 조건을 걸려면 having 을 사용



--서브 쿼리 

select * from tbl_game where point1 >= (select avg(point1) from tbl_game);

--셀렉트문안에 셀렉트문을 또 쓸수 있다          


--조인


select *from book cross join Orders;

--단순히 조합을 함  ,  으로 대신할수도 있음

select * from 테이블1 inner join 테이블2 on 테이블1.id = 테이블2 .id;

--on으로 조건을 줄수 있음

select *from 테이블1 left join 테이블2 on 테이블1.id = 테이블2.id; 

--왼쪽을 기준으로 조인을함


--번수 선언

declare @변수이름 테이터타입; -- 변수이름에 반드시 @가 있어야함

--변수 대입

set @변수이름 = 3;


--조건문


if 조건

begin --begin으로 시작해서 end로 끝남

실행문

end

else

begin

실행문

end                            


--while

while @test <10

begin

select @test;

set @test += 1;

end                               


--case 


바꿀 변수 = 

case 케이스에집어넣을변수

when 0 then 바꿀값1

when 1 then 바꿀값2

else 바꿀값3

end                                      


--isnull

if isnull(@temp,'') != ''

--널 값을 확인하고 대체값을 넣어줌 대체값을 보고 널인지 아닌지 구별할 수 있다



--뷰

--테이블에서 필요한 부분만 가져온 가상의 표 

--뷰와 테이블은 연동된다

--insert와 delete는 join이 되어있지 않은 뷰만 된다


--뷰 만들기

create view 만들고싶은뷰이름 as select * from  원래있던테이블 where 조건;


--뷰 삭제

drop view 뷰이름;


--집합연산자

select name from 테이블1 union select name from 테이블2--union 중복된데이터를 정리해서 기지고옴

select name from 테이블1 union all select name from 테이블2--union 중복된데이터도 가지고옴


select name from 테이블1 intersect select name from 테이블2;--intersect  교집합


select name from 테이블1 except select name from 테이블2;--except 처음에 쓴거를 중심으로 교집합


--ALL 서브쿼리 비교

select * from 테이블이름 where price > all (select saleprice from 테이블이름2)--서브쿼리의 모든값과 비교(and)


--ANY 서브쿼리 비교

select * from 테이블이름 where price > all (select saleprice from 테이블이름2)--서브쿼리의 값중 아무값과 비교하고 싶을때 (or)


--순위정렬

Select ROW_NUMBER() OVER(ORDER BY 열이름)from 테이블;--중복이 있어도 레코드 순서를 하나씩 표시

Select RANK() OVER(ORDER BY 열이름)from 테이블;

Select DENSE_RANK() OVER(ORDER BY 열이름)from 테이블;


--순위정렬로 랭크정렬하여 테이블에 기록

update emp set ranking = (

select r from

(select EMPNO,rank() over(order by sal desc) as r from emp) as t

where t.EMPNO = emp.EMPNO)



--new id

select newid();--서버의 네트워크 카드 MAC주소와 컴퓨터 시계로 부터 얻은 유일한 값의 조합

select checksum(newid()); --정수로 변환


--테이블 섞기

select * from emp order by newid();--newid로 섞기



--비밀번호


pwdencrypt('비밀번호'); -- 암호화

pwdcompare('12345',pw) = 1 ; --비교


select pwdcompare('1234',pw) from login where id = 'pc1';//로그인


'프로그래밍 > SQL' 카테고리의 다른 글

mysql 자동증가값(auto_increment) 가지고 오기  (0) 2017.10.13
오늘 새로배운 mysql 정리  (0) 2017.10.12
apmSetup  (0) 2017.10.11
SQL 정리 - 2 자료형들  (0) 2017.05.20
SQL 정리 - 1 테이블 생성과 수정  (0) 2017.05.17
블로그 이미지

stuban

ㅇ.ㅇ

,