단일 테이블 조회를 위한 SELECT 문을 이해한다. 열 제약조건과 행 제약조건을 이해한다. 결과 집합 변경 방법을 이해한다.

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
LAB: Web-scale Data Management on a Cloud Lab 1. Introduction 2011/03/04.
널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null.
SQLite 소개 및 안드로이드에서의 사용법
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
웹 프로그래밍 HTML, 자바스크립트, ASP를 중심으로
보건의료DB (2) 김성환
소리가 작으면 이어폰 사용 권장!.
소프트웨어시스템설계(6주) 데이터베이스 연동
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
Database & Internet Computing Laboratory 한 양 대 학 교
제 5 장 인덱스 생성 및 관리.
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
Chapter 05 SQL 인젝션 공격.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
Apache Hive 빅데이터 분산 컴퓨팅 박영택.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
MySQL performance Xhark 김재홍.
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
6장 Mysql 명령어 한빛미디어(주).
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
11장. 데이터베이스 서버 구축과 운영.
기초 T-SQL.
MySQL 기본 사용법.
트랜잭션과 잠금 트랜잭션 처리 메커니즘을 자세히 이해한다. 트랜잭션의 종류를 파악한다.
ㅎㅎ MS-SQL서버 2000과 XML MS-SQL 서버 2000과 XML 활용 HTTP를 이용한 XML 데이터 접근
Chapter 05 데이터베이스 프로그래밍.
9. 데이터베이스 9.5 SQL을 사용하는 프로그램 9.6 데이터폼 작성기를 사용하는 프로그램
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
SQL.
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
데이터 수정 데이터 수정 명령문을 이해한다. 데이터 삽입, 갱신 및 삭제 명령문을 이해한다.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
제 9장: 파일과 데이터베이스 데이터 구성에서부터 데이터 채굴 까지.
13장 무결성 제약조건.
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
기초 SQL 문 SELECT 문과 같은 데이터베이스 조회 명령문을 이해한다.
Database 중고차 매매 DB 비즈니스IT 윤동섭.
인터넷응용프로그래밍 과제 실습.
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
기본적인 SELECT문 작성.
컬럼 대칭키 암호화 작업(SQL 2008) ① 마스터 키 생성 ② 인증서 생성 초기 한번만 실행 ③ 대칭키 생성
06. SQL 명지대학교 ICT 융합대학 김정호.
과제 #5 MySQL 연동 php문서에서 SQL문의 삽입, 삭제, 수정, 검색을 수행한다. 주어진 form을 최대한 활용한다.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Presentation transcript:

단일 테이블 조회를 위한 SELECT 문을 이해한다. 열 제약조건과 행 제약조건을 이해한다. 결과 집합 변경 방법을 이해한다.

단일 테이블 조회 SELECT 문 개요 열 제약조건 행 제약조건 결과 집합 변경

1. SELECT 문의 개요 개념과 작동 원리 데이터베이스를 조회하는 SELECT 문의 기초 데이터가 저장된 테이블(stores 테이블)에서 행과 열의 일부 또는 전부를 추출해서 결과 집합(result set) 또는 레코드 집합(record set) 이라는 조회 결과를 만들어주는 명령문 SELECT 문은 모든 SQL 명령문들 중에서 가장 중요 실제로 가장 많이 사용

1. SELECT 문의 개요 개념과 작동 원리

1. SELECT 문 개요 구문 BNF(Backus Normal Form)

1. SELECT 문 개요 구문 기본적인SELECT 문의 구문

2. 열 제약조건 열 제약조건 SELECT 문을 사용할 때 열을 제약하는 각종 조건에 대해 학습 현재 데이터베이스와 무관하게 SQL 쿼리를 실행하려면 데이터베이스 이름까지 함께 지정 예) FROM SalesLT.ProductCategory; FROM Adventure WorksLT.SalesLT.ProductCategory

SalesLT.ProductCategory 테이블을 조회하겠다고 지정 2. 열 제약조건 모든 열(*) ‘*’는 열 제약이 전혀 없다는 것을 나타냄 - 이때 열들은 스키마에 정의되어 있는 순서대로 나타남 - AdventureWorksLT 내에 있는 SalesLT.ProductCategory 테이블의 모든 열을 조회 1 SELECT * 2 FROM SalesLT.ProductCategory; 예제 1 열 제약이 없음: 모든 열을 지정 SalesLT.ProductCategory 테이블을 조회하겠다고 지정

