05 Chapter SQL SELECT SELECT BNF SELECT statement
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 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 BASE 64 ] } ] 계속. .
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 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 > ]
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 열 제약 조건 ■ 열 목록 ● 특정 열들의 목록을 지정 SELECT stor_id, stor_name, stor_address, city, state, zip FROM stores ● (정의한) 순서대로, 또 모두 나열할 필요는 없음 SELECT stor_id, zip, state, city, stor_address FROM stores
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 열 제약 조건 ■ 열 별칭 지정 ● 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 Unit. Price, Quantity, Discount, total_price = Unit. Price * Quantity * (1 - Discount) FROM [Order Details]
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 행 제약 조건 ● [예1] 논리 연산자들의 단순한 결합(연산자 우선순위 적용) : 결합 순서는 NOT → AND → OR 순 SELECT * FROM titleauthor WHERE NOT au_id = '213 -46 -8915' AND title_id = 'BU 1032' OR royaltyper = 40 ● [예2] “( )”로 논리 연산자들의 결합 순서를 바꿈 : 결합 순서는 OR → AND → NOT 순 SELECT * FROM titleauthor WHERE NOT ( au_id = '213 -46 -8915' AND ( title_id = 'BU 1032' OR royaltyper = 40 ) )
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 행 제약 조건 ● [예1] 정수 데이터 형에 적용: SELECT * FROM titleauthor WHERE royaltyper BETWEEN 30 AND 40 ● [예2] 문자 데이터 형에 적용: SELECT * FROM titleauthor WHERE title_id BETWEEN 'BU 1032' AND 'BU 2075' ● [예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'
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 행 제약 조건 ■ 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 FROM Titles WHERE Price IS NOT NULL
05 Chapter 기초 SQL 문 데이터베이스 조회 명령문>> 결과 집합 명 령 ● [예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
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> 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' ● 바뀐 열과 값의 순서는 반드시 서로 일치해야 함
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> INSERT 문 활 용 ■ 값으로 DEFAULT 사용 ● 값 목록에서 특정 값 대신에 키워드 “DEFAULT”를 지정 → 해당 열에는 기본값 또는 NULL이 삽입됨 ● 예: INSERT employee ( emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date ) VALUES ( 'ZZZ 12345 M', 'Irum', DEFAULT, 'Seong', DEFAULT, DEFAULT ) ● 방금 삽입된 행 조회 SELECT * FROM employee WHERE emp_id = 'ZZZ 12345 M'
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> 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'
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> 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'
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> INSERT 문 활 용 ■ DEFAULT VALUES 절 ● 모든 열에 “DEFAULT”를 적용하고자 할 경우 ● 예: USE Northwind INSERT Orders DEFAULT VALUES ● 방금 삽입된 행 조회 SELECT * FROM Orders WHERE Order. ID = @@IDENTITY
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> UPDATE 문 활 용 ■ 기본 예 USE pubs SELECT * FROM roysched WHERE title_id = 'BU 1032' UPDATE roysched SET royalty = 8 WHERE title_id = 'BU 1032' SELECT * FROM roysched WHERE title_id = 'BU 1032'
05 Chapter 기초 SQL 문 데이터베이스 수정 명령문>> 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'
- Slides: 40