1 / 40

기초 SQL 문

기초 SQL 문. SELECT 문과 같은 데이터베이스 조회 명령문을 이해한다 . INSERT, UPDATE, DELETE 문과 같은 데이터베이스 수정 명령문을 이해한다. 1. 데이터베이스 조회 명령문 2. 데이터베이스 수정 명령문. 데이터베이스 조회 명령문 >> SELECT 문 개요 ■ 개념과 작동 원리. ■ 구문 ● BNF(Backus Normal Form) : 프로그래밍 언어의 구문을 정의하는데 많이 사용되는 표기법. 구성 요소. 설명. ::=.

xenia
Download Presentation

기초 SQL 문

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. 기초 SQL 문 SELECT 문과 같은 데이터베이스 조회 명령문을 이해한다. INSERT, UPDATE, DELETE 문과 같은 데이터베이스 수정 명령문을 이해한다.

  2. 1. 데이터베이스 조회 명령문 • 2. 데이터베이스 수정 명령문

  3. 데이터베이스 조회 명령문>>SELECT 문 개요 • ■ 개념과 작동 원리 ■ 구문 ● BNF(Backus Normal Form) : 프로그래밍 언어의 구문을 정의하는데 많이 사용되는 표기법

  4. 구성 요소 설명 ::= 왼쪽의 항목은 오른쪽과 같이 정의된다. <element> 다른 곳에 정의되어 있는 항목. [ ] 생략 가능하다. { ... | ... } 여러 항목 중에서 하나를 선택할 수 있다. ...n 여러 번 반복될 수 있다. name, expression 이름, 연산식 등으로 대치시킬 곳. • 데이터베이스 조회 명령문>>SELECT 문 개요 • ●중요한 BNF 구성 요소들 ●오라클에서의 그래픽한 SQL 구문 표시

  5. 데이터베이스 조회 명령문>>SELECT 문 개요 • ●SELECT 문의 구문(BNF) • SELECT statement ::= • < query_expression > • [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } • [ ,...n ] ] • [ COMPUTE • { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] • [ BY expression [ ,...n ]] • ] • [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } • [ , XMLDATA ] • [ , ELEMENTS ] • [ , BINARY BASE64 ] • } • ] • 계속..

  6. 데이터베이스 조회 명령문>>SELECT 문 개요 • 계속.. • [ OPTION ( < query_hint > [ ,...n ]) ] • < query expression > ::= • { < query specification > | ( < query expression > ) } • [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ] • < query specification > ::= • SELECT [ ALL | DISTINCT ] • [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] • < select_list > • [ INTO new_table ] • [ FROM { < table_source > } [ ,...n ] ] • [ WHERE < search_condition > ] • [ GROUP BY [ ALL ] group_by_expression [ ,...n ] • [ WITH { CUBE | ROLLUP } ] • ] • [ HAVING < search_condition > ]

  7. 데이터베이스 조회 명령문>>열 제약 조건 ■ SELECT 문을 사용할 때 열을 제약하는 각종 조건 ■ 모든 열(*) ●가장 단순한 형태의 SELECT 문 USE pubs SELECT * FROM stores ● 행과 열 제약이 전혀 없는 가장 기초적인 조회문으로서, 간단히 데이터를 테스트하거나 테이블 내의 데이터 전체를 결과 집합으로 필요로 할 때 많이 사용함 ● 현재 데이터베이스와 USE 문

  8. 데이터베이스 조회 명령문>>열 제약 조건 ■ 열 목록 ● 특정 열들의 목록을 지정 SELECT stor_id, stor_name, stor_address, city,state, zip FROM stores ● (정의한) 순서대로, 또 모두 나열할 필요는 없음 SELECT stor_id, zip, state, city, stor_address FROM stores

  9. 데이터베이스 조회 명령문>>열 제약 조건 ■ 열 별칭 지정 ●column AS alias SELECT stor_id AS '서점 ID', zip AS 우편번호, state AS 주, city AS 시, stor_address AS '서점 주소' FROM stores ● column alias: 첫 번째 방법에서 AS를 생략한 방법 SELECT stor_id '서점 ID', zip 우편번호, state 주, city 시, stor_address '서점 주소' FROM stores ● alias = column : 열 이름과 별칭의 위치가 서로 바뀌고, 가운데 ‘=’연산자가 들어가는 방법 SELECT UnitPrice, Quantity, Discount, total_price = UnitPrice * Quantity * (1 - Discount) FROM [Order Details]

  10. 데이터베이스 조회 명령문>>열 제약 조건 ■ 상수 열 ● 테이블 열 값 대신 모든 레코드에 동일한 상수 값을 출력하는 열 ● 문자 상수 열 SELECT UnitPrice AS '단가', Quantity AS '수량', Discount AS '할인율', '합계:', UnitPrice * Quantity * (1 - Discount) FROM [Order Details] ●숫자 상수 열 SELECT 7 AS Lucky, firstname, lastname FROM employees

  11. 데이터베이스 조회 명령문>>열 제약 조건 ● FROM 절이 없는 SELECT 문 SELECT 'Lucky', 7, '참 좋다' ●변수 열을 사용하여 인위적으로 결과 집합을 만드는 경우 DECLARE @var1 int, @var2 int /* 아래 할당문과 비슷한 처리를 한다고 가정함 */ SET @var1 = 1 SET @var2 = 2 SELECT @var1 AS '인위적인', @var2 AS '결과 집합'

  12. 연산자 설명 = 같다. > 크다. < 작다. >= 크거나 같다. <= 작거나 같다. <> 같지 않다. 데이터베이스 조회 명령문>>행 제약 조건 ■ WHERE 절에서 행을 제약하는 각종 조건들 ■ 비교 연산자 ● [예 1] = 비교 연산자 USE Pubs SELECT * FROM stores WHERE stor_id = '7896' ● [예 2] <= 비교 연산자 SELECT * FROM titleauthor WHERE royaltyper <= 30

  13. 연산자 설명 NOT ~ 연산식이 FALSE이면 TRUE를 돌려줌(즉, 부정) ~ AND ~ 양쪽의 연산식을 둘 다 만족하면 TRUE를 돌려줌 ~ OR ~ 양쪽의 연산식 중 하나만 만족하면 TRUE를 돌려줌 데이터베이스 조회 명령문>>행 제약 조건 ■ 논리 연산자 ● 연산식들을 논리적으로 결합하는 연산자 ● 우선순위: NOT → AND → OR ● 결합 순서를 바꾸려면 “( )”로 둘러싸 주어야 함

  14. 데이터베이스 조회 명령문>>행 제약 조건 ● [예1] 논리 연산자들의 단순한 결합(연산자 우선순위 적용) : 결합 순서는 NOT → AND → OR 순 SELECT * FROM titleauthor WHERE NOT au_id = '213-46-8915' AND title_id = 'BU1032' OR royaltyper = 40 ● [예2] “( )”로 논리 연산자들의 결합 순서를 바꿈 : 결합 순서는 OR → AND → NOT 순 SELECT * FROM titleauthor WHERE NOT ( au_id = '213-46-8915' AND ( title_id = 'BU1032' OR royaltyper = 40 ) )

  15. 와일드카드 문자 설명 % 문자가 0개 이상인 문자열 _ (밑줄) 단일 문자 [ ] 지정된 범위([a-f]) 또는 집합([abcdef])에 있는 단일 문자 [^] 지정된 범위([^a-f]) 또는 집합([^abcdef])에 없는 단일 문자 데이터베이스 조회 명령문>>행 제약 조건 ■ 문자열 패턴 매칭(LIKE 연산자) ● LIKE 연산자는 문자열 패턴 매칭(pattern matching)을 해 주는 연산자로서, 소량의 문자열 검색에 많이 사용함 ● 구문: match_expression LIKE pattern match_expression에는 주로 열 또는 변수 이름이 오고, pattern에는 와일드카드 문자가 포함된 문자열 상수가 옴 ● 와일드카드 문자

  16. 데이터베이스 조회 명령문>>행 제약 조건 ● [예1] SELECT au_lname, au_fname, phone FROM authors WHERE au_lname LIKE '%[CKR]a%' ORDER BY au_lname ASC ● LIKE 연산자는 대량의 문자열 검색에는 부적합하며(많은 시간이 소요되므로), 이 경우에는 전체 텍스트 검색이 권장됨(“10장. 인덱스와 전체 텍스트 검색” 참고).

  17. 데이터베이스 조회 명령문>>행 제약 조건 ■ 범위 검색(BETWEEN 연산자) ● 최소 값과 최대 값 사이의 범위에 들어가는지 여부를 파악 ● 최소 값과 최대 값도 범위에 포함됨 ● 구문: range_expression BETWEEN min_value AND max_value range_expression에는 주로 열 또는 변수 이름이 옴 ● BETWEEN 연산자를 사용하는 것이 더 효율적 range_expression >= min_value AND range_expression <= max_value ● range_expression은 정수 데이터 형을 많이 사용하는데, 문자 또는 날짜·시각 데이터 형도 간혹 사용한다. ● 주의: 날짜·시각 데이터 형에서는 자정을 기준으로 최소 값 또는 최대 값 날짜의 포함 여부를 결정하므로 해야 함

  18. 데이터베이스 조회 명령문>>행 제약 조건 ● [예1] 정수 데이터 형에 적용: SELECT * FROM titleauthor WHERE royaltyper BETWEEN 30 AND 40 ● [예2] 문자 데이터 형에 적용: SELECT * FROM titleauthor WHERE title_id BETWEEN 'BU1032' AND 'BU2075' ● [예3] 날짜·시각 데이터 형에 적용: 만약 ord_date가 ‘1994-09-13 12:34:00.000’라면 결과 집합에서 제외됨(9월 13일 0시부터 0시까지만(24시까지가 아님!) 범위에 포함되기 때문이다). SELECT * FROM sales WHERE ord_date BETWEEN '9/13/1994' AND '9/13/1994'

  19. 데이터베이스 조회 명령문>>행 제약 조건 ■ 목록 검색(IN 연산자) ● 목록 안의 값 중 하나와 일치하는지 여부를 파악하는데 사용 ● 구문: list_expression IN ( value_list ) ▸ list_expression에는 주로 열 또는 변수 이름이 온다. ▸ value_list에는 보통, 쉼표로 구분된 상수 값들이 온다. (예) col IN (1, 2, 4, 9) ▸ value_list에 서브 쿼리가 올 수도 있고, 실제로 많이 사용한다(11장 참고). ● [예1] IN 연산자 사용 SELECT * FROM stores WHERE state IN ('CA', 'OR', 'WA') ● [예2] 비교 및 논리 연산자 사용 : 예1보다 훨씬 더 비효율적 SELECT * FROM stores WHERE state = 'CA' OR state = 'OR' OR state = 'WA'

  20. 데이터베이스 조회 명령문>>행 제약 조건 데이터베이스 조회 명령문>>행 제약 조건 ■ NULL 비교(IS 연산자) ● NULL: 값이 없는 상태. 숫자 데이터 형의 0도 아니고, 문자 데이터 형의 공백(‘’)이나 빈 문자(‘’)도 아님. ● 주의: NULL을 일반적인 연산자와 같이 사용하면, 결과는 항상 NULL이 됨 NULL에 대한 연산을 하기 위해서는 특수한 연산자 IS 또는 IS NOT만 사용해야 함 ● [예1] NULL을 포함한 데이터 확인 : Price 열 값이 NULL인 행이 2개 있음(NULL이 아닌 행은 16개) SELECT Title, Price FROM Titles ● [예2] = NULL로 비교: 0개 행으로 결과가 나오는 것은 NULL을 =로 비교할 때 무조건 실패하기 때문 SELECT Title, Price FROM Titles WHERE Price = NULL

  21. 데이터베이스 조회 명령문>>행 제약 조건 ■ NULL 비교(IS 연산자) ● [예3] <> NULL로 비교: 0개 행으로 결과가 나오는 것은 NULL을 <>로 비교할 때도 무조건 실패하기 때문 SELECT Title, Price FROM Titles WHERE Price <> NULL ● [예4] IS NULL로 비교: 정확한 결과가 나옴 SELECT Title, Price FROM Titles WHERE Price IS NULL ● [예5] IS NOT NULL로 비교 : 정확한 결과가 나옴 SELECT Title, Price SELECT Title, Price FROM Titles WHERE Price IS NOT NULL

  22. 데이터베이스 조회 명령문>>결과 집합 명령 ■ 행 정렬(ORDER BY 절) ● 인덱스가 없다면 기본적으로 데이터는 행이 삽입된 순서대로 출력됨 ● 행들을 특정 열(들)을 기준으로 정렬하고자 할 때 ORDER BY 절을 사용 ● 구문: ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n] ] ▸ order_by_expression은 정렬할 열을 지정한다. 열의 형식은 열 이름 또는 그 별칭, 연산식 또는 그 별칭, 위치를 나타내는 정수 등으로 지정할 수 있다. ▸ ASC는 오름차순 정렬을, DESC는 내림차순 정렬을 지정하는 키워드다. 기본적으로 오름차순이므로 ASC는 생략해도 무관하다. ASC나 DESC는 하나의 열에만 적용된다. ▸ order_by_expression이 여러 개 나올 때는 첫 번째 것이 1차 정렬 키, 두 번째 것이 2차 정렬 키 등과 같이 적용된다.

  23. 데이터베이스 조회 명령문>>결과 집합 명령 ● [예1] 열 이름으로 정렬 SELECT royaltyper, title_id, au_id FROM titleauthor WHERE au_id <= '472-27-2349' ORDER BY royaltyper DESC, title_id ● [예2] 위치를 나타내는 정수로 정렬 : ORDER BY 절의 1은 열 목록의 첫 번째 열인 royaltyper를 가리키고, 2는 두 번째 열인 title_id를 가리킴(실행 결과는 같음) SELECT royaltyper, title_id, au_id FROM titleauthor WHERE au_id <= '472-27-2349' ORDER BY 1 DESC, 2

  24. 데이터베이스 조회 명령문>>결과 집합 명령 ■ 중복 행 제거(DISTINCT) ● 결과 집합에 중복된 레코드들을 하나씩만 나타나게 하려면 열 목록에 DISTINCT를 사용하면 됨 ● 구문: DISTINCT column [ ,...n] ● column(열)이 여러 개 있을 때는 모든 열을 조합한 값이 중복되지 않도록 해 줌 DISTINCT가 포함된 SELECT 문에 ORDER BY 절이 있을 경우에는 정렬하는 열들이 열 목록에 반드시 나타나야 함 ● [예1] 열 하나에 적용 SELECT DISTINCT state FROM stores

  25. 데이터베이스 수정 명령문>>INSERT 문 기초 ■ 개념 ● INSERT 문은 테이블에 한 행을 삽입하는 명령문 ● 구문: INSERT [INTO] table_name ( column_list ) VALUES ( value_list ) ▸ INSERT와 table_name 사이의 키워드 INTO는 생략할 수 있다. ▸ column_list는 쉼표로 구분된 하나 이상의 열들의 목록을 가리킨다. (예) col1, col2, ... ▸ value_list는 쉼표로 구분된 하나 이상의 값들의 목록을 가리킨다. (예) val1, val2, ... ▸ value_list의 각각의 값은 같은 위치의 열에 할당된다. ▸ 값은 숫자 상수, 문자열 상수, 연산식, 키워드(DEFAULT) 등이 될 수 있다.

  26. 데이터베이스 수정 명령문>>INSERT 문 기초 ■ 작동 원리 ● INSERT 문의 실행이 성공하면, 위 그림처럼 기본적으로 테이블의 마지막 행 뒤에 새로운 행이 삽입됨

  27. 데이터베이스 수정 명령문>>INSERT 문 기초 ● INSERT 문이 실패하면 행 삽입은 취소됨 ● 테이블에 클러스터 인덱스가 있을 경우에는 기존의 행들 사이에 삽입될 수도 있음 ● 기본적인 INSERT 문은 반드시 한 행에 대해서 적용(한꺼번에 여러 행을 삽입할 수 없다) ●기본적인 INSERT 문은 행 전체에 대해 적용(한 행의 일부분만 삽입할 수는 없다) ■ 기본 예 USE pubs INSERT stores ( stor_id, stor_name, stor_address, city, state, zip ) VALUES ( '9001', 'Book Baron', '1236 S. Magnolia Ave.', 'Anaheim', 'CA', '92804' )

  28. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ 열 순서 변경 ● 삽입할 때 열들의 순서를 바꿈 INSERT stores ( zip, state, city, stor_address, stor_name, stor_id ) VALUES ( '94705', 'CA', 'Berkeley', '2904 College Ave.', 'Avenue Books', '9002' ) ●삽입된 행을 조회 SELECT * FROM stores WHERE stor_id = '9002' ●바뀐 열과 값의 순서는 반드시 서로 일치해야 함

  29. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ 열 생략 ● 예: INSERT stores ( stor_id ) VALUES ( '9003' ) ●방금 삽입된 행 조회 SELECT * FROM stores WHERE stor_id = '9003' ●주의: 아무 열이나 생략할 수는 없음. NULL이 허용되지 않고(NOT NULL), 기본값(DEFAULT)도 정의되어 있지 않는 열을 생략하면 오류가 발생함

  30. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ 값으로 DEFAULT 사용 ● 값 목록에서 특정 값 대신에 키워드 “DEFAULT”를 지정 → 해당 열에는 기본값 또는 NULL이 삽입됨 ● 예: INSERT employee ( emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date ) VALUES ( 'ZZZ12345M', 'Irum', DEFAULT, 'Seong', DEFAULT, DEFAULT, DEFAULT, DEFAULT ) ●방금 삽입된 행 조회 SELECT * FROM employee WHERE emp_id = 'ZZZ12345M'

  31. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ 값으로 NULL 사용 ● 값 목록에서 NULL을 지정하면 기본값이 정의되어 있더라도 무조건 NULL이 삽입됨 ● 예: INSERT publishers ( pub_id, pub_name, city, state, country ) VALUES ( '9911', 'Bad Publisher', 'L.A.', 'CA', NULL ) SELECT * FROM publishers WHERE pub_id = '9911' ● NULL 대신에 DEFAULT를 사용해서 삽입 SELECT * INSERT publishers ( pub_id, pub_name, city, state, country ) VALUES ( '9912', 'Good Publisher', 'L.A.', 'CA', DEFAULT ) SELECT * FROM publishers WHERE pub_id = '9912'

  32. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ 값으로 NULL 사용 ● 값 목록에서 NULL을 지정하면 기본값이 정의되어 있더라도 NULL이 삽입됨 ● 예: INSERT publishers ( pub_id, pub_name, city, state, country ) VALUES ( '9911', 'Bad Publisher', 'L.A.', 'CA', NULL ) SELECT * FROM publishers WHERE pub_id = '9911' ● NULL 대신에 DEFAULT를 사용해서 삽입 SELECT * INSERT publishers ( pub_id, pub_name, city, state, country ) VALUES ( '9912', 'Good Publisher', 'L.A.', 'CA', DEFAULT ) SELECT * FROM publishers WHERE pub_id = '9912'

  33. 데이터베이스 수정 명령문>>INSERT 문 활용 ■ DEFAULT VALUES 절 ● 모든 열에 “DEFAULT”를 적용하고자 할 경우 ● 예: USE Northwind INSERT Orders DEFAULT VALUES ●방금 삽입된 행 조회 SELECT * FROM Orders WHERE OrderID = @@IDENTITY

  34. 데이터베이스 수정 명령문>>UPDATE 문 기초 ■ 개념 ● UPDATE 문은 테이블의 하나 이상의 열을 갱신하는 명령문 ● 구문: UPDATE table_name SET column1 = value1 [ , column2 = value2, ... ] [ WHERE search_condition ] ▸ columni = valuei쌍은 필요한 만큼 반복될 수 있음(쌍들 사이는 ‘,’로 구분). ▸ WHERE 절(WHERE search_condition)은 생략할 수도 있지만, 이 경우 모든 행을 일괄적으로 갱신해 버리므로 주의해야 함(따라서 대부분의 경우에 WHERE 절을 사용함).

  35. 데이터베이스 수정 명령문>>UPDATE 문 기초 ■ 작동 원리

  36. 데이터베이스 수정 명령문>>UPDATE 문 활용 ■ 기본 예 USE pubs SELECT * FROM roysched WHERE title_id = 'BU1032' UPDATE roysched SET royalty = 8 WHERE title_id = 'BU1032' SELECT * FROM roysched WHERE title_id = 'BU1032'

  37. 데이터베이스 수정 명령문>>UPDATE 문 활용 ■ 값으로 DEFAULT 사용 ● 해당되는 열의 값을 기본값 또는 NULL로 갱신 ● 예 SELECT country FROM publishers WHERE pub_id = '9911' UPDATE publishers SET country = DEFAULT WHERE pub_id = '9911' SELECT country FROM publishers WHERE pub_id = '9911'

  38. 데이터베이스 수정 명령문>>DELETE 문 ■ 개념 ● 테이블의 하나 이상의 열을 삭제하는 명령문 ● 구문: DELETE [FROM] table_name [ WHERE search_condition ] ▸ DELETE와 table_name 사이의 키워드 INTO는 생략할 수 있음 ▸ WHERE 절(WHERE search_condition)은 생략할 수도 있지만, 이 경우 모든 행을 일괄적으로 삭제해 버리므로 주의해야 함(따라서 대부분의 경우에 WHERE 절을 사용함).

  39. 데이터베이스 수정 명령문>>DELETE 문 ■ 작동 원리 ● DELETE 문이 실행되면 WHERE 절에서 지정한 해당 행 전체가 삭제됨 ● WHERE 절을 만족하지 않으면 삭제는 발생하지 않으며, 만족할 경우에는 하나 또는 그 이상의 행이 삭제됨 ● DELETE 문은 행 단위로 적용되며, 행의 일부만 삭제할 수는 없음

  40. 데이터베이스 수정 명령문>>DELETE 문 ■ 기본 예 ● 가장 기본적인 DELETE 문의 실행 예: DELETE stores WHERE stor_id = '9001' ▸ stores 테이블에서 stor_id가 '9001'인 행을 모두 삭제함 ▸ stor_id는 주 키이고 값이 '9001'인 행이 있으므로, 실제로 한 행만 삭제됨

More Related