반응형

안녕하세요

오늘은 데이터를 원하는 그룹으로 만들 수 있는 GROUP BY에 대해 알아보도록 하겠습니다.

GROUP BY 절
- 데이터를 원하는 그룹으로 만들 때 사용합니다.
- 보통 집계함수와 사용됩니다.

문법
SELECT 컬럼1(혹은 집계합수), 컬럼2, 컬럼3.. FROM 테이블명
GROUP BY 컬럼1, 컬럼2, 컬럼3

예제

아래와 같은 테이블이 있는 경우

다음 쿼리를 실행시키면
SELECT m_nHP, COUNT(*) FROM CHARACTER_TBL
GROUP BY m_nHP

다음과 같은 결과를 얻을 수 있습니다.




HAVING 절
- WHERE 절에서 집계함수를 사용할 수 없기 때문에 집계함수를 조건 비교하기 위해 사용합니다.
- GROUP BY절과 함께 사용됩니다.

문법
SELECT 컬럼1(혹은 집계합수), 컬럼2, 컬럼3.. FROM 테이블명
GROUP BY 컬럼1, 컬럼2, 컬럼3 HAVING 집계함수 조건비교

예제

다음 쿼리를 실행시키면,
SELECT m_nHP, COUNT(*) FROM CHARACTER_TBL
GROUP BY m_nHP HAVING COUNT(*) > 1

다음과 같은 결과를 얻을 수 있습니다.

반응형

'개발공부 > MSSQL' 카테고리의 다른 글

[MSSQL] JOIN 사용  (0) 2020.02.11
[MSSQL] ALIAS(별칭) 사용  (0) 2020.02.10
[MSSQL] 테이블 데이터 삭제(DELETE)  (0) 2020.02.08
[MSSQL] 테이블 데이터 수정(UPDATE)  (0) 2020.02.07
[MSSQL] 테이블에 데이터 삽입(INSERT)  (0) 2020.02.05
반응형

안녕하세요 

오늘은 여러 테이블을 한번에 조회할 수 있게 하는 JOIN에 대해 알아보도록 하겠습니다. 

JOIN(조인) 이란? 
여러 테이블을 하나로 합쳐서 데이터를 보이도록 가능하게 해주는 구문입니다. 
만약 캐릭터 테이블과 길드원 테이블이 있을 때, 길드원 테이블에 길드원 아이디만 있고, 길드원 이름이 없다면, 
이럴때 JOIN을 사용하면, 캐릭터 테이블에서 캐릭터 아이디로 길드원 이름을 얻을 수 있습니다. 

조인의 종류 
□ INNER JOIN 

문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명  
INNER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
INNER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ LEFT OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
LEFT OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
LEFT OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ RIGHT OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
RIGHT OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
RIGHT OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ FULL OUTER JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
FULL OUTER JOIN 조인테이블명 ON 기준테이블.키값 = 조인테이블.키값 

예제
SELECT A.m_nGuildNo, A.m_nPlayer, B.m_szName FROM GUILD_TBL A
FULL OUTER JOIN CHRACTER B ON A.m_nPlayer = B.m_nPlayer;

□ CROSS JOIN 


문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명 
CROSS JOIN 조인테이블 

예제
SELECT A.m_nGuildNo, B.m_szName FROM GUILD_TBL A
CROSS JOIN CHRACTER B 

□ SELF JOIN 
문법 
SELECT 출력할 컬럼1, 출력할 컬럼2 ... FROM 기준테이블명, 기준테이블명2

예제
SELECT A.m_nGuildNo, B.m_szName FROM GUILD_TBL A, GUILD_TBL B

반응형
반응형

안녕하세요

ALIAS(별칭)을 쿼리문에 사용하는 법에 대해 알아보겠습니다.

■ ALIAS이란??
컬럼, 테이블, 서브쿼리등에 사용하여, 새로운 별칭을 부여합니다.
보통 알아보기 어려운 이름을 가진 컬럼이나 테이블을 보기 쉽게 만들어줍니다. 
"AS"로 사용합니다.

■ 문법
컬럼명 as 컬럼별칭
테이블명 as 테이블별칭


■ 예제
만약 CHRACTER_TBL 테이블이 있다면,

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 900 120
2 Admin 800 130
3 junno 200 180
4 momo 1000 2000



