본문 바로가기

Database

(18)
[데이터베이스(강의)] 9. stored function * stored function - 사용자가 정의한 함수 - DBMS에 저장되고 사용되는 함수 - SQL의 select, insert, update, delete statement에서 사용할 수 있다. - 임직원의 ID를 열자리 정수로 랜덤하게 발급하고 싶다. - ID의 맨 앞자리는 1로 고정이다. mysql> delimiter $$ mysql> CREATE FUNCTION id_generator() -> RETURNS int -> NO SQL -> BEGIN -> RETURN (1000000000 + floor(rand()*1000000000)); => 여기에서 끝내지 않기 위해 -> END -> $$ => 임시로 바꿔준거다 mysql> delimiter ; => 다시 원래대로 바꿔준다 mysql> C..
[데이터베이스(강의)] 8. SQL로 데이터 조회 (group by, aggregate function, order b) * ORDER BY - 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져오고 싶을 때 사용한다. - default 정렬 방식은 오름차순이다 - 오름차순 정렬은 ASC로 표기한다. - 내림차순 정렬은 DESC로 표기한다. - 임직원들의 정보를 연봉 순서대로 정렬해서 알고 싶다. SELECT * FROM employee ORDER BY salary; => 기본이 오름차순 (ASC) SELECT * FROM employee ORDER BY salary DESC; - 임직원들의 정보를 연봉 순서대로 정렬해서 알고 싶다. + 부서별정렬 SELECT * FROM employee ORDER BY dept_id ASC, salary DESC; => dept_id 기준 내림차순 정렬 이후 salary 기준..
[데이터베이스(강의)] 8. SQL로 데이터 조회 (join) * SQL에게 JOIN이란? - 두 개 이상의 table들에 있는 데이터를 한 번에 조회하는 것 - 여러 종류의 JOIN이 존재한다. [ implicit join VS explicit join ] - ID가 1인 임직원이 속한 부서 이름은? * implicit join - from절에는 table들만 나열하고 where절에 join condition을 명시하는 방식. - old-style join syntax - where 절에 selection condition과 join condition이 같이 있기 때문에 가독성이 떨어진다. - 복잡한 join 쿼리를 작성하다 보면 실수로 잘못된 쿼리를 작성할 가능성이 크다. SELECT D.name FROM employee E, department D WHERE ..
[데이터베이스(강의)] 7. SQL로 데이터 조회 (NULL, three-valued logic) * SQL에서 NULL의 의미 - unknown _ 알려지지 않음 - unavailable or withheld _ 비공개 or 이용불가 - not applicable _ 해당사항 없음 employee 테이블이 아래와 같을 때, SELECT id FROM employee WHERE birth_date = NULL; => 조회할 수가 없다. SELECT id FROM employee WHERE birth_date is NULL; => NULL 에 대해서는 IS / IS NOT 을 사용해야 한다. * NULL과 Three - Valued Logic - SQL에서 NULL과 비교 연산을 하게 되면 그 결과는 UNKNOWN 이다. - UNKNOWN은 'TRUE 일수도 있고 FALSE 일수도 있다' 라는 의미이다..
[데이터베이스(강의)] 6. SQL로 데이터 조회 (subquery / IN, EXIST, ANY, ALL) [ SELECT with subquery ] - ID가 14인 임직원보다 생일이 빠른 임직원의 ID, 이름, 생일을 알고 싶다. (ID가 14인 임직원을 찾는 쿼리) SELECT birth_date FROM employee WHERE id = 14; SELECT id, name, birth_date FROM employee WHERE birth_date < 1992-08-04; 두 개의 쿼리를 나눠서 실행했는데 한번에 실행해보면, SELECT id, name, birth_date FROM employee WHERE birth_date < (SELECT birth_date FROM employee WHERE id = 14); * subquery (nested query or inner query) : SE..
[데이터베이스(강의)] 5. SQL로 데이터 조회 (Select) [ SELECT statement ] SELECT attribute(s) FROM table(s) [ WHERE condition(s) ] - ID가 9인 임직원의 이름과 직군을 알고 싶다. SELECT name, position FROM employee WHERE id = 9; projection attributes selection condition => selection condition 을 통해 선택된 튜플의 값들 중에서 projection attributes 에 의해 지정된 attribute에 대응하는 값들만 가져오게 된다. - project 2002를 리딩(leading)하고 있는 임직원의 ID와 이름과 직군을 알고싶다. project 테이블 employee 테이블 SELECT employee..
[데이터베이스(강의)] 4. SQL (Insert / Update / Delete) 저번에 만들었던 DEPARTMENT / EMPLOYEE / PROJECT / WORKS_ON 네개의 테이블들에 데이터를 추가해보자. EMPLOYEE 테이블 처음 정의할 때의 attribute 순서대로 값을 넣어주면 됨. id, name, birth_date, sex, position, salary, dept_id mysql> INSERT INTO employee -> VALUES (1, 'MESSI', '1987-02-01', 'M', 'DEV_BACK', 100000000, NULL*); * 현재 DEPARTMENT 테이블에 데이터가 없기 때문에 FK로 연결할 수가 없음. 일단 null로 지정. 두번째 데이터를 넣어보자. mysql> INSERT INTO EMPLOYEE -> VALUES(1, 'JAN..
[데이터베이스(강의)] 3. SQL 기본 개념 및 SQL로 데이터베이스 정의 * SQL ( Structured Query Language ) - 현업에서 쓰이는 relational DBMS의 표준 언어 - 종합적인 database 언어 : DDL + DML + VDL * SQL 주요 용어 relational data model SQL relation table attribute column tuple row domain domain * SQL에서 relation이란? - multiset (=bag) of tuples @ SQL - 중복된 tuple을 허용한다. SQL & RDBMS - SQL은 RDBMS의 표준 언어이지만 실제 구현에 강제가 없기 떄문에 RDBMS마다 제공하는 SQL의 스펙이 조금씩 다르다. [ 예제를 통해 SQL로 DB 정의하기 ] IT 회사 관련 RDB 만들기..