1 / 62

단일 테이블 조회

단일 테이블 조회. 단일 테이블 조회를 위한 SELECT 문을 이해한다 . 열 제약조건과 행 제약조건을 이해한다 . 결과 집합 변경 방법을 이해한다. 단일 테이블 조회. SELECT 문 개요 열 제약조건 행 제약조건 결과 집합 변경. 1. SELECT 문의 개요. 데이터베이스를 조회하는 SELECT 문의 기초 SELECT 문은 테이블에 어떤 데이터가 들어 있는지 조회하는 명령문 데이터가 저장된 테이블 (stores 테이블 ) 에서 행과 열의 일부 또는

varsha
Download Presentation

단일 테이블 조회

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. 1. SELECT 문 개요 • BNF(Backus Normal Form) • BNF는 프로그래밍 언어의 구문을 정의하는 데 많이 사용되는 표기법 • 구문

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  25. 2. 열 제약조건 1 SELECT OrderQty, UnitPrice, UnitPriceDiscount, 2 '합계:', OrderQty * UnitPrice * (1 - UnitPriceDiscount) 3 FROM SalesLT.SalesOrderDetail; • 상수 열

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

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

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

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

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

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

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

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

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

  35. 3. 행 제약조건 - 연산자 우선순위를 적용하여 논리 연산자들을 결합 - 결합 순서 - 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

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

  37. 3. 행 제약조건 -‘( )’로 논리 연산자들의 결합 순서를 바꿔보자 (결합 순서는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

  38. 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 ); • 논리 연산자

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

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

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

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

  43. 3. 행 제약조건 - 와일드카드 문자 자체를 패턴에 포함 1 IF NOT EXISTS ( 2 SELECT name 3 FROM sys.databases 4 HERE 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'); • 문자열 패턴 매칭(LIKE 연산자) 예제 17

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

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

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

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

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

  49. 3. 행 제약조건 - 날짜·시각 데이터 형에 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'; • 범위 검색(BETWEEN 연산자) 예제 21 2001-050-31 00:00:00.000 <= DueDate <= 2001-06-14 00:00:00.000

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

More Related