본문 바로가기

전체 글

(40)
[mySQL] 제약조건(CHECK) 제약조건NOT NULLPRIMARY KEYFOREIGN KEYUNIQUECHECK CREATE TABLE my_table(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),gender VARCHAR(1) CHECK ( gender IN ('M', 'F')));// M과 N 이외의 다른 입력이 들어가면 에러 발생. ALTER TABLE my_tableADD CONSTRAINT CHECK ( gender IN ('M', 'F') );// 기존 테이블에 제약조건 생성... 근데 안됨.. 왜 그럴까?
[mySQL] 조인(JOIN)과 유니온(UNION) SELECT A.name, B.toy FROM my_table ALEFT OUTER JOIN toys BON A.id = B.id;// 왼쪽 외부 조인// 왼쪽 테이블의 모든 행을 가지고 오른쪽 테이블 행과 비교// 조건에 맞는 값이 오른쪽에 없으면 NULL값이 셀에 출력된다. SELECT A.name, B.toyFROM my_table ARIGHT OUTER JOIN toys BON A.id = B.id;// 오른쪽 외부 조인 SELECT A.name name, B.name bossFROM clown_info1 AINNER JOIN clown_info2 BON A.boss_id = B.id;// 두 테이블의 데이터는 완벽히 같다, 즉 동일한 테이블 -> 셀프 조인// 아래와 같다 SELECT A.nam..
[mySQL] 외부 쿼리와 내부 쿼리의 결합 쿼리 안에 쿼리를 넣어서 사용함으로서 타이핑이 줄어든다. SELECT B.first_name, B.last_name, A.dayFROM my_table AS ANATURAL JOIN sub_table AS BWHERE A.day IN ('MON', 'TUE' , 'WEDN', 'SUN'); SELECT day FROM my_dayGROUP BY dayORDER BY day; 위의 두 문장을 하나로 합칠 수 있다. SELECT B.first_name, B.last_name, A.dayFROM my_table AS ANATURAL JOIN sub_table AS BWHERE A.day IN ( SELECT day FROM my_day );// 빨간글씨를 감싸는 문장은 외부 쿼리라 하고 빨간 글씨는 내부 쿼리..
[mySQL] 조인 (JOIN) INNER JOIN 1) 동등 조인SELECT 출력할 열들FROM 주 테이블 INNER JOIN 합성할 테이블ON 비교 연산 ; SELECT A.count_id, A.first_name, B.genderFROM my_table AINNER JOIN sub_table BON A.count_id = B.count_id; 2) 비동등 조인SELECT A.count_id, A.first_name, B.genderFROM my_table AINNER JOIN sub_table BON A.count_id B.count_idORDER BY A.count_id; // 해당하지 않는 모든 값을 출력 3) NATURAL JOIN (자연조인)SELECT A.count_id, A.first_name, B.genderFROM ..
[mySQL] 정규화와 AS 제1정규화같은 데이터가 여러 열에 반복되지 않게 하는 방법. 1) 첫 번째 방법CREATE TABLE toy( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, //기본키 생성 color VARCHAR(20) //색 데이터 열);INSERT INTO toy (color) // 정보를 담는다 SELECT color FROM my_table // 다른 테이블의 색 정보를 가져온다 GROUP BY color // 같은 데이터는 그룹화 ORDER BY color; // 정렬 2) 두 번째 방법CREATE TABLE toy AS SELECT color FROM my_table // 다른 테이블의 색 정보를 가져온다 GROUP BY color // 같은 데이터는 그룹화 ORDER BY ..
[mySQL] 정규화 방법1(원소화) 하나의 열에 여러 자료가 있을 경우 정규화 방법 1) family first, second, third 2) family first second third 2번 표와 같이 바꾸는 것 1) 열 추가ALTER TABLE my_tableADD COLUMN family1 VARCHAR(20),ADD COLUMN family2 VARCHAR(20),ADD COLUMN family3 VARCHAR(20); 2) 첫번 째 원소를 얻어낸다UPDATE my_tableSET family1 = SUBSTRING_INDEX( family, ',', 1);//family열에서 1번째 콤마(,)가 나오기 전까지 추출 family family1 family2 family3 first, second, third first 3) 옮기..
[mySQL] 스키마, 정규화 스키마 : 테이블과 테이블이 어떻게 연결되는지 표현한 것. 테이블을 두개로 만드는 방법1. 하나의 열을 없애고 없앨 열의 테이블을 따로 만들어 넣는다.2. 원래 테이블의 기본키를 새 테이블의 참조키로서 삽입한다.(두개의 테이블을 연결하는 방법) 참조키를 포함한 테이블 생성 방법CREATE TABLE family(basic_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, //family테이블의 기본키 지정family_name VARCHAR(30) NOT NULL, //열 생성f_id INT NOT NULL, //참조용 키(f_id) 생성CONSTRAINT my_table_count_id_fx //참조할 테이블과 그 기본키에 제약조건을 건다FOREIGN KEY ( f_id ) ..
[mySQL] SUM, AVG, MAX, MIN 등 SELECT문 SUM연산SELECT SUM(count)FROM my_tableWHERE last_name = 'JANG';//last_name열의 JANG에 해당하는 행 중에 count열의 수를 모두 합한 값을 출력 SELECT first_name, SUM(count)FROM my_tableGROUP BY first_nameORDER BY SUM(count) DESC;//first_name의 같은 값들을 그룹으로 만들어서 SUM연산 후 출력//같은 이름을 가진 사람들의 count 값을 모두 합한 값 내림차순 출력. SELECT first_name, AVG(count)FROM my_tableGROUP BY first_nameORDER BY AVG(count) DESC;//평균값 출력 SELECT first_name, M..