- 나중에 내가 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 | 숫자범위 | 설명 |
---|
BIT | 1 | 0 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)
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)개념
회원테이블 | 관계 | 주문테이블 | 관계 | 상품테이블 |
---|
회원번호(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
- 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
FULL JOIN
- LEFT RIGHT 모든 속성
OTHER JOIN (CROSS, SELF)
CROSS JOIN:
A에 3행,B에 N행 -> 3*N 행 출력
SELF JOIN: A의 행과 다른행 결합
A에 3행 -> 3*3 행 출력
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
복수행 함수
윈도우 함수
집합연산자