예전에 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';//로그인