카테고리 없음

SELECT SQL

noddu 2023. 8. 9. 22:03
728x90
반응형

 

 

SELECT SQL의 구조

SELECT Predicate [테이블 명.] 속성명1, [테이블명 .] 속성명2, ···
FROM 테이블명1, 테이블명2, ···
[WHERE 조건]
[GROUP BY 속성명1, 속성명2, ···]
[HAVING 조건]
[ORDER BY 속성명[ASC | DESC]];

 

반응형



SELECT 절 - 검색하여 불러올 속성(열) 또는 속성을 이용한 수식을 지정함

 

Predicate - 불러올 튜플 수를 제한할 명령어를 기술함

구분 내용
ALL 모든 튜플을 검색할 때 지정하는 것으로, 주로 생략함
DISTINCT 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색함
DISTINCTROW 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌, 튜플 전체를 대상으로 함

 

FROM 절 - 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술함

 

 

WHERE 절 - 검색할 조건을 기술함
구분 내용
비교 연산자 =,  <>,  >,  >=,  <,  <=,  IN
논리 연산자 NOT, AND, OR
LIKE 대표문자를 이용해 지정된 속성의 값이 문자패턴과 일치하는 튜플만 검색함

 

SQL에서 사용하는 대표문자
문자 내용
* 또는 % 모든 문자를 대표
? 또는 _ 한 자리 문자를 대표
# 한 자리 숫자를 대표

 

 

연산자 종류
종류 연산자 우선순위
산술연산자 X,  /,  +,  - 왼쪽에서 오른쪽으로 갈수록 낮아짐
관계연산자 =,  <>,  >,  >=,  <,  <= 모두 같음
논리연산자 NOT, AND, OR 왼쪽에서 오른쪽으로 갈수록 낮아짐

산술, 관계, 논리연산자가 함께 사용되었을 때는 산술 > 관계 > 논리 순으로 우선순위
연산자 순서로 연산자 우선순위가 정해짐


SELECT, FROM, WHERE 해보기
SELECT * FROM 수강생 WHERE 과목 = '수학'
AND 주소 = '학교'

수강생 테이블에서 과목이 수학이고 주소가 학교인 모든 튜플을 조회

SELECT * FROM 수강생 WHERE 이름 LIKE '신%'

수강생 테이블에서 이름이 '신'으로 시작하는 모든 튜플을 조회

SELECT * FROM 수강생 WHERE 수강료 BETWEEN 40 AND 80

수강생 테이블에서 수강료가 40이상 80이하인 모든 튜플을 조회

SELECT * FROM 수강생 WHERE 과목 IS NULL

수강생 테이블에서 과목이 NULL인 모든 튜플을 조회

 

GROUP BY 절 - 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화할 속성을 지정함
종류 내용
COUNT(속성명) 그룹별 튜플 수를 구하는 함수
MAX(속성명) 그룹별 최대값을 구하는 함수
MIN(속성명) 그룹별 최소값을 구하는 함수
SUM(속성명) 그룹별 합계를 구하는 함수
AVG(속성명) 그룹별 평균을 구하는 함수
IS NULL 조건을 지정하는 WHERE 절에서 속성의 값이 NULL인 것을 검색함
IS NOT NULL 조건을 지정하는 WHERE 절에서 속성의 값이 NULL이 아닌 것을 검색함

 

 

HAVING 절 - GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정함

 

 

ORDER BY 절 - 특정 속성을 기준으로 정렬하여 검색할 때 사용함
종류 내용
ASC 오름차순으로 정렬
DESC 내림차순으로 정렬
(생략) 생략된 경우에는 오름차순으로 정렬

 

 

ORDER BY, HAVING  해보기
SELECT * FROM 수강생 WHERE 과목 = '데이터베이스'
ORDER BY 이름 DESC

수강생 테이블에서 과목이 데이터베이스인 튜플 이름 기준 내림차순으로 조회

