추가적으로 더 정리하고 싶은 부분을 정리한 내용은 아래와 같음.
함수엔 크게 두 가지의 종류가 있다.
집약함수의 대표적인 다섯 가지는 아래와 같다.
이러한 집야감수는 기본적으로 NULL을 제외하고 집계한다.
하지만 COUNT(*)는 NULL을 포함한 전체 행을 집계한다.
또한 SUM, AVG를 제외한 나머지 함수는 수치 데이터 외에도 사용 수 있다.
예를 들어, city 컬럼의 MAX는 'Y'로 시작하는 'Yosu', MIN은 'A'로 시작하는 'Andong'이 된다.
SQL 표준에는 없지만 MySQL에는 GROUP_CONCAT 함수가 있다.
GROUP_CONCAT은 문자열에 대한 집계를 문자열의 결합으로 수행한다.
근데 이 경우에는 예상 외의 길이를 가진 결과가 return 되는 경우가 많기 떄문에, GROUP_CONCAT 함수의 결과를 저장하거나 표시하는 경우 주의할 필요가 있다.
시스템 변수로 상한선(1024바이트)이 정해져 있어서 그 이상의 문자열은 잘리기 때문
데이터 변경시엔 UPDATE 테이블명 SET 컬럼명=값
사용.
하지만 얘는 SET에 명시한 것 외에는 변경되지 않기 떄문에 주로 UPDATE 테이블명 SET 컬럼명 = 값 WHERE 조건
사용한다.
복수 열의 동시 갱신도 가능하다.
UPDATE CITY SET NAME = '시흥', POPULATION = 432390 WHERE COUNTRYCODE = "KOR" AND DISTRICT = "Kyonggi" AND NAME = "Sihung";
행 단위로 수행되기 때문에 테이블 정의를 명확하게 알아야 한다.
SHOW CREATE TABLE 테이블명\G
로 확인 가능.
단순히 열의 정보를 알고 싶은 경우에는 Oracle과 호환되는 명령인 desc 테이블명
으로도 확인 가능하다.
INSERT문의 기본 구분은 INSERT INTO 테이블명(열1[,열2,..]) VALUES(값1[, 값2,...])
이다.
이때 테이블의 모든 컬럼에 대해 값을 설정하면 열 리스트를 생략해도 된다.
VALUES DEFAULT
로 해당 행에 해당하는 기본 값을 입력할 수도 있다. 아니면 컬럼 리스트에서 해당 값을 제거하면 자동으로 기본 값이 들어간다.
CREATE TABLE 테이블명1 LIKE 테이블명2
란 구문으로 테이블명2와 같은 구조의 테이블을 작성할 수도 있다.
INSERT문 하나로 신규 복수 행을 입력할 수도 있다.
INSERT INTO city(name, countrycode, district, poluation) VALUES ('Gimpo', '~', '~','~'), ('~','~','~','~')...
뷰를 사용하는 이점은 무엇일까
CREATE VIEW 뷰명 (컬럼명1[,컬럼명2, ...]) AS SELECT 문;
기본적으로는 어떤 행이 대응하는지 모르거나 어떤 값을 넣으면 좋을지 모르는 경우에는 갱신할 수 없다.
예를 들어 "GROUP BY로 집약한 수치"나 "DISTINCT"로 얻은 값을 갱신하는 경우엔 어떤 수치를 갱신하는 것이 좋을지 모르기 때문에 불가능하고
두 가지 이상의 테이블을 조합해 작성한 뷰를 갱신할 때는 어떤 테이블을 갱신하면 좋을지 몰라 할 수 없다.
뷰에서 원래 테이블의 일부 열만 선택되었다면 데이터를 삽입하려고 해도 선택된 열 이외의 열에 기본값도 없고 NULL도 허용되지 않는 상황에서는 해당 열에 넣을 수 있는 값이 없어서 실질적으로 뷰로의 삽입이 불가능.
SELECT 문의 결과를 마치 데이터처럼 다루거나 수치처럼 취급해서 조건문에 이용하는 경우, 이런 쿼리를 서브쿼리라고 부른다.
결합은 두 개의 테이블에서 필요한 열을 가지고 올 때 행을 결합하기 위한 조건을 "ON"으로 지정
내부결합에서는 이 ON으로 지정한 결합 조건에 일치하는 행만을 두 개의 테이블로부터 가져올 수 있다.
여기서는 두 개의 테이블에서 결합 조건에 일치하는 것만을 얻어낸다.
어떤 테이블을 기준으로 잡고 그 테이블에 있는 정보를 모두 표현하되, 조건과 일치하는 다른 테이블의 값도 함께 표현하는 것을 의미한다.