MS-SQL & TABLEAU #1

MUUU·2022년 1월 9일
0

MS_SQL & TABLEAU

목록 보기
1/7
  • 나중에 내가 30초만에 따라 작업할 수 있도록 작성하는 내용,,

https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads

기본으로 다운로드

https://docs.microsoft.com/ko-kr/sql/ssms/release-notes-ssms?view=sql-server-ver15

ssms 실행

새쿼리 (ctrl+N)

CREATE DATABASE EDU (DDL)

USE EDU : 해당 DB사용


  DDL
  -CREATE
  -ALTER
  -DROP
  -RENAME
  -TRUNCATE

  DML
  -SELECT
  -UPDATE
  -DELETE
  -INSERT

  DCL
  -GRANT
  -REVOKE

  TCL
  -COMMIT
  -ROLLBACK
  -SAVEPOINT

DDL형식 : 테이블 정의

숫자형 p20

데이터형식BYTE숫자범위설명
BIT10 1 null논리형, 참거짓

주석

--: 한줄 주석
/**/ : 모두 주석

CREATE TABLE

use edu

create table [회원테이블](
[회원번호] varchar(20) primary key,
[이름] varchar(20),
[성별] varchar(2),
[나이] int,
[가입금액] money,
[가입일자] date not null,
[수신동의] bit

ALTER TABLE

  • 해당 라인만 드래그하여 실행(F5), USE EDU인지 확인
  • REAL; FLOAT(24) : MY SQL이랑 많이 다르네 ㄷㄷ

ALTER TABLE [TABLE] ALTER COLUMN

  • 몸무게 타입을 REAL to INT

SP_RENAME

  • SP_RENAME '[회원테이블].[몸무게]' , '[몸무게(kg)]' --띠용... mysql이랑 엄청 다르네..

TRUNCATE TABLE : 내용만 삭제

DROP TABLE: 테이블 형식까지 삭제

DML : 데이터 조작

INSERT INTO [TABLE] VALUES

  • 문자형, 날짜형은 '' 따옴표 필요
  • PK 위반, NOT NULL 제약조건 위반시 실행 안됨

SELECT * FROM TABLE

SELECT (SPECIAL)

  • AS: ALIASES
  • 열변경하여 조회가능

UPDATE [TABLE] SET

UPDATE (SPECIAL) SET [COLUMN] WHERE

DELETE : 모든행 삭제

  • (DELETE /TRUNCATE /DROP 비교)
  • DELETE: 데이터만 삭제
  • TRUNCATE: 데이터+테이블공간 삭제
  • DROP: 테이블 전체 삭제

DELETE FROM [TABLE] WHERE

DCL : USER에게 권한부여

GRANT

  • GRANT SELECT ON [TABLE] TO USER (WITH GRAND OPTION: USER가 타인에게 권한부여)

REVOKE

  • REVOKE SELECT ON [TABLE] TO USER CASCADE
    (CASCADE: USER가 타인에게 부여한 권한까지 회수)

TCL

  • TRANSACTION: DML 명령들을 하나의 그룹으로 처리하는 논리적인 작업단위
	UPDATE	--- 하나의 TRANSACTION
    SELECT	--- 하나의 TRANSACTION

COMMIT

  • BEGIN TRAN -> DELETE -> COMMIT (명령어 적용 완료)

ROLLBACK

  • DELETE 가 ROLLBACK으로 취소됨

SAVEPOINT


CSV파일 IMPORT

  • FROM/ WHERE/ GROUP BY/ HAVING/ ORDER BY

  • 체크해제하기. 안하니까 에러발생


  • Ctrl+ N

WHERE

  • SELECT * FROM [MEMBER] WHERE GENDER='MAN'

WHERE, GROUP BY

  • MAN인 행들을 ADDR로 묶어서 COUNT, ADDR과 회원수집계 칼럼만 출력
SELECT ADDR,
COUNT(MEM_NO) AS [회원수집계]
FROM [MEMBER]

WHERE GENDER='MAN'
GROUP BY ADDR 

WHERE, GROUP BY 2

  • ADDR, GENDER, 회원수집계 출력. MAN인 행들을 ADDR, GENDER별로 필터링
SELECT ADDR,GENDER,
COUNT(MEM_NO) AS [회원수집계] 
FROM [MEMBER]

WHERE GENDER='MAN'
GROUP BY ADDR, GENDER
  • WHERE -> GROUP BY 순으로 실행
  • MAN만 필터링해서 GENDER칼럼은 전부 동일

HAVING

WHERE절로 GENDER='MAN'
HAVING절로 COUNT>=50

SQL문법순서 : WGH

*SELECT -> FROM -> WHERE -> GROUP BY-> HAVING -> ORDER BY
SFWGHO

"WGH"
WHERE : 테이블을 특정조건으로 필터
GROUP BY: 열별로 그룹화
HAVING: 그룹화된 새로운 테이블을 특정조건으로 필터

ERM(entity relationship modeling)개념

  • 회원---주문---상품

  • 회원이 n번 주문가능: 회원 및 주문테이블 1:n

  • 상품이 n번 주문됨: 주문 및 상품테이블 n:1

  • PK: 테이블에서의 고유값

  • FK: 다른테이블에서의 고유값

회원테이블관계주문테이블관계상품테이블
회원번호(PK)주문번호(PK)상품번호(PK)
이름회원번호(FK)상품명
성별1:N상품번호(FK)N:1판매단가
가입일자주문일자판매자
주소주문금액생산일자

JOIN

(4) INNER JOIN

  • SELECT [칼럼A] INNER JOIN [칼럼B] ON A.칼럼=B.칼럼
USE EDU

SELECT * FROM  [MEMBER] AS A
INNER JOIN [ORDER] AS B
ON A.MEM_NO=B.MEM_NO --MEM_NO 기준으로 결합
  • 1005는 5번 주문했으므로 1:5관계로 데이터조회
  • ON A.칼럼=B.칼럼은 대부분 PK, FK로 지정

OUTER JOIN

  • SELECT [칼럼A] OUTER JOIN [칼럼B] ON A.칼럼=B.칼럼
  • (1) LEFT JOIN: 왼쪽 테이블기준 데이터조회
  • (5) RIGHT JOIN: 오른쪽 테이블기준
  • (2) FULL JOIN: 양쪽 테이블기준

LEFT JOIN

  • 4명은 가입후 주문이력이 없는 회원 (NULL)

RIGHT JOIN

  • 회원가입후 주문가능: NULL값 없음

FULL JOIN

  • LEFT RIGHT 모든 속성

OTHER JOIN (CROSS, SELF)

CROSS JOIN:

A에 3행,B에 N행 -> 3*N 행 출력

  • 1*2951 = 2951행

SELF JOIN: A의 행과 다른행 결합

A에 3행 -> 3*3 행 출력

  • 1*1206= 1206행

SUB QUERY

  • 서브쿼리: 주로 SELECT, FROM, WHERE 절 뒤에 위치

SELECT절 서브쿼리

  • 하나의 열처럼 사용, 스칼라(SCALA) 서브쿼리
    ** 스칼라는 한번에 하나의 값만 보유가능한 원자량
  • JOIN의 대체 표현식이지만 데이터양이 많을수록 속도 느림 (사용빈도 낮음)

FROM절 서브쿼리

  • FROM절 서브쿼리는 테이블처럼 사용, 인라인뷰(INLINE VIEW)

FROM절 서브쿼리+ LEFT JOIN

WHERE절 서브쿼리

WHERE절 '='은 비교연산자
단일행 서브쿼리는 결과가 단일행이어야 함
** 단일행서브쿼리에서는 비교연산자가 사용된다

WHERE절 서브쿼리: 다중행

  • IN: 일치하는것 하나라도 있으면 반환
  • 다중행 서브쿼리는 결과가 여러행이어야 함

QUIZ : WHERE GROUPBY HAVING

  • 1) [ORDER]테이블 모든열 조회
  • 2) [SHOP_CODE]는 30이상으로만 필터
  • 3) [MEM_NO]별 [SLAES_AMT] 합계 구하기
    ** SUM(SALES_AMT)의 열이름은 TOT_AMT
  • 4) [SALES_AMT] 합계가 100000이상으로만 필터
  • 5) [SALES_AMT]합계가 높은순으로 정렬