2. 열 제약조건 모든 열(*) 1 SELECT * 2 FROM SalesLT.ProductCategory;

모든 열을 스키마 정의 순서대로 나타나도록 지정 2. 열 제약조건 열 목록 모든 열(*) 대신 특정 열들의 목록 지정 가능 - SalesLT.ProductCategory 테이블의 모든 열들을 스키마에서 정의한 순서대로 나열, 실행 결과는 모든 열(*)을 지정했을 때와 같다. 1 SELECT ProductCategoryID, ParentProductCategoryID, Name, rowguid, ModifiedDate 2 FROM SalesLT.ProductCategory; 예제 2 모든 열을 스키마 정의 순서대로 나타나도록 지정

2. 열 제약조건 열 목록 1 SELECT ProductCategoryID, ParentProductCategoryID, Name, rowguid, ModifiedDate 2 FROM SalesLT.ProductCategory;

2. 열 제약조건 열 목록 집합: 공통된 특징이 있는 요소들이나 다른 것과 관련이 있는 요소들을 모아 놓은 것. 요소들 사이에는 특별한 순서가 없음 - rowguid 열 생략, Name과 ModifiedDate 열 순서 바꿈(집합에 근거하기 때문에 열 순서의 생략, 변경이 가능 1 SELECT ProductCategoryID, ParentProductCategoryID, ModifiedDate, Name 2 FROM SalesLT.ProductCategory; 예제 3 원하는 열 목록을 원하는 순서대로 지정

2. 열 제약조건 열 목록 1 SELECT ProductCategoryID, ParentProductCategoryID, ModifiedDate, Name 2 FROM SalesLT.ProductCategory;

2. 열 제약조건 열 별칭 지정 SELECT 문을 실행하면 SQL 서버는 결과 집합과 함께 열 머리글을 돌려줌 결과 집합(Result Set) SELECT 문을 실행했을 때 SQL 서버가 돌려주는 레코드 집합 SELECT 문 실행 후의 실행 결과에서 확인 가능 열 머리글(Column Heading) 결과 집합에서의 각 필드의 이름 쿼리 분석기에서 SELECT 문을 실행하면 결과 창에 열 머리글이 표시 됨(가능하면 열 머리글에는 직관적인 이름을 부여)

2. 열 제약조건 열 별칭 지정 보통은 열 이름이 열 머리글 열 머리글을 만들 때 사용하는 것이 열 별칭(column alias) 열 별칭을 지정할 때는 column AS alias, column alias를 사용하며, 계산된 파생 열이 있을 때는 열 머리글이 없기 때문에 별도로 부여

2. 열 제약조건 열 별칭 지정 column AS alias - 가장 표준적이고 권장하는 방법 - SELECT 문은 영문 열 이름들을 모두 한글 별칭으로 바꾼 것 - 별칭에 공백이나 특수 문자가 포함될 경우에는‘ ’,“ ”또는 [ ]로 둘러싸야 함(예: ... AS‘우편 번호’) 1 SELECT PostalCode AS 우편번호, CountryRegion AS 국가, 2 StateProvince AS 주, City AS 시, AddressLine1 AS 주소 3 FROM SalesLT.Address; 예제 4 이전 열 머리글 바꾸고자 하는 열 별칭

2. 열 제약조건 열 별칭 지정 1 SELECT PostalCode AS 우편번호, CountryRegion AS 국가, 2 StateProvince AS 주, City AS 시, AddressLine1 AS 주소 3 FROM SalesLT.Address;

2. 열 제약조건 열 별칭 지정 column alias - 앞의 column AS alias 에서 AS를 생략한 방법 - 열 이름과 별칭의 구분이 명확하지 않음 1 SELECT PostalCode 우편번호, CountryRegion 국가, 2 StateProvince 주, City 시, AddressLine1 주소 3 FROM SalesLT.Address; 예제 5 이전 열 머리글 바꾸고자 하는 열 별칭

2. 열 제약조건 열 별칭 지정 예제 6 - column alias 방법의 문제점 : SELECT 문에서 두 개의 열 사이에 쉼표를 빠뜨리면 두 번째 열(CountryRegion)이 별칭으로 바뀜 1 SELECT PostalCode CountryRegion 2 FROM SalesLT.Address; 예제 6

2. 열 제약조건 열 별칭 지정 계산된 파생 열: 원래 테이블에 있던 열이 아니라 계산에 의해 새로 만들어진 열 - SELECT 문의‘OrderQty * UnitPrice * (1 - UnitPriceDiscount)’ 가 계산된 파생열 - 이 열에는 별칭을 붙이지 않으면 열 머리글이 지정되지 않음 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 2 OrderQty * UnitPrice * (1 - UnitPriceDiscount) AS total_price 3 FROM SalesLT.SalesOrderDetail; 예제 7 계산된 파생 열 지정하고자 하는 열 별칭

2. 열 제약조건 열 별칭 지정 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 2 OrderQty * UnitPrice * (1 - UnitPriceDiscount) AS total_price 3 FROM SalesLT.SalesOrderDetail;

2. 열 제약조건 열 별칭 지정 계산된 파생 열 전체를 ‘( )’로 둘러싸주면 구문의 의도를 명확하게 보여줄 수 있음 예) ... (OrderQty * UnitPrice * (1 - UnitPriceDiscount) ) AS total_price ... 전체‘( )’를 생략하고 AS도 생략한 방식은 복잡한 연산식과 열 별칭 (total_price)이 뒤섞여 거의 구분되지 않음 예) ... OrderQty * UnitPrice * (1 - UnitPriceDiscount)

