강의 개요
강의명: [#10774] SQL Server 2012 기본 쿼리(TSQL 기초) – Microsoft SQL Server 2012 기초
장소: 웹타임
일시: 2014-03-24
자세히: 70-461 Querying Microsoft SQL Server 2012(MOC 10774A)
1일차: SSMS(SQL Server Management Studio)와 친해지고 쿼리 실행 순서를 한번씩 보는 것이 목표
먼저 툴 설명
▼ 다른 사용자로 실행 – Shift + 마우스 오른쪽 클릭
☆ AlwaysOn 고가용성 – 스토리지에 대한… 클러스터링은 아님
☆ SMS에서 도구 -> 옵션 -> 텍스트 편집기에서 줄 번호 표시
☆쿼리 결과 창 단축키는 F5
▼ 쿼리 창에서 명령어가 궁금하면 클릭해서 F1을 누르면 됨
- 인터넷의 도움말을 로컬에 설치하려면 1시간 정도 걸림. 영문은 좀 더 걸릴 것.
- 도움말 설정 관리에서 MS 개발 제품군 전체의 도움말을 다 설치할 수 있다.
☆ Codeplex.com 에서 sql server sample databases 로 검색해서 AdventureWorks databases – 2012, 2008R2 and 2008을 받을 수 있음
☆ 최고의 쿼리는 속도가 빠른 것!
SQL Management Studio를 외부에서 접속하거나 IP 주소로 접속하려면?
- SQL 2008 Server Windows Firewall로 Google에서 검색하면 스크립트가 나옴
- http://support.microsoft.com/kb/968872/ko
- 고급 보안이 포함된 Windows 방화벽에 정책이 생김
- (사실 http://technet.microsoft.com/ko-kr/library/cc646023.aspx 의 포트들을 한 방에 풀어주는 스크립트라고 함)
▲ 외부에서 접속할 때는 이 옵션이 중요
냉장고… ㅎㅎ(서버실의 은어)
▲ 보통 CSV로 저장
▲ GUI로 테이블 만들고 수정 가능하게 하려면 체크 해제(그 이전에는 수정만 됨)
▲ 새 프로젝트
▲ 새 쿼리
▲ 단순히 메뉴바의 [새 쿼리]를 누르면 기타 파일 하단으로 들어가고, 특정 폴더(쿼리)에서 단축 메뉴를 통해 쿼리를 만들 수도 있다.
▲ 개체 탐색기에서 서버의 속성을 켜서 값들을 바꾼 뒤 스크립트를 누르면…
EXEC sys.sp_configure N’show advanced options’, N’1′ RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’min memory per query (KB)’, N’1023′
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N’show advanced options’, N’0′ RECONFIGURE WITH OVERRIDE
GO
위와 같이 마치 파워쉘 스크립트처럼 구문으로 빼준다! wow…
☆ 툴은 자꾸자꾸 써봐야 익숙해진다
▲ 프로젝트 내 쿼리 폴더에 있는 sql파일은 위에 있는 ‘연결’을 통해 접근가능한 데이터베이스에서 쿼리를 날리는 것
기타 파일의 sql 파일은 그런 인증이 없이 어떤 데이터베이스와도 연결 가능
SQL Azure
- 백업 , 복구, 클러스터링, 미러링 -> MS가 해주겠다는 의미
- 돈이 많으면 얼마든지 ^^ 대신 돈이 없으면.. ㅠㅠ
- IP 정보를 주지 않고 DNS 주소를 줌
- 로컬에 있는 서버: On-Premise (클라우드가 아니라 우리 회사에…)
T-SQL
- Transact-SQL
- MS 전용(사투리)
- IBM에서 1970년대에 개발
- Oracle도 IBM에서 나온 사람들이 만들었다고 함.(PL/SQL)
- 우후죽순처럼 생기는 SQL 때문에 ANSI와 ISO에서 쿼리문의 표준을 정함
- 어떤 DB든 ANSI SQL(표준어)은 거의 다 먹음
오늘 배울 분량은 ‘안녕’ 정도…
DML – Data Manipulation Language
- 데이터를 조작하는 언어
- SELECT, INSERT, UPDATE, DELETE
DDL – Data Definition Language
- 정의하는 언어
- CREATE, ALTER, DROP
DCL – Data Control Language
- 제어하는 언어
- GRANT, REVOKE, DENY
SELECT 안에서…
- IN, BETWEEN, LIKE
- 비교
- AND, OR, NOT (그리고, 또, 반대)
- +, -, *, /, %
- + (글씨와 글씨를 붙일 때)
앞으로 배울 것
- 함수(다양함)
- 변수(DECLARE 명령으로…)
- 연산(Expression)
- 흐름 제어
- 트랜젝션
- 주석
- GO 구문(단위별로 끊을 때)
- NULL…
데이터를 가지고 오는 구문
- SELECT 뭘 / 사과
- FROM 어디서 / 이마트에서
- WHERE 무엇만 / 아오리사과냐 빨간사과냐 (FROM 안에 있는 조건)
- GROUP BY 큰거? 작은거!
- HAVING 그룹핑
- ORDER BY 그룹핑에 대한 조건
SQL 서버에서 찾는 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
무조건 FROM이 첫번째. 2~4번이 있으면 5번, 6번 순으로 진행
☆ ORDER BY는 제일 마지막에 실행된다.
쓸 때는 ?
SELECT ____ FROM ____ WHERE ____ GROUP BY _____ HAVING ____ ORDER BY ____
USE
- 어떤 데이터베이스를 쓸지 정의
실습
10774A_03_PRJ\10774A_03_PRJ\ 폴더의 프로젝트 열기
▲ 특정 데이터베이스를 선택해줘야 거기서 선택이 됨. 또는
–USE TSQL2012; (TSQL2012 데이터베이스를 쓰겠습니다!)
–GO
위 명령의 주석을 풀어주면 됨
SELECT와 FROM이라는 파란색 글씨는 예약어. 키워드.
- SELECT는 화면에 표시하라는 명령
- SELECT 다음에 오는 것을 화면에 표시해라.
- SELECT 10 -> 10 표시.
- 콤마로 구분
- 세미콜론을 찍으면 문장의 끝을 표시할 수 있음.
- DB 엔진은 세미콜론을 만나기 전까지 한줄로 봄
- 세미콜론을 붙이는 버릇을 들이면 좋다
FROM 스키마명.테이블명
- 우리는 스키마를 잘 안쓴다.
- 외국에서는 이렇게 쓴다
SELECT 다음에 컬럼명을 적어주는 것을 권장
- ‘*’ 는 지양
스칼라
- Scalar
- 1등만 기억하는 더러운 세상
- 맨 첫번째에 오는 녀석, 하나만 값을 리턴
- MS에서는 Scalar 값을 반환한다고 하지 한 개의 값만… 이라고 설명하지 않는다.
- 행과 열 중에서 첫번째 행의 첫번째 컬럼만 가져옴
▲ 바로 실행하는 버릇보다는 구문 분석을 클릭한 후 문제가 없으면 실행하는 버릇을 들이자.
▲ 앞뒤 이름 따로따로 출력
▲ 이름을 붙였다!
▲ 다른 구문보다 FROM ~~~ 로 DB를 지정해준 다음에 SELECT 구문을 적으니 intellisense가 동작
▲ 스칼라 연산( empid + 1 )이기 때문에 ‘열 이름 없음’으로 나타난다.
중복 제거
DISTINCT
- 약간의 주의사항이 있다.
컬럼: 열(세로)
Aliases
컬럼명 AS 별명 (명시적 표현임) 또는 별명 = 컬럼명
이렇게 쓸 수 있음. 테이블에 대한 별칭도 가능. 명시적으로 표현하는 것이 좋다.
주의점
- 실행 순서에 따라 동작하지 않을 수 있다.
▲ 실습 ^^ 좌측 하단에 NAME 보이시죠?
▲ 하단에 FROM 테이블명 AS e; 라고 적었기 때문에 SELECT 문에서 e. 라고 적으면 intellisense 동작
CASE 연산식
이것도 스칼라값을 줍니다
논리적으로 무엇인가를 구분해서 출력할때!
범위가 아니라 특정한 값을 콕 찝었을 때 CASE를 함
▲ 밑의 텍스트 파일들은 실습의 결과가 이렇게 나와야 한다는 것을 것을 보여줌
▲ 그냥 SELECT *로 데이터를 가져올 때와는 달리 내가 원하는 순서로 정렬해서 볼 수 있다. 그래서 명시적으로 컬럼명을 적어주면 좋다.
▲ 위와 같이 Mexico가 중복되는데…
▲ DISTINCT를 사용하면 중복 제거가 가능
▲ 맨 우측 Company Name 컬럼명을 다 표시하려면
- ‘ ‘로 묶거나 [ ] 로 묶는다
- ‘ ‘ 로 묶으면 대소문자를 구분함
▲ SELECT 구문에서 콤마를 찍지 않으니 컬럼명은 Country이지만 실제 데이터는 city에서 가져옴(우리가 원하지 않은 결과)
▲ select city를 하면 위와 동일한 결과
★ 그렇다면?
▲ 콤마로 컬럼명을 구분해주면 위와 같이 제대로 동작.
(컬럼명을 콤마로 구분하지 않으면 자동으로 별칭으로 인식 – 컬럼명이 실제 있는 이름이면)
▲ 마치 프로그래밍 같네. select 구문의 컬럼명을 다 적고 나서 쉼표를 꼭! 붙이자.
CASE 구문 사용법
CASE
WHEN 컬럼명 = X THEN ‘문자열’
END
thanks to 김병진 이사님