DDL 정의어
트렌잭션이 발생하지 않고 즉시 실행된다.
create, drop, alter
DML 조작어
select, delete, update
DCL 제어어
grant, revoke
query-0.sql
# 서브쿼리 (subQuery)
-- - 쿼리문 내에 또다른 쿼리문이 있는 형태
-- - 사용가능한 위치 select/from/where/having/order by/
-- insert/update
use world;
-- 국가명이 'South Korea'의 국가코드를 찾아 이에 해당되는 도시의 수를 표시하시오.
-- count(*)
select count(*)
from city
where countrycode=(
select code
from country
where name = 'South Korea'
);
-- city 테이븛에서 국가코드가 'KOR'인 도시의 평균 인구 수보다 많은
-- 도시들의 이름과 인구수를 표시하시오.(인구수가 많은순서로)
select name, Population
from city
where Population > (
select avg(Population)
from city
where countrycode='KOR')
order by Population desc;
# 집계(집합) 함수 : aggregation function
-- 테이블의 전체레코드를 대상으로 특정 컬럼을 적용해서 한개의 값을 리턴하는 함수
-- count() : 레코드의 개수를 리턴하는 함수
-- sum()/avg() : 컬럼값의 합/ 평균을 리턴.
-- max()/min() : 컬럼값의 최소/최대값을 리턴.
-- select aggregation_function(컬럼명) form 테이블명 where 조건명;
-- city테이블에서 국가코드가 'KOR'인 도시의 수를 표시하시오.
select count(*)
from city
where countrycode = 'KOR';
desc city;
-- city테이블에서 국가코드가 'KOR'인 도시들의 인구수 총합을 구하시오
select sum(Population)
from city
where countrycode = 'KOR';
-- city테이블에서 국가코드가 'KOR'인 도시들의 인구수 평균을 구하시오
select avg(Population)
from city
where countrycode = 'KOR';
-- city테이블에서 국가코드가 'KOR'인 도시들의 인구수중 최대값을 구하시오
select max(Population)
from city
where countrycode = 'KOR';
-- city테이블에서 국가코드가 'KOR'인 도시들의 인구수중 최소값을 구하시오
select min(Population)
from city
where countrycode = 'KOR';
question-7~14.sql
-- 문제7
-- 만들어놓은 mydb에 아래와 같이 테이블을 만들시오.
-- 테이블명 : video
-- 열이름 : 데이터 형식 NLL허용 PK 기타
-- video_id int X O 자동증가(1에서부터시작)
-- title varchar(20) X X
-- genre varchar(8) X X
-- star varchar(10) o X
use mydb;
drop table if exists video;
create table video(
video_id int not null AUTO_INCREMENT primary key,
title varchar(20) not null,
genre varchar(8) not null,
star varchar(10)
);
-- 문제8
-- 만들어진 video 테이블에 아래의 데이터를 추가하라.
-- null, '태극기휘날리며', '전쟁', '장동건'
-- null, '대부', '액션', null
-- null, '반지의제왕', '액션', '일라이저우드'
-- null, '친구', '액션', '유오성'
-- null, '해리포터', '환타지', '다니엘'
-- null, '형', '코미디', '조정석'
insert into video values
(null, '태극기휘날리며', '전쟁', '장동건'),
(null, '대부', '액션', null),
(null, '반지의제왕', '액션', '일라이저우드'),
(null, '친구', '액션', '유오성'),
(null, '해리포터', '환타지', '다니엘'),
(null, '형', '코미디', '조정석');
select *
from video;
-- 문제9
-- video 테이블에서 star값이 없는 것만 출력하시오.
select *
from video
where star is null;
-- 문제10
-- video 테이블에서 장르가 액션인것만 출력하시오.
select *
from video
where genre = '액션';
-- 문제11
-- video 테이블에서 주인공이 유오성인 것만 삭제하시오,
select *
from video
where star = '유오성';
delete
from video
where star = '유오성';
select *
from video;
-- 문제12
-- video 테이블에서 제목이 형인 것을 동생으로 바꾸시오.
update video
set title = '동생'
where title = '형';
select * from video;
-- 문제13
-- video 테이블에 있는 모든 데이터를 지우시오.
delete from video;
-- 문제14
-- video 테이블을 제거하세요.
drop table video;
query-5(테이블복사, group by, having, 집계함수).sql
-- 테이블을 복사하는 방법
use sqldb;
-- buy의 데이터 전부를 쿼리를 해서 새로운 테이블인 buy_copy로 복사함.
drop table if exists buy_copy;
create table buy_copy(
select *
from buy
);
desc buy;
desc buy_copy;
-- 테이블 복사를 하게 되더라도, PK, FK등의 제약조건은 복사가 되지 않음.
select *
from buy_copy;
-- 기본적 쿼리문 순서(매우 중요함)
-- 무조건 아래와 같은 순서로 작성을 해야한다.
-- select...
-- from...
-- where...
-- group by...
-- having...
-- order by...