이전 게시글에서 SQL의 DDL 기능을 알아보았어요.
[데이터베이스 DB] - [데이터베이스/DB] 데이터베이스 언어_DDL, DML, DCL, SQL의 DDL기능
이번엔 SQL의 DML기능을 알아볼게요.
SQL은 DML기능을 하는 대표적 문장 네 가지 키워드를 제공해요.
-Select
-Insert
-Delete
-Update
이는 명령어(연산)이에요.
DB의 사용목적은 조건만족하는 아이를 찾는거라고 보면 되는데요.
이를 위해 사용하는 연산들이라고 보면 됩니다.
"select" 문장(statements)
SQL "select" query 형태를 보여드리면
select A1, A2, ...An //attribute list
from R1, R2,.... Rn //relation list
where P //selection predicate
group by <grouping attributes>
having <conditions>
order by <ordering attributes>;
SQL query의 결과는 relation 관계입니다.
select 문장은 위와 같은 6개의 clause를 가질 수 있고
select와 from은 반드시 있어야하는 생략 불가능 절이고
나머지는 생략 가능하지만 순서는 반드시 저와 같아야 합니다.
또 having은 group by가 없으면 나오면 안됩니다.
"select" 절 (clause)
-select에서 "*"기호는 모든 속성을 의미
Select *
from professor; //모든 professor에서 모든 attribute를 리턴하라
-project 관계대수 연산과 상응
-Select name
from professor; //professor 테이블에서 모든 name을 찾아라 (name column 안 뽑음)
-select 절에서 수식표현의 절도 가능
Select pId, name, deptName, salary/12
from professor;
SQL언어는 입력과 결과 테이블에 터플의 중복을 허용합니다.
(관계형 DB는 비허용)
만약 중복을 허용하지 않고 싶으면 앞에 distinct 키워드를 붙이면 됩니다.
중복 값을 허용하는 결과테이블을 생성하고 싶으면 all 키워드를 사용합니다. SQL 기본값은 all입니다.
Select distinct deptName
from professor;
Select all deptName //default value
from professor;
"where" Clause
"where"절은 조건을 의미합니다.
예를 들어, 'CS' department의 8000보다 많은 소득이 있는 professors 이름을 찾아라
-Select name
from professor
where deptName = 'CS' and salary > 8000;
"and" "or" "not"의 논리연결자를 사용하여 결과를 비교할 수 있어요.
산술연산자보다 적용순위는 후순위입니다.
"from" Clause
질의에 관련 있는 테이블을 나열하며(lists the relations involved in the query),
이는 관계 대수의 카타시안 곱 연산에 대응됩니다.
예제) Find the Cartesian product of professor and teaches
-Select *
from professor, teaches;
카타시안 곱 여산 자체로는 유용성이 거의 없지만, where 절과 함께 사용되면 유용해요.
"where"조건은 참거짓판별을 해서 테이블에 포함/미포함 여부를 결정해요.
Joins
Select name, cID
from professor, teaches //두 개의 테이블 조인
where professor.pID=teaches.pID;// 두 터플 값이 같아야 의미가 있다.
'CS' department의 전공이름과 교수이름과 그의 수강과목을 찾아라.
-Select title, name
from teaches, course, professor
where teaches.cID=course.cID and teaches.pID = professor.pID
and course.deptName='CS'
Natural Joins
자연 조인은 두 테이블에서 동일이름을 가지는 속성 간에 조인 연산을 적용하며 결과 테이블에는 조인 속성에 대한 중복 제거하여 한번만 나옵니다.
Select * //8속성
from professor natural join teaches;
Select * //9속성
from professor, teaches
where professor.pID=teaches.pID;
아래의 예시는 professor테이블의 pID와 teaches테이블의 pID 모두 나와서 9개의 속성이 나오고
위의 예시는 두 개의 pID 속성 값이 같은 터플이 조인되며 총 8개의 속성이 나와요.
'데이터베이스 DB' 카테고리의 다른 글
[데이터베이스/DB] 데이터베이스 언어_DDL, DML, DCL, SQL의 DDL기능 (0) | 2020.10.21 |
---|---|
[데이터베이스/DB] 관계 대수 Relational Algebra_2(추가) 확장관계대수 (0) | 2020.10.14 |
[데이터베이스/DB] 관계 대수 Relational Algebra_1 기본대수 (0) | 2020.10.14 |
[데이터베이스/DB] 관계형 데이터 모델 Relational Data Model (0) | 2020.10.13 |