국비교육

국비지원 48일차 (MySQL-Workvench문법)

재밌는개발러 2023. 10. 8. 12:00

※  Mysql 은 저번시간에 배워본  오라클 sql 이랑 문법은 비슷한 개념이 많을 것이다.

그래도 복습차원에서 다시 한번 mysql의 내용을 살펴보겠습니다.

 

1. db(스키마) 관련 

    1) db 생성
         create database 데이터베이스이름;
    2) db 삭제
         delete database 데이터베이스이름;
    3) db 조회
         show databases; -> (이 mysql내에 있는 모든 db들을 알려준다.)
    4) db 사용
         use 데이터베이스이름; -> (여러 db들이 있을 경우 이렇게 use를 사용하여 해당 db 안에 있는 내용들을 불러오겠다는           개념이다)

 

2. 테이블

    1) 테이블 조회
         show tables;
    2) 테이블 정보확인
         desc 테이블이름;
        
    3) 테이블 생성
         create table 테이블이름 (
            칼럼 1 타입 [옵션],
            칼럼 2 타입 [옵션],
            칼럼 3 타입 [옵션]
        );
        
@ 테이블 생성 예제

  create table classes (
               c_seqno int(10) not null auto_increment,  
               c_title varchar(255) not null,
               c_roomNo varchar(255) not null,
               c_openDate varchar(255) not null,
               c_closeDate varchar(255) not null,
               PRIMARY KEY(c_seqno)
             -- 외래키 예)foreign key(컬럼명) references 테이블이름(컬럼명),
         );


        int(10) => 숫자 10자리만큼 노출(저장도 10자리)
        varchar(255) => 문자
        auto_increment => 자동으로 1씩 증가하는 숫자
        datetime => 시간 날짜 입력
        
  4) 테이블 삭제 -> 테이블 이예 삭제하는 거
     drop table 테이블명; 

 

  5) 테이블 내용 초기화 idx= 0
      truncate 테이블명;

 

3. 레코드

    1) 추가(삽입) - insert 
       방법 1) insert into 테이블명 values (값 1, 값 2,....)
       값을 모든 칼럼 순서에 맞춰서 다 넣어줘야 한다.

       방법 2) insert into 테이블명 (칼럼명 1, 칼럼명 2,....) values (값 1, 값 2,....)
       *반드시 명시한 칼럼명의 순서와 값의 순서를 지켜야 한다.
       모든 칼럼의 값을 넣을 필요 없음. 내가 명시한 컬럼꺼만 넣어주면 됨

 

@ insert 예제

INSERT INTO classes VALUES (null, '자바', 'D강의장', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, 'C', '501', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, '파이썬', '302', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, '코틀린', '604', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, '자바', 'c강의장', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, 'C', 'c강의장', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, '파이썬', 'c강의장', '2023-07-27','2023-12-27');
INSERT INTO classes VALUES (null, '코틀린', 'c강의장', '2023-07-27','2023-12-27');

/* c_seqno int(10) not null auto_increment;  이렇게 null값이 있는 컬럼명이 c_seqno인데 여기에보면
 제약조건에 auto_increment 라고되있는데 이건 자동으로 순서대로 숫자가 기입되는것이다.
 그래서 null값으로 해놔도 자동으로 값이 insert 될시 1부터 순서대로 숫자가 매겨지게될것이다.
 한데, 문제가있는데 이렇게 자동으로 값이 매겨지는것을 
 delete from classes; 이렇게 클래스의 내용을 삭제하고 다시 추가할시 삭제한 idx 번호는 남아있어서 
 만약에 8개를 delete삭제했다고했고 다시 추가할시 c_seqno 번호는 9번부터 시작하게될것이다 이걸 초기화
 하기위해서는 
 alter table classes auto_increment=1; 이렇게 alter이용해 제약조건 auto_increment 의 값을 1로 초기화
 시켜야지 다시 추가할시 1부터 시작할것이다.
 또다른 방법으로는 delete로 삭제하지말고 truncate 테이블이름; 으로 테이블 내용초기화시 idx번호도
 같이 초기화가 되서 다시 추가할시 1부터 시작할것이다.
*/


      2) 조회 - select
        - 전체 컬럼 조회: select * from 테이블명;
        - 일부 컬럼 조회: select 필드 A, 필드 B,... from 테이블명;
        - 특정 조건에 조회: select * from 테이블명 where 필드명=값;
        - 중복제거: select distinct 필드명 from 테이블명;
           해당 필드의 중복이 있으면 하나로 압축해 준다.
        - 사이값: select * from 테이블명 where 필드명 between '값 1' and '값 2';
        - 검색: select * from 테이블명 where 필드명 like '% 값%'

 

