DQL(Data Query Language)
레코드 선택하는거 : 셀렉션
특정 컬럼 값만 조회하는 것 : 프로젝션(projection)
select nom name, tel from test1;
특정 값만 조회하는데 명령어는 select라 헷갈릴 수 있으니 유의하자
mariadb는 mysql과 99.5%가 같다. 그니까 거의 같다고 보면 된다.
/* 컬럼에 별명 붙이기*/
select 컬럼명 [as] 별명 ...
select
no as num,
concat(name,'(',class,')') as title
from test1;
/* as를 생략해도 된다.*/
select
no num,
concat(name,'(',class,')') title
from test1;
select no, name
from test1
where working='Y' and class='java100';
컬럼 값과 where절이 꼭 일치하지 않아도 원하는 결과를 도출할 수 있다.
select no, name, class, working
from test1
where not working = 'Y';
어떤
DBMS는 !=연산이 안됄수도 있다. 그리고 <>연산을 쓸 수도 있다.
select no, name, class, working
from test1
where working <> 'Y';
ex03 sql날짜부분 꼭 다시 복습하기
integrity : 완전한 상태, 무결
FK 제약 조건이 없을 때
첨부파일 데이터를 입력할 때 존재하지 않는 게시물 번호가 들어 갈 수 있다.
그러면 첨부파일 데이터는 무효한 데이터가 된다.
첨부 파일이 있는 게시물을 삭제할 수 있다.
마찬가지로 해당 게시물을 참조하는 첨부파일 데이터는 무효한 데이터가 된다.
이런 문제가 발생한 이유?
- 다른 테이블의 데이터를 참조하는 경우, 참조 데이터의 존재 유무를 검사하지 않기 때문이다.
- 테이블의 데이터를 삭제할 때 다른 테이블이 참조하는지 여부를 검사하지 않기 때문이다.
해결책?
- 다른 데이터를 참조하는 경우 해당 데이터의 존재 유무를 검사하도록 강제한다.
- 다른 테이터에 의해 참조되는지 여부를 검사하도록 강제한다.
- 이것을 가능하게 하는 문법이 “외부키(Foreign Key)” 이다.
- 다른 테이블의 데이터와 연관된 데이터를 저장할 때 무효한 데이터가 입력되지 않도록 하는 문법이다.
- 다른 테이블의 데이터가 참조하는 데이터를 임의의 지우지 못하도록 하는 문법이다.
- 그래서 데이터의 무결성(data integrity; 결함이 없는 상태)을 유지하게 도와주는 문법이다.
무효한 데이터가 있는 상황에서는 FK를 걸 수 없다.
강사는 강의를 여러개 할 수 있다. 하지만 한 강의에 여러 강사가 투입 될 수 있다. 그러나 DBMS는 다대 다 관계를 표현할 방법이 없다. 이 모델링 방법에 대해서는 나중에 배운다.
GUI CLI
깃 데스크톱 어플을 깔아서 쓰면 GUI, cmd창으로 직접 제어한다면 CLI이다.
도메인에 대한 지식 : 비즈니스 도메인 지식을 줄여 말한것
일반개발자가 아무리 일을 잘해도 컬럼의 값이 무엇을 가리키는지 업무를 모르면 개발을 잘 할 수가 없다. 업무 지식이 쌓인다는 것 = 도메인 지식..
ex07-2
asc : 오름차순 (ascendent)
where조건이 없으면 이름에 대해서 전체오름차수한다.
ex07-03
조인
=> 서로 관련된 테이블의 데이터를 연결하여 추출하는 방법
=> 기법
1) CROSS 조인
2) NATURAL 조인
3) JOIN ~ ON
4) OUTER JOIN
ex07-05 6단계 : 조인결과 출력에는 이름이 나오지 않는다. 그래서 별명을 붙여줘야 한다.
ex07-06 :
서브쿼리를 이용할 때 컬럼 자리는 결과 값이 한개여야 한다.