2. 열 제약조건 열 별칭 지정 ‘alias = column’방식 예제 8 열 별칭을 지정하는 또 다른 방식(SQL 표준 아님) Transact-SQL에서 사용 가능 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 2 total_price = OrderQty * UnitPrice * (1 - UnitPriceDiscount) 3 FROM SalesLT.SalesOrderDetail; 예제 8 계산된 파생 열 지정하고자 하는 열 별칭

2. 열 제약조건 상수 열 상수(literal) 열: 테이블 열 값 대신 모든 레코드에 동일한 상수 값을 출력하는 열 예제 9 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 2 '합계:', OrderQty * UnitPrice * (1 - UnitPriceDiscount) 3 FROM SalesLT.SalesOrderDetail; 예제 9 상수 열 계산 식

2. 열 제약조건 상수 열 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 3 FROM SalesLT.SalesOrderDetail;

2. 열 제약조건 상수 열 [예제 9]의‘합계:’열이 상수 열 무의미한 상수 값이 모든 행에 중복으로 들어있기 때문에 매우 비효율적(데이터베이스에서 금기시되는 데이터 중복과도 관련 있음) 다음과 같이 열 별칭으로 바꾸는 편이 효율적 예) ... (OrderQty * UnitPrice * (1 - UnitPriceDiscount) ) AS 합계 ...

2. 열 제약조건 상수 열 - 문자 상수 열 외에 숫자 상수 열 지정 1 SELECT 7 AS Lucky, firstname, lastname 2 FROM SalesLT.Customer; 예제 10

2. 열 제약조건 상수 열 [예제 10]의 모든 레코드의 첫째 필드에 행운의(lucky) 7이 출력 - 극단적으로 모든 열이 상수 열일 경우, 아예 FROM 절이 없는 SELECT 문을 만들 수도 있다는 의미 SELECT 'Lucky', 7, '참 좋다!'; 예제 11

3. 행 제약조건 비교 연산자 SELECT 문으로 행들을 조회할 때 행을 제약하여 원하는 일부 행들만 결과집합으로 출력 열(또는 변수)의 값이 특정 값과 일치하는지 또는 더 크거나 작은 지 비교 하는 데 쓰임 비교 연산자가 포함된 연산식은 TRUE나 FALSE를 돌려줌

FirstName이‘James’와 같은 3. 행 제약조건 비교 연산자 - = 비교 연산자 사용 1 SELECT CustomerID, FirstName, MiddleName, LastName 2 FROM SalesLT.Customer 3 where FirstName = 'James'; 예제 12 FirstName이‘James’와 같은

3. 행 제약조건 비교 연산자 1 SELECT CustomerID, FirstName, MiddleName, LastName 2 FROM SalesLT.Customer 3 where FirstName = 'James';

3. 행 제약조건 비교 연산자 예제 13 - <= 비교 연산자 사용 1 SELECT ProductID, Name, ProductNumber, ListPrice 2 FROM SalesLT.Product 3 WHERE ListPrice <= 4.99; 예제 13 ListPrice가 4.99보다 작거나 같은

