UNION, UNION ALL, EXCEPT, INTERSECT - UNION은 두 쿼리의 결과를 행으로 합치는 것 ㄴ단, 두 문장의 결과열 개수가 같아야 하고, 데이터 형식도 각 열 단위로 같거나 호환되는 형식이어야 함 - UNION의 형식 : SELECT 문장 UNION [ALL] SELECT 문장 - UNION 만 사용하면 중복된 열은 제거가 되며, UNION ALL을 사용하면 중복된 열 포함된다.
|
SELECT * FROM userTbl UNION ALL SELECT * FROM buyTbl;
오류내용 : UNION, INTERSECT 또는 EXCEPT 연산자를 사용하여 결합된 모든 쿼리의 대상 목록에는 동일한 개수의 식이 있어야 합니다.
SELECT userid, name FROM userTbl UNION ALL SELECT userid, prodname FROM buyTbl;
IF …. ELSE … - 조건에 따라 분기한다. 이중 분기 - 한 문장 이상이 처리되어야 할 때는 BEGIN … END로 묶어준다. - 부울 표현식 부분이 참이면 SQL 문장들 1을 수행하고, 거짓 이면 SQL 문장들2 를 수행.
|
AdventureWorks DB의 HUmanResources.Employee 테이블의 입사일 (HireDate) 열 중에서
직원번호 111에 해당하는 직원의 입사일이 5년이 넘었는지를 확인하여
5년이 넘었다면
입사한지 ??? 일이 지났습니다.
축하합니다.
입사 후 지난 년도 : ??? 를 출력하고
5년 미만이라면
입사한지 ??? 일 밖에 안되었네요.
열심히 일하세요.
입사 후 지난 년도 : ??? 가 출력 되도록 SQL를 작성 하시오.
* 참고 : 사용 함수 : DATEDIFF-차이
SELECT GETDATE();
SELECT DATEDIFF(YEAR, '2018-07-17', GETDATE()); -- 날짜의 차이, 년 단위
SELECT DATEDIFF(DAY, '2019-07-11', GETDATE()); -- 날짜의 차이, 일 단위
USE AdventureWorks
DECLARE @hireDate SMALLDATETIME -- 입사일
DECLARE @curDate SMALLDATETIME -- 오늘
DECLARE @years DECIMAL(5,2) -- 근무한년수
DECLARE @days INT -- 근무한일수
SELECT @hireDate = HireDate -- HireDate열의 결과를 @hiredate에 대입
FROM HumanResources.Employee WHERE BusinessEntityID = 111;
SET @curDate = GETDATE(); -- 현재날짜
SET @years = DATEDIFF(year, @hireDate, @curDate); --날짜의차이, 년단위
SET @days = DATEDIFF(day, @hireDate, @curDate); --날짜의차이, 일단위
IF ( @years >= 5)
BEGIN
PRINT N'입사한지' + CAST(@days AS NCHAR(5)) + N'일이나지났습니다.'
PRINT N'축하합니다.'
PRINT N'입사후지난년도:' + cast(@years as nchar(5))
END
ELSE
BEGIN
PRINT N'입사한지' + CAST(@days AS NCHAR(5)) + N'일밖에안되었네요.'
PRINT N'열심히일하세요.'
PRINT N'입사후지난년도:' + cast(@years as nchar(5))
END
CASE - 다중 분기 - 90점 이상은 A, 80 점 이상은 B, 70점 이상은 C, 60점 이상은 D, 60점 미만은 F 로 분류할 경우.
|
- IF 문
DECLARE @point INT = 77, @credit NCHAR(1)
IF @point >= 90 SET @credit = 'A'
ELSE IF @point >= 80 SET @credit = 'B'
ELSE IF @point >= 70 SET @credit = 'C'
ELSE IF @point >= 60 SET @credit = 'D'
ELSE SET @credit = 'F'
PRINT N'취득점수==> ' + CAST(@point AS NCHAR(3))
PRINT N'학점==> ' + @credit
- CASE 문
DECLARE @point INT = 77, @credit NCHAR(1)
SET @credit =
CASE
WHEN (@point >= 90) THEN 'A'
WHEN (@point >= 80) THEN 'B'
WHEN (@point >= 70) THEN 'C'
WHEN (@point >= 60) THEN 'D'
ELSE 'F'
END
PRINT N'취득점수==> ' + CAST(@point AS NCHAR(3))
PRINT N'학점==> ' + @credit