MySQL : 정보 시스템과 SQL SELECT의 활용
정보 시스템 요약
1. 정보 시스템
- 데이터 수집, 저장, 처리하여 의사결정에 유용한 정보를 생성하고 분배하는 수단
2. 자료와 정보
1) 자료(Data)
- 현실 세계로부터 관찰이나 측정을 통해 수집된 사실이나 값
- 양적 데이터: 숫자로 표현 (예: 2015493 -> 사원번호)
- 질적 데이터: 속성으로 표현 (예: 크다 -> 000의 키) 2) 정보(Information)
- 자료를 처리하여 얻은 결과로, 의사결정에 사용되는 값
- 예: 기온 8도, 습도 75% -> 지난 10년간 비 올 확률 68%, 우산 필요 3) 데이터 마이닝(Data Mining)
- 유의미하고 가치 있는 데이터를 추출하는 기술 4) 정보의 가치 높이는 방법
- 목적에 맞게 데이터를 분류하고 의미 부여
3. Database 개념
1) 정의
- 조직 내 데이터의 체계적 집합 2) 등장 배경
- 데이터 공유 필요, 구조 변경 시 응용 프로그램 수정 번거로움 해결 3) Database 특징
- 통합 데이터, 공용 데이터, 운영 데이터, 저장된 데이터 4) Database 구성의 장점
- 데이터 중복 최소화, 공유, 일관성, 무결성, 최신 정보 이용 가능, 처리 속도 증가
4. DBMS(Database Management System) 기능
1) 정의 기능
- 데이터 형, 구조, 제약 조건 명시 2) 제어 기능
- 무결성 유지, 보안 검사, 병행수행 제어 3) 조작 기능
- 데이터 검색, 삽입, 삭제, 갱신 인터페이스 제공
5. Schema
1) 정의
- 데이터 객체, 성질, 관계, 제약조건 정의 2) Schema 3계층
- 외부 Schema: 특정 응용 한정 데이터 구조
- 개념 Schema: 전체적인 논리적 설계
- 내부 Schema: 실제 저장 방법 설명
6. DBA(Database Administrator) 기능
1) Database 설계와 운영
- Schema 정의, 보안 및 무결성 검사, Backup & Recovery 정의, 접근 권한 전략 2) 행정 및 불편 해결
- 사용자 요구 및 불평 해결 3) 시스템 감시 및 성능 분석
- 시스템 이상 현상 감지, 성능 향상 감시
7. SQL(Structured Query Language)
1) 기능
- 데이터 입력, 수정, 삭제, 조회
- 표준화 작업: SQL-86, SQL-89, SQL-92, SQL-1999, SQL-2003, SQL-2008, SQL-2011, SQL-2016, SQL-2019 2) 명령어 종류
- DML: SELECT, INSERT, UPDATE, DELETE
- DDL: CREATE, ALTER, DROP
- DCL: GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT
실습 테이블 소개
1) dept: 부서 정보 저장, Primary Key: deptno 2) emp: 사원 정보 저장, Primary Key: empno, Foreign Key: deptno 3) salgrade: 급여 등급 정보 저장
SQL 예제
1) 사원 봉급
1
SELECT concat(ename, '의 봉급은', sal, '입니다') FROM emp;
2) 부서 번호
1
SELECT distinct deptno FROM emp;
3) 특정 사원 정보
1
SELECT ename, sal, comm, sal + IFNULL(comm, 0) FROM emp WHERE ename = 'SMITH';
4) 전체 사원 정보
1
SELECT * FROM emp;
5) 연봉 계산
1
SELECT empno AS 사원번호, ename AS 이름, (sal + IFNULL(comm, 0)) * 12 AS "Annual Salary" FROM emp;
SQL SELECT 기능 요약
1. SELECT의 기능
- Selection: 조건 검색, Row에 대한 필터링
- Projection: column에 대한 필터링
- Join: 여러 테이블에서의 검색
2. SELECT Syntax
1
2
3
4
SELECT [DISTINCT | ALL] {* | column1, column2 [AS [alias]] | expr}
FROM table_name
WHERE condition
ORDER BY column [ASC | DESC];
- SELECT 절: 질의할 칼럼 나열, 구분은 쉼표(,)
- FROM 절: 조회할 테이블 이름
- *: 모든 칼럼 조회
- ALL: 모든 결과 ROW 표시 (기본값)
- DISTINCT: 중복된 ROW 제외
- expr: SQL 함수나 수학 연산 포함 표현식
- alias: 칼럼에 대한 별칭 사용
- Default Column Heading: column 명이 대문자로 표시
- Default Data Justification: Number 값은 오른쪽 정렬, Character와 Date 값은 왼쪽 정렬
3. 특정 열 선택 예제
1
2
SELECT empno, ename, sal FROM emp;
SELECT empno, ename, job, mgr FROM emp;
4. 산술 연산자
+
,-
,*
,/
등 수학 연산 표현식- 우선순위 있음:
*
와/
가+
와-
보다 우선
5. NULL 값
- NULL: 특정 행/열에 값이 없는 상태
- 특징: 연산에 포함되지 않으며, NULL 값을 포함한 산술 연산 결과는 NULL
6. IFNULL 함수
- NULL 값을 특정 값으로 치환
- 예제:
1 2
SELECT IFNULL(comm, 0) FROM emp; SELECT empno, ename, sal, sal * 12 + IFNULL(comm, 0) FROM emp;
7. Alias 별칭
- 칼럼 header에 별칭 부여
- 예제:
1
SELECT ename "Name", sal AS "Salary" FROM emp;
8. 문자열 연결 연산자
- MySQL:
CONCAT()
사용 - 예제:
1
SELECT CONCAT(ename, ' is working as a ', job) FROM emp;
9. Literals (상수)
- Character literal: 작은 따옴표로 묶음
- Number literal: 따옴표 없이 표현
10. Duplicate Values (중복 행 제거)
- DISTINCT 사용
11. WHERE 절
- 특정 조건의 row만 선택
- 비교 연산자:
<
,>
,<=
,>=
,=
,!=
,<>
- 예제:
1 2
SELECT ename, job, deptno FROM emp WHERE job = 'CLERK'; SELECT empno, ename, hiredate FROM emp WHERE hiredate >= '1983-01-01';
12. 논리 연산자
- AND, OR, NOT 사용
- 예제:
1
SELECT empno, ename, sal, deptno FROM emp WHERE sal >= 1000 AND deptno = 30;
13. SQL 연산자
- BETWEEN A AND B
1
SELECT ename, job, sal FROM emp WHERE sal BETWEEN 1300 AND 1500;
- IN(list)
1
SELECT ename, job FROM emp WHERE job IN ('CLERK', 'MANAGER', 'ANALYST');
- LIKE(%, _)
1
SELECT ename FROM emp WHERE ename LIKE 'A%';
- IS NULL / IS NOT NULL
1
SELECT ename FROM emp WHERE comm IS NULL;
14. ORDER BY
- 데이터 정렬
- 기본적으로 오름차순 정렬 (ASC)
- 내림차순 정렬시 DESC 사용
- 예제:
1 2
SELECT empno, ename, hiredate FROM emp ORDER BY hiredate DESC; SELECT empno, ename, sal, comm, sal * 12 + IFNULL(comm, 0) AS "Annual" FROM emp WHERE deptno = 20 ORDER BY "Annual" ASC;
Java JDBC 예제
- MySQL Driver 로딩 및 Connection, Statement, ResultSet 사용 예제 포함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mycompany", "root", "root1234");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT now(), version()");
while (rs.next()) {
System.out.println(rs.getString(1) + ", " + rs.getString(2));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
This post is licensed under CC BY 4.0 by the author.