kjh95.tistory.com/211

     

    SQL | Query 기초 2 | cmd

    gui가 없을 경우 방법 다른 테이블 들어가기 중간에 중지할때는 ctrl + c 커맨드 상에서 copy 방법 = 선택하고 Enter mysql> select * from city where CountryCode='KOR'; mysql> select * from c..

    kjh95.tistory.com

    kjh95.tistory.com/206

     

    MySQL | 설치 준비

    mysql server mysql workbench MySQL Community 8.0 설치 excute 눌러줌 excute 눌러줌 나머지 defualt값 나머지 defualt값 path 설정 확인하기 C:\Program Files\MySQL\MySQL Server 8.0\bin 시스템 변수 Pa..

    kjh95.tistory.com

     

    query-4(서브쿼리,정렬,distinct).sql

    use sqldb;
    
    -- 서브쿼리 : 쿼리문 안에 또 다른 쿼리문이 있는 것을 의미함.
    -- 키가 177초과되는 데이터를 출력하시오.
    -- 김경호의 키가 177을 알고 있을때 쿼리를 작성할수 있음
    -- 그런대 김경호라는 이름만 알고 키를 모른다면 어떻게 해야하나?
    -- 이때 서브쿼리 이용을 적절히 해주면 됨.
    
    select name, height
    from user
    where height > 177;
    
    -- 아래는 서브쿼리를 작성해서 위와 같이 동일한 결과를 출력함.
    -- 실행순서는 먼저 서브쿼리가 실행되고 그 결과값을 가지고 
    -- 메인쿼리(상위쿼리)를 진행함.
    -- 서브쿼리의 결과값이 177인것을 알수 있다.
    select name, height
    from user
    where height > (select height
    				from user
    				where name = '김경호');
    
    -- 아래 쿼리문을 실행해보면 에러가 발생. 그 이유는 서브쿼리 결과값이
    -- 반드시 1개여야만 비교대상이 된다.
    -- 서브쿼리의 결과값이 2개 나왔다는 것은 비교대상이 모호성이 발생함.
    select name, height
    from user
    where height > (select height
    				from user
    				where addr = '경남');
    
    -- 서브쿼리의 결과값이 170, 173임.
    -- 위의 코드에다가 서브쿼리 앞에 any를 붙임.
    -- 서브쿼리 앞에 any의 의미는 or 개념과 유사함. 170이거나 173이다.
    -- 170이상인 데이터이상인 데이터를 다 출력하겠다는 의미가 됨.
    -- 서브쿼리에서 반환하는 값은 키(height)라는 것임.
    select name, height
    from user
    where height > any (select height
    				from user
    				where addr = '경남');
    
    -- any나 some은 동일한 기능을 함.
    select name, height
    from user
    where height > some (select height
    				from user
    				where addr = '경남');                
    
    -- all은 서브쿼리의 결과값이 둘다 만족하는 데이터만 출력함.
    -- 즉, 170과 173이 있을때 두가지 다 만족하는 값은 173인 것임.
    select name, height
    from user
    where height > all (select height
    				from user
    				where addr = '경남'); 
    
    -- 부등호를 바꾸면 = 170,173과 똑같은 결과값(두가지다 해당한 값)만 리턴함.
    select name, height
    from user
    where height = any (select height
    				from user
    				where addr = '경남'); 
    
    -- 위의 코드를 in()를 이용해서 바꿔본 쿼리임.
    select name, height
    from user
    where height in (select height
    				from user
    				where addr = '경남'); 
                    
    -- 정렬
    -- 기본적으로 order by절을 사용함. 오름차순(asc)으로 정렬함. 기본값asc
    select *
    from user;
    
    select *
    from user
    order by name;
    
    -- desc : 내림차순, desc는 생략 불가함.
    select *
    from user
    order by name desc;
    
    -- 키가 큰사람부터 출력 
    select *
    from user
    order by height desc;
    
    -- 주소기준으로 오름차순 정렬뒤 이름은 내림차순 정렬
    select *
    from user
    order by addr asc, name desc;
                    
     -- order by절을 적절히 잘 이용을 하면 보기 좋게 정렬을 하기때문에
     -- 데이터 가독성이 높아진다.
    select *
    from user
    order by addr asc, name asc;
    
    -- user에서 회원들이 분포하고 있는 지역이 어딘지 알고 싶다.
    -- 아래와 같이 쿼리를 실행하면 중복된 데이터가 나오는 것을 알 수 있다.
    -- 그냥 사는 지역만 보고자 한다면 중복된 데이터를 제거하고 출력해야함.
    select *
    from user;
    
    -- 중복을 제거하는 키워드가 바로 distinct임.
    -- 현업에서 많이 쓰는 키워드이므로 반드시 기억해야함.
    select distinct addr
    from user;
    
    -- select distinct 컬럼명1, 컬럼명2,... from 테이블명 where 조건절.
    
    use world;
    desc city;
    -- 1) 국가코드가 'KOR'인 도시들의 국가코드를 표시하시오.
    select CountryCode
    from city
    where CountryCode = 'KOR';
    
    -- 2) 국가코드가 'KOR'인 도시들의 국가코드를 중복제거해서 표시하시오.
    select distinct CountryCode
    from city
    where CountryCode = 'KOR';
    
    use employees;
    
    select *
    from employees
    order by hire_date;
    
    -- limit을 쓰지 않고 출력하면 30만건을 다 조회해 가져와서 쿼리를 실행
    -- 하니 비효율적임.
    -- ==> limit 키워드를 적절히 이용함.
    select *
    from employees
    order by hire_date
    limit 30;
    
    -- 100번째 부터 5개 보여줌
    select *
    from employees
    order by hire_date
    limit 100, 5;
    
    -- 1000번째 부터 5개 보여줌
    select *
    from employees
    order by hire_date
    limit 1000, 5;        

     

    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;

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading