coding base/DataBase

[DB] SQL 언어

ddo04 2024. 4. 10. 20:42
728x90
  • 관계형 데이터베이스의 장점 중 하나는 사용자들이 쉽게 사용할 수 있는 SQL (Structured Query Language) 언어를 제공한다는 것
  • 사용자는 간단한 SQL문을 사용하여 DBMS에게 작업 요청 가능
  • 기본적인 SQL문들은 표준화되어 있기 때문에 거의 DBMS 제품에 동일하게 적용
  • SQL 언어는 비절차적 언어 (non_procedural language)
  • 사용자는 자신이 원하는 것만을 명시하며, 원하는 것을 DBMS가 어떻게 처리할지는 명시할 필요가 없음
  • SQL 언어는 자연어와 비슷한 문법체계를 가지고 있기 때문에 처음 보는 사람도 SQL문의 의미를 이해하는 것이 어렵지 않음
  • 사용자들은 SQL이 다른 언어에 비해 배우기 쉬운 것으로 느낀다
  • 사용자/개발자는 두가지 방식으로 SQL 이용할 수 있음
  • 대화식 SQL이란 DBMS 회사에서 제공하는 유틸리티 프로그램을 이용하여 사용자가 직접 SQL문을 입력하고 실행결과를 확인하는 방식을 말함
  • 내장 SQL은 SQL문이 C, JAVA 등의 다른 언어로 작성된 삭제 프로그램 안에 포함되어져서 사용하는 방식

 

 
<HTML>
<HEAD>
<TITLE> Dept </TITLE>
</HEAD>

