데이터베이스 DB

[데이터베이스/DB] SQL의 DML기능_Select SQL 문장

이전 게시글에서 SQL의 DDL 기능을 알아보았어요.

[데이터베이스 DB] - [데이터베이스/DB] 데이터베이스 언어_DDL, DML, DCL, SQL의 DDL기능

 

[데이터베이스/DB] 데이터베이스 언어_DDL, DML, DCL, SQL의 DDL기능

DBMS는 여러가지 데이터베이스 언어를 지원합니다. 기능으로 나누면 DDL, DML, DCL 이렇게 분류할 수 있습니다. 표현방법으로 나누면 절차적언어(Procedural)와 비절차적/선언적(Non-procedural(declaritive))

hidemasa.tistory.com

이번엔 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개의 속성이 나와요.