□ 컬럼명에 별칭
SELECT m_nPlayer AS PlayerNO, m_szName AS NAME FROM CHARACTER_TBL

PlayerNO NAME
1 gogogogo
2 Admin
3 junno
4 momo



□ 테이블명에 별칭
SELECT * FROM CHRACTER_TBL AS C

이렇게 별칭을 지정할 수 있습니다.

반응형
반응형

안녕하세요.

테이블에 데이터를 삭제하기 위해서 다음과 같은 쿼리를 사용합니다.

문법
DELETE FROM 테이블명 WHERE 조건식

"WHERE 조건식"을 제외하면 모든 데이터를 삭제합니다.

예제

만약 CHARACTER_TBL이 다음과 같다면,

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 600 120
2 Admin 900 130
3 jjuuii 900 180
4 hoho 1000 2000

DELETE FROM CHARACTER_TBL WHERE m_nHP = 900
->  m_nHP가 900인 데이터가 삭제됩니다.

 

결과값

m_nPlayer m_szName m_nHP m_nMP
1 gogogogo 600 120
4 hoho 1000 2000
반응형
반응형

안녕하세요.


문법
UPDATE 테이블명 
SET 수정할 컬럼명 = 수정할 값
where 조건식

예제

만약 CHARACTER_TBL이 다음과 같다면,

m_nPlayer m_szName m_nHP m_nMP
1 test 500 100
2 Admin 700 160
3 GM 1200 190
4 zzang 900 2000



UPDATE CHARACTER_TBL
SET m_nHP = 1000
-> CHARACTER_TBL 테이블의 모든 데이터의 m_nHP컬럼을 1000으로 수정합니다.

결과값

m_nPlayer m_szName m_nHP m_nMP
1 test 1000 100
2 Admin 1000 160
3 GM 1000 190
4 zzang 1000 2000



UPDATE CHARACTER_TBL
SET m_nHP = 1000
where m_szName = 'Admin'
-> m_szName컬럼이 'Admin'인 데이터의 m_nHP컬럼을 1000으로 수정합니다. 

결과값

m_nPlayer m_szName m_nHP m_nMP
1 test 500 100
2 Admin 1000 160
3 GM 1200 190
4 zzang 900 2000



반응형
반응형

안녕하세요.

테이블에 데이터를 넣기 위해서는 두 가지 쿼리를 사용할 수 있습니다.

형식
INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3....)
VALUES (컬럼1 데이터, 컬럼2 데이터, 컬럼3 데이터....)

INSERT INTO 테이블명
VALUES (컬럼1 데이터, 컬럼2 데이터, 컬럼3 데이터....)


예제

INSERT INTO CHARACTER ( m_nPlayer, m_szName, m_nHP, m_nMP ) 
VALUES ( 1, 'test', 200, 100 ) 

INSERT INTO CHARACTER
VALUES ( 1, 'test', 200, 100 )

 




SELECT문으로 INSERT하기

테이블명2에 데이터를 테이블명1에 넣습니다.

INSERT INTO 테이블명1 ( 컬럼1, 컬럼2, 컬럼3 ... )
SELECT 컬럼1, 컬럼2, 컬럼3 ... FROM 테이블명2 

테이블1과 테이블2가 같은 컬럼을 가진다면 다음과 같이 사용할 수 있습니다.
INSERT INTO 테이블명1
SELECT * FROM 테이블명2

반응형
반응형

안녕하세요 
MSSQL에서 데이터베이스 생성, 삭제 테이블을 생성, 수정, 삭제하는 쿼리에 대해 알아보도록 하겠습니다. 

■ 데이터베이스 생성(CRATE DATABASE) 
CREATE DATABASE 데이터베이스이름

예제
CREATE DATABASE TEST_DBF

■ 데이터베이스 삭제(DROP DATABASE) 
DROP DATABASE 데이터베이스이름

예제
DROP DATABASE TEST_DBF



■ 테이블 생성(CREATE TABLE) 
CREATE TABLE 새로만들테이블명( 
컬럼명 타입(크기) NOT NULL, 
컬럼명 타입(크기) DEFAULT(값) 
)

예제
CREATE TABLE CHARACTER_TBL( 
    m_nPlayer int, 
    m_szName varchar(32), 
    m_nHP int, 
    m_nMP int 
)