<BODY>
<center><h2>부서정보 조회 (전체)</h2>
<% 
    String deptid, dname, dloc ;
   
    Class.forName("org.git.mm.mysql.Driver");
    con = DriverManager.getConnection(DB_URL, DB_USER, 
    DB_PASSWORD);

    String query = "SELECT * FROM dept";
    preparedstatement pstmt = 
        con.prepareStatement(query);
    ResultSet result = pstmt.executeQuery();

        while (result.next()){
            deptid = result.getString(1);
            dname = result.getString(2);
            dloc = result.getString("loc");
%>
    <tr>
            <td><%=deptid%></td><td><%=dname%></td><td>
                <%=dloc%></td>
    </tr>
<%
    pstmt.close();
%>
</table>
</BODY>
</HTML>
 
  • 데이터베이스를 설계하기 위해서는 SQL 언어에 익숙할 필요가 있음
  • 데이터베이스 설계의 목표 중 하나는 개발자나 사용자들의 SQL 질의를 효과적으로 처리해 줄 수 있는 구조로 데이터베이스를 구성하는 것
  • 설계자는 사용자들이 어떤 SQL을 사용하게 될지를 사전에 파악하고 그에 맞추어 데이터베이스를 설계해야 함
  • SQL 언어에는 다음과 같은 명령어가 있음
  1. SELECT
  2. INSERT
  3. UPDATE
  4. DELETE
  5. CREATE
  6. ALTER
  7. DROP

 

  • DBMS는 SQL문을 실행할 때 대소문자를 구분하지 않음
  • 테이블 이름, 컬럼의 이름에 대해서도 마찬가지
  • 편의상 SQL 문법에 있는 예약어에 대해서는 대문자로, 테이블이나 컬럼 이름은 소문자로 기술하기로 함
  • 대화식 SQL에서 많은 경우 SQL문이 끝났음을 알려주기 위해 ';'를 사용하므로 SQL문 끝에 ';'를 붙임
  • SQL문은 한 줄에 이어서 기술해도 되고 여러 줄에 나누어 기술해도 됨

 

SELECT
  • 테이블에 저장된 정보를 조회하는 데 사용
  • 데이터베이스의 목적이 정보를 한 곳에 모아 관리하면서 다수가 공유하는 것임을 생각할 때 SQL 명령어 중에서 가장 빈번히 사용되는 명령어가 SELECT임을 을 쉽게 짐작 할 수 있음
  • SELECT는 다양한 형태의 문법을 갖는다
# 사원에 대한 모든 정보를 보이시오.
SELECT *
FROM emp ;

# 곽희준 사원의 담당업무는 무엇인가?
SELECT job
FROM emp
WHERE ename = '곽희준' ;

# 급여가 300을 넘고 담당업무가 영업관리인 사원의 모든 정보를 보이시오.
SELECT *
FROM emp
WHERE salary > 300 AND job = '영업관리' ;

# 모든 사원의 이름과 급여를 보이되 사원 이름을 가나다순으로 보이시오.
SELECT ename, salary
FROM emp
ORDER BY ename ;

# 부서번호와 그 부서에 속한 사원들의 급여액 합계를 보이시오
SELECT deptid, SUM(salary)
FROM emp
GROUP BY deptid ;
 

 

INSERT

 

  • 테이블에 튜플을 삽입할 때 사용함
  • 기본적으로 한 번에 하나의 튜플을 삽입할 수 있음
INSERT INTO emp (empid, ename, deptid, hire_date, job, salary)
VALUES (106, '강윤호', 200, '2001-01-10', '연말정산', 400);

(사원 정보에 튜플 삽입, 위와 같이 모든 컬럼의 값에 대해 테이블에 있는 컬럼
순서대로 저장하는 경우는 다음과 같이 간단히 기술 가능)

INSERT INTO emp
VALUES (106, '강윤호', 200, '2001-01-10', '연말정산', 400);

-------------------------------------------------------------------

INSERT INTO emp (empid, ename, salary)
VALUES (107, '남진선', 500);

(이와 같이 일부 컬럼을 생략하고 튜플을 삽입하는 경우, 생략된 컬럼들의 값은
NULL로 저장됨)
 

 

UPDATE
  • 테이블에 저장되어 있는 튜플의 값을 변경할 때 사용함
# 홍성길 사원의 부서번호를 400으로, 급여를 500으로 변경하시오.
UPDATE emp
SET deptid = 400, salary = 500
WHERE ename = '홍성길'
 

 

DELECT
  • 테이블 에 있는 튜플을 삭제할 때 사용함
# 홍성길 사원의 정보를 사원 정보애서 삭제하시오
DELECT FROM emp
WHERE ename = '홍성길' ; 
 

 

CREATE
  • 테이블, 뷰, 사용자 등 데이터베이스 내의 객체들을 생성하는 데 사용됨
  • 명령어이나 CREATE는 데이터베이스의 구조와 관련이 있기 때문에 데이터베이스 관리자나 설계자들이 사용하게 됨
  • CREATE문은 표준화된 문법을 가지고 있지만 DBMS 제품마다 상이한 부분이 있으므로 사용할 제품에서 어떤 문법을 제공하는지 살펴보아야 함
# 다음은 dept, emp 테이블을 연결하여 뷰를 만드는 문장이다
CREATE VIEW new_emp
  AS SELECT e.empid, e.ename, d.dname, e.salary
    FROM emp e, dept d
    WHERE e.deptid = d.deptid ; 
 

 

ALTER
  • CREATE로 생성한 데이터베이스 내의 객체를 변경할 때 사용함
# 다음 emp 테이블에 전화번호 컬럼을 추가하는 SQL문이다
ALTER TABLE emp
    ADD tel varchar(30);
 
DROP
  • CREATE의 반대 역할을 하는 명령어로 데이터베이스 내의 객체를 제거하는 역할
# 다음은 dept 테이블과 뷰 new_emp를 제거하는 문장
DROP TABLE dept ;
DROP VIEW new_emp ;
 

 

 


사용한 책 : 데이터베이스 설계 및 구축

 

'coding base > DataBase' 카테고리의 다른 글

[DB] 데이터베이스 설계  (0) 2024.04.10
[DB] 추상화(abstraction) & 모델링(modeling)  (0) 2024.04.10
[DB] 뷰 (View)  (0) 2024.04.10
[DB] 기본키와 외래키  (1) 2024.04.10
[DB] 관계형 데이터베이스  (0) 2024.04.05