3. 행 제약조건 비교 연산자 1 SELECT ProductID, Name, ProductNumber, ListPrice 2 FROM SalesLT.Product 3 WHERE ListPrice <= 4.99;

3. 행 제약조건 논리 연산자 논리 연산자 연산식들을 논리적으로 결합 비교 연산자가 포함된 연산식은 TRUE 또는 FALSE를 돌려줌 비교 연산자에는 NOT → AND → OR 순의 우선순위 있음 - 논리 연산자들을 단순히 결합하면 이 우선순위에 따라 결합 순서가 결정되는데, 결합 순서를 바꾸려면‘( )’로 둘러싸야 함

3. 행 제약조건 논리 연산자 예제 14 - 연산자 우선순위를 적용하여 논리 연산자들을 결합 - 결합 순서 - NOT →AND →OR ( NOT 연산자 때문에‘ProductCategoryID = 8’행이 제외, OR 연산자 때문에‘ProductCategoryID = 1’행이 추가 ) 1 SELECT ProductCategoryID, ParentProductCategoryID, Name 2 FROM SalesLT.ProductCategory 3 WHERE NOT ProductCategoryID = 8 4 AND ParentProductCategoryID = 2 5 OR Name = 'Bikes'; 예제 14 1 2 3

3. 행 제약조건 논리 연산자 1 SELECT ProductCategoryID, ParentProductCategoryID, Name 2 FROM SalesLT.ProductCategory 3 WHERE NOT ProductCategoryID = 8 4 AND ParentProductCategoryID = 2 5 OR Name = 'Bikes';

3. 행 제약조건 논리 연산자 예제 15 -‘( )’로 논리 연산자들의 결합 순서를 바꿔보자 (결합 순서는OR →AND →NOT) 1 SELECT ProductCategoryID, ParentProductCategoryID, Name 2 FROM SalesLT.ProductCategory 3 WHERE NOT ( 4 ProductCategoryID = 8 5 AND ( 6 ParentProductCategoryID = 2 7 OR Name = 'Bikes' 8 ) 9 ); 예제 15 1 2 3

3. 행 제약조건 논리 연산자 1 SELECT ProductCategoryID, ParentProductCategoryID, Name 2 FROM SalesLT.ProductCategory 3 WHERE NOT ( 4 ProductCategoryID = 8 5 AND ( 6 ParentProductCategoryID = 2 7 OR Name = 'Bikes' 8 ) 9 );

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) LIKE 연산자 문자열 패턴 매칭(pattern matching)을 해주는 연산자 소량의 문자열 검색에 많이 사용 match_expression에는 열 또는 변수 이름이 오고, pattern에는 와일드카드 문자가 포함된 문자열 상수가 옴 < LIKE 연산자 구문>

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자)

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) 예제 16 - 와일드카드 문자 %를 사용 - 다음 명령문의 실행 결과에서‘Kramer’,‘ Graff’,‘ Graham’ 은 패턴의‘Ra’와,‘ Barzdukas’는‘Ka’와 매칭 1 SELECT CustomerID, LastName 2 FROM SalesLT.Customer 3 WHERE LastName LIKE '%[CKR]a%'; 예제 16 LastName이 Ca, Ka, Ra 중 하나라도 포함할 경우

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) 1 SELECT CustomerID, LastName 2 FROM SalesLT.Customer 3 WHERE LastName LIKE '%[CKR]a%';

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) 예제 17 - 와일드카드 문자 자체를 패턴에 포함 1 IF NOT EXISTS ( 2 SELECT name 3 FROM sys.databases 4 WHERE name = N'Test1DB' 5 ) 6 CREATE DATABASE Test1DB; 7 GO 8 USE Test1DB; 9 GO 10 IF OBJECT_ID('Table1', 'U') IS NOT NULL 11 DROP TABLE Table1; 12 GO 13 CREATE TABLE Table1 14 ( 15 id int NOT NULL, 16 name varchar(20) NULL, 17 CONSTRAINT PK_Table1 PRIMARY KEY (id) 18 ); 19 GO 20 INSERT Table1 VALUES (1, 'abcdef'); 21 INSERT Table1 VALUES (2, 'abc_def'); 22 INSERT Table1 VALUES (3, 'abc%def'); 예제 17

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) 예제 18 -‘_’가 포함된 행 찾기 -‘ \’이 이스케이프 문자이므로‘_’가 포함된 행을 정확히 찾아냄 1 SELECT name 2 FROM Table1 3 WHERE name LIKE '%\_%' ESCAPE '\'; 예제 18

