본문 바로가기

학교/데이터베이스

[데이터베이스] 5강 SQL SELECT

먼저 실습 데이터 준비

univDB

학생, 수강, 과목 3개의 table

 

학생(학번, 이름, 주소, 학년, 나이, 성별, 휴대폰 번호, 소속학과) 

수강(학번, 과목번호, 신청날짜, 중간성적, 기말성적, 평가학점

과목(과목번호, 이름, 강의실, 개설학과, 시수)

 

MySQL 실습 방법 //참고로 mysql은 대소문자 구별 x

MySQL  workbench 실행

root으로 접속 (슈퍼사용자)

질의창에

create user '접속할계정이름'@'%' indentified by '1234'; //새로운 관리자 계정 생성

grant all on *.* to '접속할계정이름'@'%' with grant option; //생성한 관리자 계정에 권한 부여

select user(); //현재 mysql 사용자 표시

show databases; //현재 데이터베이스 목록 표시

[database] - [manege connections] - [new] - [connection name] 에 '생성한계정이름' - [test connection] - 비번 입력 

후 mysql workbench에서 접속을 확인하면 끝

 

실습할 데이터 베이스 생성

drop database if exist univDB; //기존에 있을 수 있으므로 제거 후 시작

create database if not exists univDB; //생성

use univDB //sql 명령어를 실행할 대상인 기본 데이터베이스를 univDB로 지정함

 

select database(); 현재 사용 데이터베이스 확인

show tables; univDB 안의 생성 테이블 목록 확인

desc 테이블 이름; //해당 테이블의 생성정보 확인

 

//데이터 검색 : SELECT 문

테이블에서 데이터 검색 시 사용

SELECT 절 +  FROM절

SELECT [DISTINCT/ALL] 열_리스트   5 //DISTINCT : 중복 제거
FROM 테이블_리스트   1
[WHERE 검색_조건식]   2
[GROUP BY 그룹_기준열_리스트]   3
[HAVING 그룹_조건식]   4
[ORDER BY {㉮정열_기준열 ㉯[ASC/DESC][,]}+];   6

//'+':1번 이상 반복 /  '*':0번 이상 반복 / 뒤의 숫자는 실행 순서

 

SELECT / DISTINCT / WHERE
ORDER BY

집계함수

더보기

집계함수 (aggregate function) : 각 열에 대한 기본 통계 결과를 반환

행의 개수나 특정 열의 평균을 구하는 질의의 경우 SQL은 집계함수를 제공함

count(),max(),min(),sum(),avg()

count(열_이름) : 특정열 값의 개수, 행 개수 반환

max(열_이름) : 특정 열 값 중 max 

min(열_이름) : 특정 열 값 중 min

sum(열_이름) : 특정 열 값의 sum

avg(열_이름) : 특정 열 값의 avg

AGGREGATION FUNCTION

GROUP BY + HAVING

GROUP BY + HAVING

HAVING : GROUP BY를 통해 생성된 그룹 에서도 특정한 조건을 만족하는 그룹만으로 검색 제한

 

EX) 각 학년별로 2명 이상의 학생수를 갖는 학년에 대해서만 학년별 학생 수 검색 

=> GROUP BY : 학년

     HAVING : 학년 중 학생 수 2명 이상

=> GROUP BY 를 통해 이미 학년별로 COUNT 가 되었기 때문에 HAVING 에서 COUNT(*)>=2

 

 

 

LIKE : 문자연산자 검색

더보기

부분 문자열(substring) 포함 여부 검색을 위해 WHERE 절과 함께 사용

-검색 문자열 값을 정확히 모르거나 일부만 알고 있는 경우

- : 문자열 중 특정 위치에 1개의 모든 문자 허용

% : 문자열 중 임의의 위치에 0개 이상의 모든 문자(열) 허용

 

EX) LIKE '_OOK' => BOOK/LOOK (O) => GOOD, BOOKS, OOK (X)

       LIKE '9_7_5' => 98765, 91725, 9A785 (O) => 975, 98754  (X)

       LIKE '%K' => BOOK, MILK, OK, K (O) => BOOKS(X)

       LIKE 'B%K' => BOOK,BLACK,BK (O) => KBKBK, BBOOKS (X)

즉, -는 1개, 있는 자리에 개수 그대도 다른 문자만 대체

     %가 있으면 그 해당 위치에 몇 개가 와도 상관 X

NULL 값 검색

더보기

열 값으로 NULL 행 검색 시 = 연산자 사용 X

NULL : 아직 지정되지 않은 값, 특정 열의 입력이 생략될 경우 대신 입력됨 //'0', (공백문자), (빈 문자)

: 비교 연산자 사용 X => = 대신 IS NULL 사용, NULL이 아닌 값을 찾을 땐 IS NOT NULL

: NULL이 포함된 산술식 연산 결과는 NULL

: NULL이 포함된 행은 주로 집계 함수 결과에서 제외됨

 

집합 연산자를 이용한 검색 

더보기

+ 서로 다른 SQL 검색문의 결과 집합이 의미적, 형식적으로 일치할 경우 관계 대수 집합 연산자 적용

-UNION : 여러 SELECT 명령문 검색 결과 결합

: 테이블에서 자동 중복 행 제거한 나머지 행 반환 //INTERSECT, EXCEPT, MINUS 등 지원 XX

LIKE / NULL 검색 / UNION

SUBQUERY와 IN

더보기

SUBQUERY

질의문 안에 중첩되어 포함된 또 다른 SELECT 문

괄호 가장 안쪽부터 실행되어 가장 바깥쪽 주 질의문이 가장 나중에 수행됨

WHERE 절의 검색 조건 값을 미리 알지 못할 때 또는 실시간 조건식 완성할 때에 유용

 

+ IN 

나열된 값 중 하나라도 일치하는 경우 TRUE 반환

NOT IN은 하나라도 일치하지 않을 때 TRUE 반환

= 기호의 나열 필요 X

 

+EXISTS

 부질의문 실행 결과로 반환되는 행이 존재하는지 유무 확인하는 연산자

 

+부질의문의 반환값 비교 연산자

SUBQUERY와 IN / EXISTS

 

'학교 > 데이터베이스' 카테고리의 다른 글

[데이터베이스] 예제  (0) 2023.04.24
[데이터 베이스] 7강 SQL  (0) 2023.04.24
[데이터베이스] 6강 SQL  (0) 2023.04.22
[데이터 베이스] ~4장까지 전체 정리본  (0) 2023.04.02
데이터베이스 강의 소개  (0) 2023.03.08