■ 테이블수정(ALTER TABLE) 
□ 컬럼 추가 
ALTER TABLE 테이블명 
ADD 컬럼명 데이터타입(크기)

예제
ALTER TABLE CHARACTER_TBL 
ADD m_nSP int 


□ 컬럼 삭제 
ALTER TABLE 테이블명 
DROP COLUMN 삭제할 컬럼명

예제
ALTER TABLE CHARACTER_TBL 
DROP COLUMN m_nSP


□ 컬럼 수정 
ALTER TABLE 테이블명 
ALTER COLUMN 컬럼명 데이터타입(크기)

예제
ALTER TABLE CHARACTER_TBL ALTER COLUMN m_szName varchar(30) 


■ 테이블삭제(DROP TABLE) 
DROP TABLE 테이블이름

예제
DROP TABLE CHARACTER_TBL

반응형
반응형

안녕하세요.

디비작업을 하다보면 테이블의 데이터만 지우고 싶을 때가 있습니다.

하지만, 테이블이 너무 많아 하나씩 지우기가 어려울 때 사용하는 쿼리에 대해 공유하겠습니다.

다음 쿼리를 이용하면 일단 오브젝트 정보를 얻을 수 있습니다.

select * from sys.sysobjects

 

이중에 사용자 테이블만 조회하려면 다음과 같이 합니다.

select * from sys.sysobjects where [XTYPE] = 'U'

 

그리고 이제 손쉽게 TRUNCATE TABLE이나 DELETE를 붙여서 조회를 합니다.

select 'TRUNCATE TABLE ' + [NAME] FROM sys.sysobjects where [XTYPE] = 'U'
select 'DELETE FROM ' + [NAME] FROM sys.sysobjects where [XTYPE] = 'U'

 

조회된 데이터 쿼리를 이용해서 삭제를 하면 됩니다.

 

반응형
반응형

해외 서비스를 하기 위해서는 Collation를 변경해야 스트링이 깨지는 현상을 방지할 수 있습니다.


데이터 베이스의 Collation 변경 쿼리는 다음과 같습니다.
1. 다른 사용자가 DB를 사용하고 있는데, 변경되면 안 되기 때문에 SINGLE USER로 변경합니다.
-- SINGLE USER MODE 변경 
ALTER DATABASE
DBNAME_DBF
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

2. collate 변경합니다.
--  Thai_CI_AS로 변경
ALTER DATABASE
DBNAME_DBF
COLLATE
Thai_CI_AS

3. 다시 MULTI USER MODE로 원복합니다
-- MULTI USER MODE
ALTER DATABASE
DBNAME_DBF
SET MULTI_USER 


테이블의 컬럼(char, nvarchar, text형 데이터) COLLATE도 변경해야 데이터가 제대로 입력될 수 있습니다.
테이블 컬럼 변경 쿼리는 다음과 같습니다.
ALTER TABLE
DBTable_TBL
ALTER COLUMN
CharacterName varchar(50)
COLLATE
Thai_CI_AS

그리고 만약 위에 CharacterName가 인덱싱이 되어있다면, 인덱싱을 제거하고 collate작업을 한 후 다시 생성해줘야 합니다.


그리고 주의할 점은 만약에 내가 AAAA_DBF라는 데이터 베이스에서 BBBB_DBF라는 데이터베이스 CCCC_TBL테이블의 데이터를 조회했을 때,
AAAA_DBF데이터베이스 COLLATE과 BBBB_DBF 데이터베이스 COLLATE가 다르다면, CCCC_TBL테이블의 스트링이 깨져서 출력될 수 있습니다.
(BBBB_DBF와 CCCC_TBL테이블의 컬럼은 같은 Collation)
USE [AAAA_DBF]
SELECT * FROM BBBB_DBF.dbo.CCCC_TBL WHERE m_szName = 'พูริคอง';

USE [BBBB_DBF]
SELECT * FROM BBBB_DBF.dbo.CCCC_TBL WHERE m_szName = 'พูริคอง';

이 두가지 조회 쿼리의 결과가 달라질 수 있습니다.
저는 AAAA_DBF가 Korean_Wansung_CI_AS이고,  BBBB_DBF가 Thai_CI_AS일 때, 조회된 m_szName이 ????로 깨져 나왔습니다.
AAAA_DBF를 Thai_CI_AS로 변경해서 해결했습니다.

반응형

+ Recent posts