3. 행 제약조건 문자열 패턴 매칭(LIKE 연산자) 기본적인 이스케이프 문자 DBMS별로‘ESCAPE <escape character>’구 없이도 이스케이프 효과를 얻는 방법 있음 SQL Server에서 와일드카드 문자를‘[ ]’로 둘러싸면 이스케이프가 됨 즉 예) ... name LIKE '%[_]%' ... ... name LIKE '%[%]%' ... MySQL에서는 적용 안됨 -‘ESCAPE \’구 없이도‘\’문자가 기본적인 이스케이프 문자로 적용 예) ... name LIKE ‘%\_%’... ... name LIKE ‘%\%%’...

3. 행 제약조건 범위 검색(BETWEEN 연산자) BETWEEN 연산자 최솟값과 최댓값 사이의 범위에 들어가는지 여부를 파악할 때 쓰임 이때 최솟값과 최댓값도 범위에 포함 range_expression에는 열 또는 변수 이름이 옴 비교 및 논리 연산자를 사용하는 것보다 BETWEEN 연산자를 사용하는 것이 더 효율적 < BETWEEN 연산자 구문> <비교 및 논리 연산자 구문>

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 19 - 숫자 데이터 형에 BETWEEN 연산자 사용 1 USE AdventureWorksLT; 2 GO 3 SELECT ProductID, Name, ListPrice 4 FROM SalesLT.Product 5 WHERE ListPrice BETWEEN 2.29 AND 4.99; 예제 19 2.29 <= ListPrice <= 4.99

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 20 - 문자 데이터 형에 BETWEEN 연산자 사용 1 SELECT ProductID, Name, ProductNumber 2 FROM SalesLT.Product 3 WHERE ProductNumber BETWEEN 'BB-7421' AND 'BK-M18B-40'; 예제 20 ‘BB-7421’<= ProductNumber <= ‘BK-M18B-40’

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 21 - 날짜·시각 데이터 형에 BETWEEN 연산자 사용 - DueDate가‘2001-06-14 00:00:00.001’이라면 결과 집합에서 제외될 것(각 날짜의 0시~0시까지만 범위에 포함되기 때문 1 SELECT PurchaseOrderDetailID, DueDate 2 FROM AdventureWorks.Purchasing.PurchaseOrderDetail 3 WHERE DueDate BETWEEN '5/31/2001' AND '6/14/2001'; 예제 21 2001-050-31 00:00:00.000 <= DueDate <= 2001-06-14 00:00:00.000

3. 행 제약조건 목록 검색(IN 연산자) IN 연산자 목록 안의 값 중 하나와 일치하는지 여부를 파악 - list_expression은 열 또는 변수 이름이 옴 - value_list는 보통 쉼표로 구분된 상수 값들이 옴 예) col IN (1, 2, 4, 9) - value_list 대신에 하위 질의subquery가 올 수도 있음

3. 행 제약조건 목록 검색(IN 연산자) - IN 연산자를 사용해 목록 검색 1 SELECT PostalCode, StateProvince, City 2 FROM SalesLT.Address 3 WHERE StateProvince IN ('Idaho', 'New Mexico', 'South Dakota'); 예제 22 StateProvince가 이 셋 중 하나일 경우

3. 행 제약조건 목록 검색(IN 연산자) - 비교 및 논리 연산자를 사용해 목록 검색 - 실행 결과는 IN 연산자를 사용한 것과 같으나 훨씬 비효율적 1 SELECT PostalCode, StateProvince, City 2 FROM SalesLT.Address 3 WHERE StateProvince = 'Idaho' 4 OR StateProvince = 'New Mexico' 5 OR StateProvince = 'South Dakota'; 예제 23 StateProvince가 이 셋 중 하나일 경우 [예제 22]와 의미는 같지만 다른 표현

