p.313
MariaDB에서 제공하는 데이터의 무결성을 위한 6가지 제약 조건
- PK 제약 조건 : 기본 키 제약 조건
- FK 제약 조건 : 외래 키 제약 조건
- UNIQUE 제약 조건 : 중복되지 않는 유일한 값을 입력해야 하는 조건으로 PK 제약 조건과 다르게 NULL 값을 허용한다
- CHECK 제약 조건 : 입력되는 Data를 점검하는 기능
- DEFAULT 정의 : Data가 입력되지 않았을 때, 자동으로 입력되는 기본 값을 정의하는 방법
- NULL 값 허용 : 입력받을 Data에 NULL 값을 허용할지 말지 설정하는 방법
p.171
기본적인 SQL 문장은 SELECT / INSERT / UPDATE / DELETE 가 있다
- 가장 많이 사용하는 구문으로 순서가 중요하다
select ~ from where ~ group by ~ having ~ order by ~ 순서다
- 사용자가 입력한 데이터 베이스를 사용한다고 지정해준다
USE '사용할 데이터 베이스 이름';
- 240 : MariaDB에서 SQL문이 처리된 순번
- Affected rows : 변경된 행의 개수
- 찾은 행 : SELECT문의 조회된 행의 개수
- 경고 : 경고가 발생될 경우 경고의 개수
- 지속시간 1 쿼리 : 실행된 쿼리의 개수와 쿼리가 실행된 시간
- 시간 . network : 네트워크 전송 시간
- SELECT할 때 해당 Column의 이름을 변경해서 출력한다. 이는 실제로 변경된 것이 아닌, 출력창에서만 변경된 것이다
- 한 줄 주석은 ' -- ' 이후부터 주석 처리된다
- 여러 줄 주석은 ' /* */ '로 주석 처리한다
p.186
- 조회하는 결과에 특정한 조건을 줘서 원하는 Data만 보고싶을 때 사용
- WHERE 조건식 형식으로 사용한다
- WHERE 'COLUMN 이름' = '조건에 해당하는 정보' 형식으로 사용한다
- 로그인을 할 때 사용자가 입력한 PASSWORD와 서버에서 DB에 접속해서 ID에 대한 WHERE을 통해 가져온 PASSWORD를 비교해서 인증한다
- 관계를 비교해주는 연산자로 NOT, AND, OR 등이 있다
- 보통 조건 연산자 ( =, <, >, <=, >-, <>, != 등 ) 과 함께 사용한다
- 조건 연산자가 아닌 BETWEEN과 AND를 통해 DATA의 범위를 조건으로 지정할 수 있다
- 연속적인 값이 아닌, 이산적인 값을 찾을 때 사용
- %는 해당 부분 전/후로 무엇이든 허용한다는 의미
- _은 해당 부분에 한 글자만 허용한다는 의미
- 김%는 김 다음에 몇 글자든 올 수 있다. 즉, 김~ 에 해당하는 DATA를 찾는다
- _종신은 종신 앞에 한 글자만 허용한다. 즉, X종신에 해당하는 DATA를 찾는다
- _범%은 범 앞에 한 글자만 허용하며, 범 뒤에는 몇 글자든 다 허용한다
쿼리 내에 또 다른 쿼리를 추가하여 작업을 수행하는 방법
- 만약, " 김범수보다 키가 큰 사람들의 목록을 출력하라 " 를 원하면
- 김범수의 키를 구한다
- 조건에 김범수의 키를 두고, 이를 비교하여 큰 사람을 출력한다
- ( ) 를 통해 서브 쿼리를 처리한다
- 이렇게 두 번의 작업을 두 개의 쿼리가 아닌 쿼리 내에 쿼리를 추가해서 하나의 쿼리로 처리한다
Quiz. 성시경과 살고 있는 지역이 같은 사람들의 이름, 키, 지역을 출력하는데, 키가 큰 사람부터 출력하시오
- 이렇게 쿼리를 작성하면 된다. 정렬 조건을 두 개 붙이면, 앞에 조건으로 먼저 정렬하고, 해당 조건에 대해 동일한 결과에 대해서 두 번째 정렬 조건을 적용시킨다. 즉, 키 순서대로 정렬하고, 키가 동일한 DATA는 이름으로 정렬한다는 의미다
- 쿼리 결과가 출력될 때 출력되는 순서를 조절하는 구문
- ORDER BY ' 순서의 기준이 되는 column 명 ' ' 정렬 방식 ' 형식으로 사용한다
- 기본적으로 정렬 방식은 오름차순 이며, 따로 정렬 방식을 지정시 오름차순은 ASC , 내림차순은 DESC 이다
- 서브 쿼리를 통해 다수의 값이 나오면 오류가 나온다
- ANY는 서브 쿼리를 통해 나온 값이 다수일때, 이 값들을 각각 조건으로 사용한다. 즉, 또는 이라는 뜻이다
- 즉, 서브 쿼리에서 나온 값이 173과 170 이므로, 키가 173과 같거나 또는 170과 같은 Data들이 출력된다
SOME은 ANY와 동일한 의미로 사용된다
= ANY는 IN과 같다
- ANY와 다르게 서브 쿼리에서 나온 값이 다수일때, 이 값들을 전부 조건으로 사용하여, 모든 값에 대해 만족해야한다
- 즉, 키가 173보다도 커야 하고, 170보다도 커야한다
- 중복을 제거해준다
- 쿼리문을 통해 출력되는 개수를 조절한다
Quiz. 회원들의 정보를 출력하되, 이름, 키를 키 순서대로 출력하며, 동일한 키는 오름차순으로 출력하고, top 3만 출력하시오
- 이렇게 입력하면 된다
p.197
- 특정 열을 그룹으로 묶는 것으로, 주로 연산할 때 사용한다
- where 바로 뒤에 써야한다
- group by ' 그룹화 기준이 될 column 명 ' 형식으로 작성한다
- 집계 함수는 group by와 함께 쓰이며, Data를 그룹화해주는 기능을 한다
- AVG() : 평균 값
- MIN() : 최소 값
- MAX() : 최대 값
- COUNT() : 행의 개수
- COUNT(DISTINCT) : 행의 개수를 세는데, 중복은 1개로만 인정한다
- STDEV() : 표준 편차 값
- VAR_SAMP() : 분산 값
- 위와 같이 출력된 amount를 묶어보자
- userid를 기준으로 그룹화하여, 해당 amount를 모두 더했다
- 위와 같이 sum 안에서 연산을 시행할 수 있다. 위와 같이 AS를 통해 출력되는 column의 이름을 바꿀 때, 띄어쓸려면 ' ' 로 묶어줘야한다
- 평균을 출력해보았다
Quiz. 회원들의 지역별 거주 인원을 출력해라
- 다음과 같이 작성하면 된다
- AS로 column의 이름을 변경했을 때, 이 이름을 변수같이 사용할 수 있다. 위의 ' ORDER BY 거주인원 ' 은 ' ORDER BY COUNT(DISTINCT NAME) ' 과 같은 의미이다