데이터베이스 with MSSQL/SQL 입문
-
윈도우 함수데이터베이스 with MSSQL/SQL 입문 2022. 4. 11. 15:59
1. 사용 윈도우함수는 ~OVER( [PARTITION], [ORDER BY], [ROWS] ) 형식으로 사용된다. SELECT *, ROW_NUMBER() OVER (ORDER BY salary DESC), -- 행#번호 RANK() OVER (ORDER BY salary DESC), -- 랭킹 DENSE_RANK() OVER (ORDER BY salary DESC), -- 랭킹 (공동순위) NTILE(100) OVER (ORDER BY salary DESC) -- 상위 몇% 표시(백분율) FROM salaries;
-
변수와 흐름 제어데이터베이스 with MSSQL/SQL 입문 2022. 4. 11. 15:06
1. 변수 선언과 초기화 DECLARE @i AS INT = 10; -- 정수형 변수 선언과 동시에 초기화 DECLARE @j AS INT; SET @j = 10; -- 변수값 설정 변수명에 @를 넣는 이유는 다른 테이블의 변수명과 이름이 겹치지 않기위해 문자를 섞어줌. 2. 응용 예제) 역대 최고 연봉을 받은 선수 이름? DECLARE @firstName AS NVARCHAR(15); DECLARE @lastName AS NVARCHAR(15); SET @firstName = (SELECT TOP 1 nameFirst FROM players AS p INNER JOIN salaries AS s ON p.playerID = s.playerID ORDER BY s.salary DESC); SELECT @f..
-
TRANSACTION데이터베이스 with MSSQL/SQL 입문 2022. 4. 11. 13:58
1. 필요성 COMMIT과 ROLLBACK을 통해 원자성을 보장받을 수 있다. 만약 TRANSACTION을 선언하지 않으면 한 문장이 끝날 때 마다 자동으로 COMMIT이 이루어진다. COMMIT은 작성한 코드를 데이터베이스에 갱신을 하겠다는 뜻이다. ROLLBACK은 작성한 코드를 COMMIT이 이루어진 지점 전까지 취소를 하겠다는 뜻이다. 한 가지 주의할 점은 TRANSACTION을 사용할 때는 꼭 원자적으로 실행될 구문만 넣어야한다. TRANSACTION이 사용되는 동안 ROLLBACK이나 COMMIT이 되기 전까지는 다른 연산은 모두 멈추게 된다. 이는 마치 C#에서 lock을 사용하는 것과 같다. 이렇게 lock을 걸어놓는 행위는 성능적인 이슈가 발생할 수 있기 때문에 마구 남용해서는 안된다. ..
-
JOIN데이터베이스 with MSSQL/SQL 입문 2022. 4. 8. 13:23
1. CROSS JOIN 참고로 UNION등과 햇갈릴 수 있는데 JOIN은 가로로 결합을 하고 UNION과 같은 연산은 세로로 결합을 한다는 차이점이 있다. CREATE TABLE testA ( a INTEGER ) CREATE TABLE testB ( b VARCHAR(10) ) INSERT INTO testA VALUES(1); INSERT INTO testA VALUES(2); INSERT INTO testA VALUES(3); INSERT INTO testB VALUES('A'); INSERT INTO testB VALUES('B'); INSERT INTO testB VALUES('C'); -- CROSS JOIN(교차결합) SELECT * FROM testA CROSS JOIN testB -- ..
-
UNION, INTERSECT, EXCEPT데이터베이스 with MSSQL/SQL 입문 2022. 4. 8. 12:51
1. 필요성 -- 12월에 태어난 선수들의 playerID SELECT playerID, birthMonth FROM players WHERE birthMonth = 12 -- 커리어 평균 연봉이 3백만 이상인 선수들의 playerID SELECT playerID, AVG(salary) FROM salaries GROUP BY playerID HAVING AVG(salary) >= 3000000 두 개의 SELECT문을 활용하여 합집합, 교집합, 차집합을 구하고 싶을 때는 각각 UNION, INTERSECT, EXCEPT를 활용할 수 있다. 2. UNION, UNION ALL -- [커리어 평균 연봉이 3백만 이상인 선수] || [12월에 태어난 선수]들의 playerID (합집합) -- UNION (중..
-
인덱스(INDEX)데이터베이스 with MSSQL/SQL 입문 2022. 4. 8. 12:09
1. 개념 정의 : 데이터 레코드를 빠르게 접근하기 위해 쌍으로 구성되는 데이터 참고. 인덱스를 걸 때에는 데이터의 종류가 많은 것이 좋다. - 클러스터드 인덱스 vs 넌클러스터드 인덱스 클러스터드 인덱스 (Clustered Index) - 순서에 따라 데이터가 정렬되어 저장되는 방식, 속도가 매우 빠르다. - 테이블 당 1개만 존재한다. 넌클러스터드 인덱스 (Non-Clustered Index) - 키 값만 정렬되어 있고 실제 데이터는 정렬되지 않는 방식 2. 사용 -- 인덱스 생성 CREATE INDEX i1 ON accounts(accountName); -- 겹치는 데이터가 없이 인덱스 생성 CREATE UNIQUE INDEX i1 ON accounts(accountName); -- 클러스터드 인덱..
-
데이터베이스 작성(CREATE, ALTER, DROP)데이터베이스 with MSSQL/SQL 입문 2022. 4. 8. 10:55
1. CREATE -- 테이블 생성(CREATE)/삭제(DROP)/변경(ALTER) -- CREATE TABLE 테이블명(열이름 자료형 [DEFAULT 기본값] [NULL | NOT NULL], [PRIMARY KEY | ...]) CREATE TABLE accounts( accountId INTEGER NOT NULL, accountName VARCHAR(10) NOT NULL, coins INTEGER DEFAULT 0, createTime DATETIME ); 2. DROP -- 테이블 삭제 DROP TABLE accounts; 3. ALTER -- 테이블 변경 -- 열 추가(ADD)/삭제(DROP)/변경(ALTER) ALTER TABLE accounts ADD lastEnterTime DATETI..
-
SUBQUERY, IN, EXISTS데이터베이스 with MSSQL/SQL 입문 2022. 4. 6. 20:12
1. 필요성 --연봉이 역대급으로 높은 선수 추출('rodrial01') SELECT TOP 1 * FROM salaries ORDER BY salary DESC -- 추출된 값('rodrial01')을 이용해서 한 번더 SELECT 사용 SELECT * FROM players WHERE playerID = 'rodrial01' SELECT로 추출한 정보를 활용하여 한 번 더 추출하려고 할 때, SELECT를 두 번 사용 해야하는 불편함이 있는데 SUBQUERY는 이 과정을 하나로 줄일 수 있다. 2. 단일행 사용 SELECT * FROM players WHERE playerID = (SELECT TOP 1 playerID FROM salaries ORDER BY salary DESC) 두 개중 하나의 ..