3. 행 제약조건 NULL 비교(IS 연산자) NULL은 실제 연산 시 일반적인 연산자처럼 사용하면, 결과는 NULL에 대한 연산을 하려면 특수한 연산자 IS 또는IS NOT만 사용 해야 함 - NULL을 포함한 데이터 확인 1 SELECT ProductCategoryID, ParentProductCategoryID 2 FROM SalesLT.ProductCategory; 예제 24

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 25 -‘= NULL’을 사용해 데이터 비교 1 SELECT ProductCategoryID, ParentProductCategoryID 2 FROM SalesLT.ProductCategory 3 WHERE ParentProductCategoryID = NULL; 예제 25 NULL을 = 로 비교하면 실패

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 26 -‘IS NULL’을 사용해 데이터 비교 1 SELECT ProductCategoryID, ParentProductCategoryID 2 FROM SalesLT.ProductCategory 3 WHERE ParentProductCategoryID IS NULL; 예제 26 NULL을 IS로 비교하면 정확한 결과가 나옴

3. 행 제약조건 범위 검색(BETWEEN 연산자) 예제 27 -‘IS NOT NULL’을 사용해 데이터 비교 - 정확한 결과 나옴 1 SELECT ProductCategoryID, ParentProductCategoryID 2 FROM SalesLT.ProductCategory 3 WHERE ParentProductCategoryID IS NOT NULL; 예제 27 NULL이 아닐 경우

3. 결과 집합 변경 행 정렬(ORDER BY 절) 행들을 특정 열(들)을 기준으로 정렬 할 때 ORDER BY 절 사용 order_by_expression : 정렬할 열 지정. 열 형식은 열 이름 또는 그 별칭, 연산식 또는 그 별칭, 위치를 나타내는 정수 등으로 지정 ASC | DESC : ASC는 오름차순 정렬, DESC는 내림차순 정렬을 지정 - 기본적으로 오름차순이므로 ASC는 생략해도 무관. ASC나 DESC는 하나의 열에만 적용 order_by_expression : 이 구문이 여러 개 나올 때는 첫 번째 것이 1차 정렬 키, 두 번째 것이 2차 정렬 키 등과 같이 적용

3. 행 제약조건 행 정렬(ORDER BY 절) 예제 28 - 열 이름으로 정렬 수행 1 SELECT ListPrice, ProductID, Name 2 FROM SalesLT.Product 3 WHERE ProductID <= 716 4 ORDER BY ListPrice DESC, ProductID; 예제 28 ListPrice를 기준으로 내림차순으로 정렬하고, ListPrice가 같을 경우 ProductID를 기준으로 오름차순으로 정렬

3. 행 제약조건 행 정렬(ORDER BY 절) 예제 29 - 위치를 나타내는 정수로 정렬 수행 - ORDER BY 절의 1은 첫 번째 열 ListPrice를, 2는 두 번째 열 ProductID를 가리킴 1 SELECT ListPrice, ProductID, Name 2 FROM SalesLT.Product 3 WHERE ProductID <= 716 4 ORDER BY 1 DESC, 2; 예제 29 열 목록의 첫째 열을 기준으로 내림차순으로 정렬하고, 첫째 열이 같을 경우 둘째 열을 기준으로 오름차순으로 정렬

3. 행 제약조건 중복 행 제거(DISTINCT) 중복된 레코드들을 하나씩만 나타나게 하려면 열 목록에 DISTINCT를 사용 DISTINCT : 열(column)이 여러 개 있을 때 모든 열을 조합한 값이 중복되지 않도록 함 DISTINCT가 포함된 SELECT 문에 ORDER BY 절이 있을 경우에는 정렬하는 열들이 열 목록에 반드시 나타나야 함(DISTINCT가 없을 경우에는 제약이 없음)

3. 행 제약조건 중복 행 제거(DISTINCT) 예제 30 - 열 하나에 중복 행 제거 1 SELECT DISTINCT StateProvince 2 FROM SalesLT.Address; 예제 30 StateProvince값이 중복되지 않게

3. 행 제약조건 중복 행 제거(DISTINCT) 예제 31 - 여러 열에 중복 행 제거 - 세 열을 조합한 값을 유일하게 해줌(각각의 열은 중복가능) - ORDER BY 절에 포함된 LastName, Suffic, Title 열들은 목록에도 반드시 나타나야 함 1 SELECT DISTINCT LastName, Suffix, Title 2 FROM AdventureWorksLT.SalesLT.Customer 3 ORDER BY LastName, Suffix, Title; 예제 31 세 열을 조합한 값이 중복되지 않게 열 목록에 있는 열들