230 likes | 430 Views
Database 관리론. Select 문 기초. 기본적인 Select 문 변수 자료형( data type). 한양대학교 경상대학 경영학부 백 동 현 교수. SELECT 문의 일반 구문. SELECT [ALL | DISTINCT] 열리스트 [ INTO 새로운 테이블] FROM 테이블 리스트 (또는 뷰 리스트) [ WHERE 검색조건] [ GROUP BY 열리스트 [ HAVING 조건]] [ ORDER BY 열리스트 [ ASC|DESC]]. 대괄호( [ ] )는 생략 가능한 항목
E N D
Database 관리론 Select문 기초 • 기본적인 Select문 • 변수 • 자료형(data type) 한양대학교 경상대학 경영학부 백 동 현 교수 1
SELECT문의 일반 구문 SELECT [ALL | DISTINCT] 열리스트 [INTO새로운 테이블] FROM테이블 리스트 (또는 뷰 리스트) [WHERE검색조건] [GROUP BY열리스트 [HAVING조건]] [ORDER BY열리스트 [ASC|DESC]] 대괄호( [ ] )는 생략 가능한 항목 중괄호 ( { } )는 필수 항목. 중괄호 안의 항목은 반드시 지정해야 한다 대괄호와 중괄호 안의 세로막대 ( | ) 는 괄호 안에서 구분된 항목 중 무엇인가를 선택하는 것을 의미 꺽쇠 ( < > )는 사용자 지정항목을 나타냄 2
열(컬럼)에 대한 처리 • 테이블의 모든 열 취득(*) • SELECT * FROM titles 같이 한 줄로 • 써도 동일한 결과 • 대소문자 구분 없음 SELECT *FROM titles • 일부 열만 가져오기 테이블의 열 확인 방법 EXEC sp_help titles 또는 EXEC sp_columns titles SELECT title_id, title, price, pub_idFROM titles • 열 순서 바꾸기 Select절에 올 수 있는 것 - The asterisk symbol (*), which specifies all columns of the named tables in the FROM clause - The explicit specification of column names to be retrieved. - An expression - A system or an aggregate function SELECT title_id, pub_id, price, titleFROM titles 3
열(컬럼)에 대한 처리 • 임의의 컬럼 만들기 SELECT ‘책 번호: ‘, title_id, pub_id, price, titleFROM titles • 열 제목 바꾸기 SELECT title_id AS Title_no, pub_id AS [출판사 번호], price, title AS책제목 FROM titles • 열 제목을 별도로 지정하지 않으면 테이블의 열 이름 사용 • 빈칸이나 특수문자가 있으면 [ ] (대괄호) 사용 주석 처리 문장 앞에 – (하이픈 두개) 또는 /* SQL문장 */ 4
변수 변수선언 DECLARE @변수명 자료명 [, @변수명 자료명,.. ] - 변수명 앞에 항상 @ 하나가 온다 (사용자변수) - @@변수명은 시스템 함수로 사용자가 선언하거나 값을 대입할 수 없다 값 설정 SET @변수명 = 값 출력 SELECT @변수명 예 DECLARE @id INT, @name CHAR(10) SET @id=0 SET @name=‘윤석빈’ SELECT @id, @name 5
자료형 (Data Type) • 시스템 자료형 (System Data Type) : 시스템에서 제공 7
자료형 (Data Type) • 시스템 자료형 (계속) 8
자료형 (Data Type) • 사용자 정의 자료형 (User Defined Data Type) • 사용자가 새로운 자료형을 정의하여 사용할 수 있다. 사용자정의 자료형 생성 sp_addtype <새로운 자료형 이름>, ‘<시스템 자료형>’ 예) sp_addtype tProdID, ‘char(6)’ sp_addtype tEmpNo, ‘Char(5)’ sp_addtype tPrice, int • Sp_addtype을 실행하면 사용자 정의 자료형이 systypes라는 시스템 테이블에 추가된다 • 시스템 자료형에 괄호나 공백이 없으면 작은 따옴표 생략 가능 삭제 sp_droptype <삭제할 자료형 이름> 예) sp_droptype tProdID 9
SELECT에서 자료형 바꾸기 SELECT title_id as Title_no, pub_id as ‘출판사 번호’ , price, convert(char(30), title) as ‘줄인 제목’FROM titles SELECT title_id as Title_no, pub_id as ‘출판사 번호’ , price, substring(title, 1, 30) as ‘줄인 제목’FROM titles SELECT title_id as Title_no, pub_id as ‘출판사 번호’ , price*1.1 as ‘가격(부가세 포함)’, , substring(title, 1, 30) as ‘줄인 제목’FROM titles 10
SELECT에서 자료형 바꾸기 • 자료형 바꾸기 CONVERT( ) Syntax CONVERT (datatype[(length)], expression [, style]) 예) SELECT CONVERT(int, ’32.2’) –오류발생 SELECT CONVERT(int, ’32’) SELECT CONVERT(varchar(5), 32.2) SELECT CONVERT(float, 32) • 숫자에 대한 연산자 Syntax (+, -), (%, *, /), ( ) (SELECT 10/4+10%3*5의 결과는 ? = 7) 연산우선순위 높음 %는 나머지 값 반환 (SELECT 32%5 2) 11
SELECT에서 자료형 바꾸기 • 숫자에 대한 산술적 연산함수 –p.85참조 종류 ABS(x), SIGN(x), ACOS(x), ASIN(x), ATAN(x), ATN2(x), COS(x), SIN(x), COT(x), TAN(x), DEGREES(x), EXP(x), LOG9x), LOG10(x), RADIANS(x), POWER(x, y), SQUARE(x), SQRT(x), PI(), CEILING(x), FLOOR(x), RAND(x), ROUND(x,y) 예) SELECT CEILING(29.9), CEILING(29.1) -- 크거나 같은 최소 정수 SELECT FLOOR(29.9), CEILING(29.1) -- 작거나 같은 최대의 정수 SELECT ROUND(29.945, 0), ROUND(29.945, 1), ROUND(29.945, 2) -- 소수점 y자리가 되도록 반올림 12
SELECT에서 자료형 바꾸기 • 문자에 대한 함수 –p.86참조 종류 +, ASCII, CHAR, CHARINDEX, DIFFERENCE, LEFT, LEN, LPWER, LTRIM, NCHAR, PATINDEX, REPLACE, QUOTENAME, REPLICATE, REVERSE, RIGHT, RTRIM, SOUNDEX, SPACE, STR, STUFF, SUBSTRING, UNICODE, UPPER • 날짜에 대한 함수 –p.88참조 종류 GETDATE, DATEADD, DATEDIFF, DATENAME, DATEPART, DAY, MONTH, YEAR SELECT GETDATE() SELECT DATEPART(mm, GETDATE()) SELECT DATEADD(mm, 20, GETDATE()) SELECT DATEADD(dd, 100, GETDATE()) SELECT DATEDIFF(dd, GETDATE(), ‘3000.1.1’) SELECT DATENAME(dw, GETDATE()), DATENAME(mm, GETDATE()) – SELETDATEPART(dw, GETDATE())와 비교 13
SELECT에서 자료형 바꾸기 • 시스템 함수 –p.91참조 종류 APP_NAME, COALESCE, CURRENT_USER, COL_NAME, COL_LENGTH DATALENGTH, DB_ID, DB_NAME, fn_helpcollations, FORMATMESSAGE, GETANSINULL, HOST_ID, HOST_NAME, IDENT_CURRENT, IDENT_INCR, IDENT_SEED, INDEX_COL, ISDATE, ISNULL, ISNUMERIC, NULLIF, OBJECT_ID, OBJECT_NAME, PARSENAME, PERMISSIONS, SERVERPROPERTY, STATS_DATE • 보안 함수 –p.93참조 종류 HAS_DBACCESS, IS_MEMBER, IS_SRVROLEMEMBER, SUSER_ID, SUSER_NAME, SUSER_SID, SUSER_SNAME, USER_ID, USER, USER_NAME 14
행에 대한 처리 비교연산자 = 같음 <> 같지 않음(!=) > 큼 >=크거나 같음 < 작음 <=작거나 같음 • 조건에 맞는 행 가져오기 SELECT title_id, qtyFROM sales WHERE qty>=20 SELECT title_id, qtyFROM sales WHERE title_id=‘PS7777’ 논리연산자 AND 그리고 OR 또는 NOT 부정 SELECT title_id, qtyFROM sales WHERE qty>=20 and title_id=‘PS7777’ NULL연산자 IS [NOT] NULL =NULL <>NULL SELECT title_id, titleFROM titles WHERE price is NULL ‘=NULL’또는 ‘<>NULL” 연산자가 error 가 생기면 Set ANSI_NULLS off 로 모드 변경하면 됨 (다시 원래대로 하려면 Set ANSI_NULLS on) 15
행에 대한 처리 • 정렬 (ORDER BY구) 특정 열에 대해 오름차순(ASC) 또는 내림차순(DESC)으로 정렬 qty의 내림차순으로 정렬하라 (ASC, DESC를 지정하지 않으면 디폴트로 오름차순(ASC)이 된다) SELECT title_id, qtyFROM sales ORDER BY qty DESC Title_id에 대해 오름차순으로 정렬하라. title_id가 같은 경우에는 qty에 대한 오름차순으로 정렬하라. SELECT title_id, qtyFROM sales ORDER BY title_id, qty SELECT title_id, qtyFROM sales ORDER BY title_id, qty DESC Title_id에 대해 오름차순으로 정렬하라. title_id가 같은 경우에는 qty에 대한 내림차순으로 정렬하라. 16
행에 대한 처리 • 몇 개만 가져오기 (TOP n 구) 전체 행 중 일부 행만 가져오는 경우 상위 6개 행만 가져오기 (테이블에 저장되어 있는 순서대로 가져옴) SELECT TOP 6 title_id, qtyFROM sales 판매량이 많은 것 기준으로 상위 6개 가져오기 (6개 행) SELECT TOP 6 title_id, qtyFROM sales ORDER BY qty DESC 판매량이 많은 것 기준으로 상위 6개를 가져오되 같은 순위의 것은 모두 가져오기 (6개 행 이상 가능) SELECT TOP 6 with TIES title_id, qtyFROM sales ORDER BY qty DESC 판매량이 많은 것 기준으로 상위 25% 가져오기 SELECT TOP 25 PERCENTtitle_id, qtyFROM sales ORDER BY qty DESC SELECT TOP 25 PERCENTWITH TIES title_id, qtyFROM sales ORDER BY qty DESC 판매량이 많은 것 기준으로 상위 25% 가져오되 같은 순위의 것은 모두 가져오기 17
행에 대한 처리 • 범위를 이용한 검색 (BETWEEN) <열이름> BETWEEN 값1 AND 값2 열의 값이 값1과 값2에 포함되면 조건 만족 판매량이 10과 20사이에 있는 것을 검색하라 (아래 두 SQL문은 동일한 결과 나옴) select title_id, qty from sales where qty between 10 and 20 order by qty 자주하는 실수 qty>=10 and <=20 (비교연산자 좌우에는 각각 완성된 비교식이 와야 한다) select title_id, qty from sales where qty>=10 and qty<=20 order by qty 18
행에 대한 처리 • 목록을 이용한 검색 (IN) <열이름> IN (값1, 값2, 값3, ……) 열의 값이 지정된 리스트 중의 어느 하나와 같으면 조건 만족 title_id가 BU1032, BU1111, MC3021 인 것들을 가져오기 (아래 두 SQL문은 동일한 결과 나옴) select title_id, qty from sales where title_id in (‘BU1032’, ‘BU1111’, ‘MC3021’) select title_id, qty from sales Where title_id=‘BU1032’ or title_id=‘BU1111’ or title_id=‘MC3021’ 19
행에 대한 처리 • 문자열/LIKE와 패턴매칭 [와이드카드의 종류] [사례] 20
행에 대한 처리 • 문자열/LIKE와 패턴매칭 computer가 제목에 있는 모든 책의 책 번호와 제목을 출력하시오 Select title_id, title From titles Where title LIKE‘%computer%’ 책 제목이 computer로 시작하는 모든 책의 책 번호와 제목을 출력하시오 Select title_id, title From titles Where title LIKE‘computer%’ [참고] PATINDEX는 해당 패턴이 다음 문자열의 어느 위치에 있는지 알려 준다. 결과가 0이면 해당 패턴 없음 Select PATINDEX(‘%Mi%’, ‘James Mike’) --7 • Select PATINDEX(‘M[^c]%’, ‘McAthur’) --0 • Select PATINDEX ‘M[^c]%’, ‘Mike’) --1 • Select PATINDEX(‘M[^c]%’, ‘M’) --0 21
행에 대한 처리 • 중복된 행 제거하기 (DISTINCT) 결과에서 중복된 행을 제거하여 검색경우 판매된 모든 책의 책 번호 보기 (21건 검색) 같이 title_id 중복해서 나타남 SELECT title_idFROM sales Order by title_id 결과비교 SELECT DISTINCT title_idFROM sales Order by title_id 판매된 모든 책의 책 번호를 중복없이 보기(16건 검색) 22
H/W) • 유인물 따라 하기 • 함수 실습하기 (p.85~94) • 따라 하기 (p.65~68, p.72~74, p.105~111) • 다음 주 수업시간 중 Quiz 볼 것임 23