본문 바로가기

Database

[데이터베이스] 23-2 데이터베이스 정리 및 MYSQL TUTORIAL 실습(2)

반응형
  • <용어 되새기기>
    • 관계 모델에서 관계(relation)이라는 용어는 테이블을 가리키며, 튜플이라는 용어는 테이블의 행, 속성이라는 용어는 테이블의 열을 가르킨다. 관계 인스턴스(relation instance)는 관계의 특정한 경우를 가리킨다.

 

데이터베이스 스키마 : 데이터베이스의 논리적 구조

데이터베이스 인스턴스: 특정 순간에 데이터베이스에 있는 데이터의 스냅샷

 

외래키

- 관계 r1의 속성 A로부터 관계 r2의 기본키로의 외래키 제약조건은 관계 r1 각 튜플에 대한 속성 A 값이 관계 r2의 특정 튜플의 속성 B의 값이어야한다. 참조 관계라고 일컫는다.

 

 

Select Operation

관계에서 주어진 predicate를 만족하는 튜플들만을 선택하여 반환해주는 작업

ex)

 

Select * FROM INSTRUCTOR WHERE DEPT_NAME='Physics';

 

Project Operation

 

관계 속성들 중에서 지정된 속성들만 포함하는 데이터들을 반환

ex)

SELECT ID,NAME,SALARY FROM INSTRUCTOR;

* 관계는 집합이므로, 중복된 튜플들은 제거된 결과를 반환한다.

 

 

JOIN

2개이상의 관계에서 연관된 열들을 기반으로 관계들의 튜플들을 결합한 관계를 만들어내는 연산 작업

  • SELECT INSTRUCTOR.ID AS INSTRUCTOR_ID, NAME, DEPT_NAME, SALARY, TEACHES.ID AS TEACHES_ID, COURSE_ID, SEC_ID, SEMESTER, YEAR FROM INSTRUCTOR JOIN TEACHES ON INSTRUCTOR.ID = TEACHES.ID ORDER BY INSTRUCTOR.ID;
  • 아래 글 처럼 JOIN ON 연산이 아닌 단순 Product 연산을 수행한다면 모든 연산의 결과 전체가 반환되기 때문에 필요하지 않은 레코드도 포함이 되게 된다.

 

  • 'SELECT NAME FROM INSTRUCTOR,TEACHES WHERE INSTRUCTOR.ID = TEACHES.ID 쿼리문은 SELECT NAME FROM INSTRUCTOR JOIN TEACHES ON INSTRUCTOR.ID = TEACHES.ID와 같이 동등한 결과가 반환된다.  보통 카다스트리안 프로덕트 연산보다는 JOIN ON연산을 더 많이 활용한다고 한다. 연습을 해야겠다.

 

UNION OPERATOR (합집합)

  • ex) 2017년 가을학기, 2018 봄학기에 진행된 모든 강좌를 찾기
  • SELECT COURSE_ID FROM SECTION WHERE SEMESTER = 'Fall' AND YEAR = 2017 UNION SELECT COURSE_ID FROM SECTION WHERE SEMESTER='Spring' AND YEAR = 2018;
    • 두개의 연산을 union 기호 양쪽에 붙인다는 느낌으로 진행

 

SET INTERSECTION OPERATION(교집합)

  • MY SQL에서는 SET-INTERESCTION 연산을 지원안한다. 
  • ex) 2017가을학기, 2018 봄학기에 강의된 강좌 찾기
    • INNER JOIN 이나 IN 연산을 활용
    • SELECT TABLE1.COURSE_ID FROM (SELECT * FROM SECTION WHERE SEMESTER='Fall' AND YEAR=2017) AS TABLE1 INNER JOIN (SELECT * FROM SECTION WHERE SEMESTER='Spring' AND YEAR=2018) AS TABLE2 ON TABLE1.COURSE_ID = TABLE2.COURSE_ID;
    • SELECT TABLE1.COURSE_ID FROM (SELECT * FROM SECTION WHERE SEMESTER='Fall' AND YEAR=2017) AS TABLE1 WHERE TABLE1.COURSE_ID IN (SELECT COURSE_ID FROM SECTION WHERE SEMESTER='Spring' AND YEAR = 2018);

 

SET DIFFERENCE OPERATION (차집합)

  • MY SQL에서는 SET-DIFFERENCE 연산을 지원안한다. 
  • ex) 2017 가을학기엔 강의했지만 2018 봄학기엔 강의하지 않는 과목을 찾으려고한다면
    • SELECT TABLE1.COURSE_ID FROM (SELECT * FROM SECTION WHERE SEMESTER='Fall' AND YEAR = 2017) AS TABLE1 WHERE TABLE1.COURSE_ID NOT IN (SELECT COURSE_ID FROM SECTION WHERE SEMESTER='Spring' AND YEAR=2018);

* Foreign key는 다른 table의 PM인 것을 잊지말자

 

 

 


What is a NULL Value?

  • A field with a NULL value is a field with no value.
  • SELECT column_names FROM table_name WHERE column_name IS NULL;
  • SELECT column_names FROM table_name WHERE column_name IS NOT NULL;

UPDATE Syntax

  • The UPDATE statement is used to modify the existing records in a table.
  • UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
  • Note: Be careful when updating records in a table! Notice the WHERE clause in the UPDATE statement. The WHERE clause specifies which record(s) that should be updated. If you omit the WHERE clause, all records in the table will be updated!
  • It is the WHERE clause that determines how many records will be updated. 조건에 부합하는 레코드의 특정 칼럼은 전부 다 변경된다고 보면 된다!

 

DELETE Syntax

  • The DELETEstatement is used to delete existing records in a table.
  • DELETE FROM table_name WHERE condition;
  • Note: Be careful when deleting records in a table! Notice the WHERE clause in the DELETE statement. The WHERE clause specifies which record(s) should be deleted. If you omit the WHERE clause, all records in the table will be deleted!
  • It is possible to delete all rows in a table without deleting the table
  • DELETE FROM table_name

 

LIMIT Syntax

  • The LIMIT clause is used to specify the number of records to return.
  • 조건에 맞는 레코드 전부 가져오는 것이 아닌 수량제한 기능
  • The LIMIT clause is useful on large tables with thousands of records. Returning a large number of records can impact performance.
  • SELECT column_name(s) FROM table_name WHERE condition  LIMIT number;
  • SELECT * FROM Customers LIMIT 3;
  • 만약 4번째부터 6번째까지의 레코드를 뽑아보고 싶다면?
    • MySQL provides a way to handle this: by using OFFSET.
    • SELECT * FROM Customers LIMIT 3 OFFSET 3;

 

MIN MAX Syntax

  • SELECT MIN(column_name) FROM table_name WHERE condition;
  • SELECT MAX(column_name) FROM table_name WHERE condition;
  • 리턴값으로 숫자 중에서 MIN, MAX 값을 출력할 수 있지만, 레코드 값이 문자열로 되어있다면 아스키코드값으로 큰 값인 z에 가까운 문자열이 출력된다!

 

COUNT() Syntax 

  • The COUNT() function returns the number of rows that matches a specified criterion
  • SELECT COUNT(column_name) FROM table_name WHERE condition;

AVG() Syntax

  • The AVG() function returns the average value of a numeric column. 
  • SELECT AVG(column_name) FROM table_name WHERE condition;

SUM() Syntax

  • The SUM() function returns the total sum of a numeric column. 
  • SELECT SUM(column_name) FROM table_name WHERE condition;

 


MySQL NULL Values - IS NULL and IS NOT NULL (w3schools.com)

 

MySQL NULL Values - IS NULL and IS NOT NULL

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

반응형