먼저 실습 데이터 준비
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번 이상 반복 / 뒤의 숫자는 실행 순서
집계함수
집계함수 (aggregate function) : 각 열에 대한 기본 통계 결과를 반환
행의 개수나 특정 열의 평균을 구하는 질의의 경우 SQL은 집계함수를 제공함
count(),max(),min(),sum(),avg()
count(열_이름) : 특정열 값의 개수, 행 개수 반환
max(열_이름) : 특정 열 값 중 max
min(열_이름) : 특정 열 값 중 min
sum(열_이름) : 특정 열 값의 sum
avg(열_이름) : 특정 열 값의 avg
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
SUBQUERY와 IN
SUBQUERY
질의문 안에 중첩되어 포함된 또 다른 SELECT 문
괄호 가장 안쪽부터 실행되어 가장 바깥쪽 주 질의문이 가장 나중에 수행됨
WHERE 절의 검색 조건 값을 미리 알지 못할 때 또는 실시간 조건식 완성할 때에 유용
+ IN
나열된 값 중 하나라도 일치하는 경우 TRUE 반환
NOT IN은 하나라도 일치하지 않을 때 TRUE 반환
= 기호의 나열 필요 X
+EXISTS
부질의문 실행 결과로 반환되는 행이 존재하는지 유무 확인하는 연산자
+부질의문의 반환값 비교 연산자
![](https://blog.kakaocdn.net/dn/cxqkFG/btsbSNo2njG/HLAq2ezyVmrJLDs680IcqK/img.png)
![](https://blog.kakaocdn.net/dn/bPr41L/btsbSK6Sk4j/zuElUs477zuBwDoG3xoZWK/img.png)
'학교 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 예제 (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 |