MS SQL 8

[MS SQL]8.JOIN심화

JOIN에 대한 추가설명사실 JOIN은 주어진 쿼리를 효율적으로 처리하기위해 크게 3가지 유형으로 실행되고있다.1)Nested Loop 2)Merege 3)Hash Nested Loop먼저 Nested Loop를 알아보기 위해서 아래의 코드를 실행했을때SELECT TOP 5*FROM players AS p INNER JOIN salaries AS s ON p.playerID = s.playerID 이와 같은 실행순서를 거친다. 영어 그대로 중첩Loop를 돌면서 JOIN을 하고있다는건데,쉽게 생각해서 p와 s의 playerID가 일치하는지 알기 위해 무식한방법으로 2중 for문을 돌려서 playerID를 비교하는 방식이라고 생각하면 된다.-> (진짜 2중포문은 아니고 효율성을 챙기기 위해서 Dictiona..

MS SQL 2025.02.10

[MS SQL]7.인덱스 분석

지금까지 기본적인 문법을 배웠고 이제 인덱스를 분석해보고자 한다. 새로운 DB인 Northwind 정보를 가져와 주고 임시 테이블을 만들어준다.USE Northwind;--DB정보EXEC sp_helpdb 'Northwind';--임시 테이블(인덱스 테스트 용)CREATE TABLE Test( EmployeeID INT NOT NULL, LastName NVARCHAR(20) NULL, FirstName NVARCHAR(20) NULL, HireDate DATETIME NULL);GOINSERT INTO TestSELECT EmployeeID,LastName,FirstName,HireDateFROM Employees DB정보를 볼 수있는 코드--DB정보EXEC sp_helpdb 'Northwind';  ..

MS SQL 2025.02.07

[MS SQL]6.TRANSACTION,변수와 흐름 제어

TRANSACTION2개의 테이블을 동시에 입력해야할때 모종의 이유로 2개중 한 개만 입력에 성공하고 나머지는 입력이 안된다면 문제가 발생할수있음EX) 게임에서 아이템 거래를할때 한곳에서는 아이템을 지우고 다른곳에서는 아이템을 추가해야하는데 어느 한쪽이라도 실행이 되지않으면 문제가됨 3가지 명령어를 보면BEGIN TRANCOMMITROLLBACK아래의 COMMIT과 ROLLBACK은 BEGIN TRAN을 선언하지 않으면 사용할수 없다. 기존의 accounts 테이블에 값을 집어넣을때 아래와 같이 명령어를 입력했었다.INSERT INTO accounts VALUES (1,'amugae',100,GETUTCDATE()) 이 명령어는 자동으로 COMMIT을 해주기때문에 문제 발생시 잘못된 결과를 불러올수있다...

MS SQL 2025.02.06

[MS SQL]5.Primary Key,UNION,INTERSECT,EXCEPT,JOIN

Primary Key데이터 베이스 테이블에서 한 행을 고유하게 식별하게 사용되는 컬럼 혹은 컬럼의 집합을 말한다. Clustered Index테이블의 데이터를 물리적으로 정렬하는 순서를 결정하는 인덱스이다. 반대되는 개념으로 Non- Clustered Index가 존재한다.물리적으로 정렬되어있어 Non - Clustered 보다 검색 속도는 빠르지만 데이터의 입력,삭제시 매번 인덱스에의해 정렬을 해줘야하므로 이 부분은 Non - Clustered Index보다 느리다.보통 Primary Key를 설정하면 자동으로 Clustered Index로 설정된다.이것 때문에 primary key와 clustered Index가 무슨차이인가 싶겠지만 Primary key가 곧 Clustered Index를 뜻하는것은..

MS SQL 2025.02.06

[MS SQL]4.데이터 베이스 작성

DB 생성CREATE DATABASE [이름] CREATE DATABASE GameDB; 테이블 생성(CREATE)CREATE TABBLE 테이블명(열이름 자료형 [DEFAULT 기본값][ NULL | NOT NULL],...)CREATE TABLE accounts( accountID INTEGER NOT NULL, accountName VARCHAR(10) NOT NULL, coins INTEGER DEFAULT 0, createdTime DATETIME);테이블 삭제(DROP)단순히 DROP TABLE [테이블 이름]해주면 테이블이 지워진다.DROP TABLE accounts;  테이블 변경(ALTER)열 추가(ADD)/삭제(DROP)/변경)(ALTER) 열 추가ALTER TABLE accountsA..

MS SQL 2025.02.02

[MS SQL]3.GROUP BY,INSERT,DELETE,UPDATE,서브 쿼리

INSERT INTO salaries(yearID,teamID,playerID,lgID)VALUES(2020,'KOR','amugae2','NL')GROUP BY이 명령어는 특정 정보를 이용해서 그룹화하는 기능을 가지고있다.가량 2004년도의 팀별 홈런 수를 알고싶으면 우리에게 주어진 정보는 선수 + 소속팀 ... 이기때문에 우선 같은 소속팀인 선수의 2004년도 홈런기록을 모두 더 한다음 팀별로 홈런수를 표시해야한다. 그렇다면 우선적으로 테이블에 표시할때 teamID로 그룹화를 진행한다음 데이터를 처리해야하는데 이때 사용하는것이 GRUOP BY이다. 아래 코드는 2004년도에 teamID를 기준으로 그룹화를 진행한후 홈런 개수를 계산한다.SELECT teamID, SUM(HR) AS homeRUNSFR..

MS SQL 2025.02.02

[MS SQL]2.수치와 문자열,DATETIME,CASE,집계 함수

MS SQL에서 사칙연산 + 모듈러 연산 모두 다른 프로그래밍 언어와 동일하게 사용이 가능하다. 가령 데이터에서 한국나이 계산을 위해 아래와 같이 작성하고 출력하는게 가능하다.SELECT 2024 - birthYear AS koreanAgeFROM playersWHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2024 - birthYear) WHERE 조건중에 (2024 - birthYear) 대신에 koreanAge로 As처리했으니 저부분도 똑같이 할 수 있을거 같지만 이전 글에서 작성했듯이 작성순서는 영어 문장 어순을 따르지만 실행 순서는 논리적 절차를 따르므로FROM -> WHERE -> SELECT -> ORDER BY로 진행될때 WHERE에서 정..

MS SQL 2025.01.31

[MS SQL]1.SELECT, FROM,WHERE,ORDER BY

RDBMS(Relational Database Management System , 관계형 데이터 베이스 관리 시스템) vs NOSQL(Not only SQL)게임에서는 전자의 경우가 유저를 중심으로 다양한 데이터가 묶여있기때문에 기업에서 ms sql을 사용하는 추세  SSMS(SQL Server Management studio)에서 제공하는 Baseball Data를가지고 실습해볼 예정 SELECT, FROM,WHERE Ctrl + N을 누르면 새 쿼리를 요청가능함 SELECT 어떤 속성을 가져올지 선택하는 명령어, *는 FROM의 모든 속성의 데이터를 가져온다.SELECT *FROM players 한 가지 주의할 점은평소 코딩하는걸 생각해보면 FROM과 SELECT의 서순이 어색해 보일수있는데,왜냐하면..

MS SQL 2025.01.30