SELECT 과목 COUNT(*) AS 수강생수
FROM 수강생
WHERE 수강료 >= 100
GROUP BY 과목
HAVING COUNT(*)>=2

수강생 테이블에서 수강료가 100이상인 과목별 수강생이 2명 이상인 수강생수 조회

 


 

기본 검색 해보기
SELECT * FROM 사원;

SELECT 사원.* FROM 사원;

SELECT 이름, 부서, 생일, 주소, 기본급 FROM 사원;

SELECT 사원.이름, 사원.부서, 사원.생일, 사원.주소, 사원.기본급 FROM 사원;

<사원> 테이블의 모든 튜플을 조회

SELECT DISTINCT 부서
FROM 사원;

<사원> 테이블에서 부서만 검색하되, 같은 부서는 한 번만 조회

SELECT Trim(이름), "월급은" AS 이름, 기본급+10 AS 기본급
FROM 사원

 

종류 내용
Trim 문자열의 좌우 공백을 제거하는 함수
LTrim  문자열의 왼쪽 공백만 제거할 때 사용함
RTrim  문자열의 오른쪽 공백만 제거할 때 사용함

 

<사원> 테이블에서 이름에 문자열 “월급은”, 기본급에 10을 더한 값을 조회
(이름 속성에 있을지 모르는 좌우 공백을 모두 제거)

 

조건 지정 검색 해보기
SELECT *
FROM 사원
WHERE 부서 = '기획'

<사원> 테이블에서 부서가 ‘기획’이고, 기본급이 110보다 큰 튜플을 조회

SELECT *
FROM 사원
WHERE 부서 = '기획' OR 부서 = '인터넷'


SELECT *
FROM 사원
WHERE 부서 IN ('기획', '인터넷');

<사원> 테이블에서 부서가 ‘기획’이거나 ‘인터넷’인 튜플을 조회

 

SELECT *
FROM 사원
WHERE 이름 LIKE '김%';

<사원> 테이블에서 이름의 첫 번째 글자가 ‘김’인 모든 튜플을 조회

SELECT *
FROM 사원
WHERE 기본급 BETWEEN 85 AND 95;

<사원> 테이블에서 기본급이 85에서 95 사이인 튜플을 조회

SELECT *
FROM 사원
WHERE 주소 IS NULL;

<사원> 테이블에서 주소가 NULL인 튜플을 조회

 

 

정렬 검색 해보기
SELECT *
FROM 사원
WHERE 부서 = '기획'
ORDER BY 이름;

<사원> 테이블에서 부서가 '기획'인 튜플을 검색, 이름을 기준으로 오름차순 조회

SELECT *
FROM 사원
ORDER BY 부서 ASC, 이름 DESC;

<사원> 테이블의 모든 튜플들을 검색, 부서를 기준으로 오름차순 정렬하고
정렬된 같은 부서에 대해서는 이름을 기준으로 내림차순 조회

 

그룹 검색 해보기
SELECT 부서, COUNT(*) AS 사원수
FROM 사원
WHERE 기본급>=100
GROUP BY 부서
HAVING COUNT(*) >=2;

<사원> 테이블에서 기본급이 100 이상인 사원이 2명 이상인 부서의 부서명과 사원수를 조회

 

하위 질의
SELECT 이름, 주소
FROM 사원
WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');

<여가활동> 테이블에서 취미가 ‘나이트댄스’인 사원 이름을 조회 후

<사원> 테이블에서 해당 사원의 이름과 주소를 검색

SELECT *
FROM 사원
WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);

여가활동을 하지 않는 사원들을 조회

 

복수 테이블 검색
SELECT 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력
FROM 사원, 여가활동
WHERE 여가활동.경력 >= 10 AND 사원.이름 = 여가활동.이름;

경력이 10년 이상인 사원의 이름, 부서, 취미, 경력을 조회

 

통합(UNION) 질의
SELECT *
FROM 임원
UNION SELECT * 
FROM 직원;

<임원> 테이블과 <직원>테이블 같은 레코드가 중복되지 않게 조회

반응형