관계대수
원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 잘의하는 방법을 기술하는 언어
절차적언어,
하나 이상의 릴레이션 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인할 수 있음
sql언어에서는 관계해석을 기반으로 하나, dbms 내부에서 관계 대수에 기반을 둔 연산을 수행하여 최종 결과 집합을 반환
관계대수와 관계해석은 얽혀있다는 것임.
SQL -> 데이터 조작어(DML)
ex)
SELECT name, publisher //속성 이름이 들어감 (칼럼명)
FROM test //테이블 이름이 들어감
WHERE price>=10000;// 조건이 들어감
*->asterisk 라고 부름, 모든 열을 나타낸다.
DISTINCT-> 중복제거를 해준다.
ex) SELECT DISTINCT publisher FROM test;
라고 치면 test 테이블에서 publisher만 보여주는데 이때 DISTINCT 때문에 중복은 제거해주고 보여준다.
WHERE-> 조건에 맞는 검색을 할 때 사용한다.
WHERE절에 쓸 수 있는 명령어는 비교(=, <, >, <=, >=, <>), 범위( BETWEEN ->사용할땐 BETWEEN $ AND ^&),
집합(IN, NOT IN), 패턴(LIKE), NULL(IS NULL, IS NOT NULL), 복합조건(AND, OR, NOT)
ex)
SELECT *
FROM test
WHERE price BETWEEN 10000 AND 20000;
-> price가 10000 이상 20000 이하인 튜플 출력
SELECT *
FROM test
WHERE publisher IN( '가나다라', '마바사');
-> publisher가 가나다라 이거나 마바사 인 튜플 출력
SELECT *
FROM test
WHERE publisher NOT IN('가나다라', '마바사');
-> publisher가 굿스포츠가 아니거나 대한미디어가 아닌 튜플 출력
SELECT *
FROM test
WHERE name LIKE '아자카타파';
-> name이 아자카타파인 튜플을 출력
SELECT *
FROM test
WHERE name LIKE '%가나다%';
-> name에 가나다 가 포함된 튜플을 출력
와일드카드-> +, %, [], [^], _ 가 있다. 각각 문자열 연결, 0개 이상의 문자열과 일치, 1개의 문자와 일치, 1개의 문자와 불일치, 특정 위치의 1개의 문자와 일치의 역할을 가지고 있다.
AND , OR, NOT을 사용하면 복합조건을 명시할 수 있다.
ex)
SELECT *
FROM test
WHERE price>=10000 AND price<=10000
-> price가 10000 이상 그리고 10000 이하인 튜플을 출력한다(즉, 전부 출력한다는 것임)
ORDER BY-> 오름차순 또는 내림차순으로 출력할 때 쓴다.
ex)
~
ORDER BY price
-> 기본적으로 price를 오름차순으로 출력한다.(즉, 기본값은 오름차순이다)
~
ORDER BY price DESC, name ASC;
-> price를 내림차순으로 출력한다 같으면 name 오름차순으로 출력한다.
집계함수->집계된 정보를 필요로 할 때 사용한다.
SUM, AVG, MIN, MAX, COUNT
ex)
SELECT SUM(price)
FROM test;
->price의 총합계를 구해서 출력한다.
SELECT SUM(price) AS sumprise
FROM test;
->sumpirse라고 이름을 붙여서 SUM(price)가 출력된다. 요즘에는 AS 생략이 가능하다.
SUM->합계, AVG->평균, COUNT->갯수세기, MAX->최댓값, MIN->최솟값
GROUP BY->속성 값이 같은 값끼리 그룹을 만들 때 사용한다.
->좀 어렵다 ;;;
ex)
SELECT aaa, COUNT(*) AS 숫자세기, SUM(price) AS 합계보기
FROM test
GROUP BY aaa;
-> aaa가 같은 그룹으로 묶고 그 그룹의 숫자를 세서 숫자세기, price를 합쳐서 합계보기를 만들어 출력해서 보여준다. (꼭, 한번 해보는게 도움이 될 것이라 판단한다)
HAVING->GROUP BY로 묶으려고 하는데 그룹을 제한해서 묶게 할 때 사용한다.
-> 어려우니 나중에 꼭 한번 해보자
ex)
~
HAVING COUNT(*)>=3;
->COUNT(*)가 3이상인것으로 제한한다.