본문 바로가기
DB

sql 기초

by avvin 2019. 5. 1.

https://www.youtube.com/watch?v=ydvZzRPxOWM

↑빠르고 쉽게 설명 잘 돼있는 인강


SQL : DB 표준 언어 


01.정의어(DDL, definition)

: CREATE / ALTER / DROP


02.조작어(DML, manipulation)

: SELECT / UPDATE / INSERT / DELETE


03.제어어(DCL, control)

:GRANT / REVOKE / COMMIT / ROLLBACK


SQL 테이블 종류

  • 기본 테이블 : DDL에 의해 만들어지는 테이블
  • 뷰 테이블 : DDL에 의해 만들어지면 기본 테이블에서 필요한 부분만 떼와서 보는 테이블. 조작 제한
  • 임시 테이블 : DML에 의해 만들어지는 테이블. 뷰 테이블에서 복사해와서 조작


SQL 데이터타입

가변형이면 앞에 VAR붙음



02-1. SELECT ~ FROM 테이블명


DISTINCT 중복제거


EXISTS (  SELECT 조건  ) 충족하면 참, 충족 못하면 거짓 반환


UNION 합집합


INTERSECT 교집합


MINUS 차집합



02-2. INSERT INTO 테이블 

//데이터 삽입




02-3. UPDATE 테이블명 SET 열명 = 값    where 조건 

// 데이터 갱신




02-4. DELETE FROM 테이블 

// 데이터 제거



02-1. SELECT ~ FROM 테이블명


SELECT 문으로 테이블 내용 살펴보기

(MySQL은 대소문자 구분 없다)


SHOW DATABASES;

: DB목록보기


USE DB명;

SHOW TABLES;

: 해당 DB(schema) 테이블 보기




-테이블 행 수 카운트


SELECT COUNT(*) FROM 테이블 WHERE 조건





-검색 결과 정렬


select * from city where countrycode ='KOR' and district='Chollanam' order by population;





테이블 집약(요약 함수)


-한국 각 도시 인구의 최소, 최대, 총 수, 평균 출력하기


select min(population), max(population), sum(population), avg(population) from city where countrycode ='KOR';




행정구역이 '전라북도'인 도시 출력


select name from city where countrycode='KOR' and district='Chollabuk';


한 행으로 집약


select group_concat(name) from city where countrycode='KOR' and district='Chollabuk';




테이블을 그룹으로 구분


행정구역(district)별로 그룹을 나눠서 몇 개의 도시가 등록되어 있는지 확인


select district, count(*) from city where countrycode ='KOR' group by district; 


// group by [   ]를 기준으로 count를 나눠서 테이블에 출력해준다.


select count(*) from city where countrycode ='KOR' group by district;  

//select와 from 사이 요소가 테이블의 열을 구성한다






-중복 피하기( 중복 제거 )


select group_concat(district) from city where countrycode='KOR';


→ select group_concat( DISTINCT district ) from city where countrycode='KOR';


*concatenate : 사슬같이 잇다. (= 나열하다)




*\G는 세미콜론 대신에 쓸 수 있는 딜리미터로 결과를 세로로 보기 쉽게한다.



집약한 결과에 조건 지정


SELECT ~ FROM ~ GROUP BY ~ HAVING 그룹의 값에 대한 조건


select district, count(*) from city where countrycode='KOR' group by district having count(*) = 6;




select district, count(*) from city where countrycode='KOR' group by district having count(*) > 6 order by count(*) desc;








02-2. INSERT INTO 테이블 


INSERT는 행단위로 수행되므로 행을 구성하는 열의 정의 정보를 포함한 테아블 정의를 정확하게 알아야한다.


테이블의 정의를 알려주는 명령어

SHOW CREATE TABLE 테이블명

 해당 데이터베이스의 테이블의 구조가 쿼리형태로 출력




단순히 열의 정보가 알고싶을 때는 Oracle과 호환되는 명령어인 'desc 테이블명;'으로 확인


앞의 정보로 다음 내용을 알 수 있다.

1. 열수는 5
2. 각 열의 데이터 형
3. ID열은 기본키(PK)로 설정돼있으며 *AUTO_INCREMENT 속성이 붙어있다.

*AUTO_INCREMENT : 입력된 행에 대해 자동으로 유니크한 번호 추가

INSERT 문의 기본 구문

INSERT INTO 테이블명( 열1, 열2, ... ) VALUES (값1, 값2, ... )

VALUES에서 값을 설정면 테이블명의 열 리스트는 생략 가능

insert로 행 추가하고 확인해보기

insert into city(Countrycode) values('KOR'); 

select * from city order by id desc limit 3;



MySQL에는 복수행 입력(Multu row insert) 기능이 있어서 복수의 행 추가를 한문장으로 수행할 수 있다.

INSERT INTO CITY (NAME, COUNTRY) 
VALUES ('GIMPO', 'KOR'), VALUES ('POCHEON', 'KOR'), VALUES ('HWASEONG', 'KOR')



02-3. UPDATE 테이블명 SET 열명 = 값    where 조건 

// 데이터 갱신



02-4. DELETE FROM 테이블 

// 데이터 제거


기본 구문

DELETE FROM 테이블명;


기본 구문 형태로 사용하면 지정한 테이블의 전체 행이 제거되므로 거의 사용하지 않고, 

갱신하는 대상을 WHERE 구문으로 추려내는 구문을 주로 사용(조건에 맞는 각 행을 삭제)


'DB' 카테고리의 다른 글

테이블 설계의 기초  (0) 2019.05.12
트랜잭션과 동시성 제어  (0) 2019.05.09
데이터베이스와 아키텍쳐 구성  (0) 2019.04.30
데이터베이스 초기비용와 운영비용  (0) 2019.04.30
관계형 데이터베이스  (0) 2019.04.28