QUIZ2 : JOIN

  • 1) [ORDER] 테이블 기준으로 [MEMBER] 테이블을 LEFT JOIN
    ** [GENDER][ORDER] 테이블간의 공통값 (MEM_NO)
  • 2) [GENDER] 별 [SALES_AMT] 합계를 구하라 << 틀림! 주의 -LEFT JOIN용법
    ** SUM(SALES_AMT)의 열이름은 TOT_AMT
  • 3) [GENDER], [ADDR]별 [SALES_AMT] 합계를 구하라
    ** SUM(SALES_AMT)의 열이름은 TOT_AMT

QUIZ3 : 서브쿼리

  • 1)[ORDER] 테이블의 [MEM_NO]별 [SALES_AMT] 합계를 구하라
  • 2)(1)을 FROM절 서브쿼리를 이용하여 [MEMBER] 테이블을 LEFT JOIN
  • 3)[GENDER], [ADDR]별 [TOT_AMT] 구하라

QUIZ4 : 연산자

비교연산자

  • [MEMBER] 테이블의 [ADDR]이 'SEOUL'이 아닌값만 조회 <>

논리연산자

  • [MEMBER] 테이블의 [GENDER]가 'MAN' 및 [AGEBAND]가 20인 값만 조회
  • [MEMBER] 테이블의 [GENDER]가 'MAN' 및 [AGEBAND]가 20인 값과 또는 [ADDR]이 'SEOUL'인 값

특수연산자

  • [MEMBER] 테이블의 [AGEBAND]가 20~40인 값
  • [MEMBER] 테이블의 [ADDR]이 'AE'를 포함하는 값 ( LIKE )

산술연산자

  • [ORDER] 테이블에서 [SALES_AMT]를 0.1로 곱셈 (열이름 :FEES)
  • [ORDER] 테이블에서 [SALES_AMT]에 [SAELS_AMT]를 0.1로 곱셈한 값을 뺄셈( 열이름: EXCLUDING_FEES)

단일행 함수 P.79

복수행 함수

윈도우 함수

집합연산자

profile
데이터분석

0개의 댓글