@ select 예제(기본방식은 오라클 sql방식이랑 같다)

select * from classes where c_openDate between '2022-01-01' and '2022-12-12';
select * from classes where '2022-01-01' <= c_openDate  and c_openDate  <= '2022-12-12';

select * from classes where c_roomNo like '%강의장%' limit 3;


        * limit: 최대 row 개수 지정
           select * from classes limit 3; -- 전체 반 중에서 상위 3개만 나옴
        
       3) 변경 - update 
          update 테이블명 set 칼럼명=값 
          *주의: where 없이 실행하면 싹 다 바뀜
         
       4) 삭제 - delete -> delete 할시 인덱스 값 남아있음 그래서 삭제한 컬럼 인덱스번호 뛰고 다음 인덱스번호로 생성가능
          auto_increment=1 이렇게 초기화해줘야 된다 인덱스 초기화하려면
          delete from 테이블명 where 칼럼명=값;
          *주의: where 없이 실행하면 싹 다 바뀜
        
       * auto_increment를 사용중인경우 delete 명령문 사용시 숫자가 이빨빠지게 된다. 
        그래서 auto_increment 를 초기화해줘야 한다.
        alter table 테이블명 auto_increment=1; 

 

      4. 기존 테이블(칼럼) 변경

         1) 추가 - alter table 테이블명 add 칼럼명 타입 [옵션]
           ex) alter table classes add s_gender varchar(10) not null;
         2) 삭제 - alter table 테이블명 drop
           ex) alter table classes drop s_gender;
         3) 컬럼 수정 -  alter table 테이블명 modify 컬럼명 타입 [옵션]
           ex) alter table students modify s_gender2 char(50) not null;
         4) 컬럼명 수정 - alter table 테이블명 change 기존칼럼명 새 칼럼명 칼럼타입
           ex) alter table students change s_gender2 s_gender int(10) not null;
          *4번으로 3번꺼 가능
          *해당 칼럼이 not null 인 경우 값이 뭐라도 들어있어야 3,4번 칼럼타입 적용됨

 

@ alter 예제

alter table students add s_gender2 varchar(10) not null; -- s_gender 필드 추가
select * from students;
alter table students drop s_gender; -- s_gender 필드 삭제
alter table students modify s_gender2 int(10) not null;
alter table students change s_gender2 s_gender int(10) not null;

 

         5) 테이블명 변경
           rename table 기존이름 to 새 이름; 
           ex) rename table classes to classes22; 
 

      5. join

        1) inner join (교집합)
          - inner join 은 ON 절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만 가져온다.

        2) left join
         - 첫 번째 테이블을 기준으로 두 번째 테이블을 조합하는 join 방식
           ON절이 만족하지 않으면 왼쪽(첫 번째 테이블)거는 다 가져온다.
           나머지 부분은 null로 표시된다.

        3) right join 
         - left join 과는 반대로 두 번째 테이블이 기준으로 첫번째 테이블을 조합하는 방식
           ON절이 만족하지 않으면 두번째 테이블 꺼는 다 가져온다.
           나머지(첫 번째 테이블 파트)는 null로 표시된다.

 

@join예제

-- 조인 join
select c.*, ct.code, ct.name, ct.region 
 from city C 
	right join country CT 
		ON C.countrycode = CT.code;