MySQL

[MySQL] MySQL 명령어 사용하기

YaluStar 2023. 3. 8. 01:06

안녕하세요.

이번에는 MySQL의 SQL문 사용법에 대하여 연습해 보겠습니다.

 

1. SQL문

  • Structured Query Language
  • 구조적 질의 언어
  • 데이터베이스를 제어하고 관리할 수 있는 목적의 프로그래밍 언어

 

1-1. DDL (Data Definition Language)

  • 데이터베이스를 정의하는 언어
  • CREATE 데이터베이스, 테이블 등을 생성하는 역할을 한다.
  • ALTER 테이블을 수정하는 역할을 한다.
  • DROP 데이터베이스, 테이블을 삭제하는 역할을 한다.
  • TRUNCATE 테이블의 내용을 초기화시키는 역할을 한다.

 

2. 데이터 형식

2-1. 문자형 데이터 형식

  • char(n)
  • varchar(n)
  • tinytext(n)
  • text(n)
  • mediumtext(n)
  • longtext(n)

 

2-2. 숫자형 데이터 형식

  • tinyint(n)
  • smallint(n)
  • mediumint(n)
  • int(n) bigint(n)
  • float(길이, 소수)
  • decimal(길이, 소수)
  • double(길이, 소수)

 

2-3. 날짜형 데이터 형식

  • date
  • time
  • datetime
  • timestamp
  • year

 

연습용 코드

// 데이터베이스 생성 + utf8 인코딩 설정
CREATE DATABASE test DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

// test 데이터 베이스 사용
use test;

// member 테이블 생성
create table member (
	name varchar(10),
	gender varchar(2),
	age int,
	registered timestamp
);

// member 테이블 생성
// ID, name, birthday 컬럼에 null 값 불가 설정
create table member (
	ID varchar(10) not null,
	name varchar(10) not null,
	birthday date not null
);

// member 테이블에서 birthday 컬럼 삭제
alter table member drop column birthday;

// member 테이블에서 brithday 컬럼 date 형식으로 추가
alter table member add column birthday date;

// member 테이블에서 brithday 컬럼에 null 값 불가능 추가 수정
alter table member modify column birthday not null;

// member 테이블 삭제
drop table member;

// member 테이블 생성
// 모든 컬럼 null 값 불가
// ID 컬럼에 primary key 설정
// name 컬럼에 값 입력 없을 시 '홍길동' 기본 값 적용
create table member (
	ID varchar(10) not null primary key,
	name varchar(10) not null default '홍길동',
	birthday date not null
);


create table member (
	id varchar(20) not null primary key,
	name varchar(5) not null,
	age int,
	gender varchar(2) not null,
	email varchar(50),
	promotion varchar(2) default 'x'
);

// member 테이블의 id 컬럼 수정
alter table member modify id varchar(10) not null;

// member 테이블 설정 보기
desc member;

// member 테이블에서 age 컬럼 삭제
alter table member drop age;
desc member;

// member 테이블에서 interest 컬럼 varchar(100) 형식으로 추
alter table member add interest varchar(100);
desc member;

 

3. DML

  • Data Manipulation Language
  • 데이터베이스의 내부 데이터를 관리하기 위한 언어
  • SELECT - 데이터베이스에서 데이터를 검색하는 역할을 한다.
  • INSERT - 테이블에 데이터를 추가하는 역할을 한다.
  • UPDATE - 테이블에 데이터를 수정하는 역할을 한다.
  • DELETE - 테이블에 데이터를 삭제하는 역할을 한다.

 

user 테이블 생성

create table user (
	ID varchar(10) not null primary key,
	name varchar(5) not null default '홍길동',
	age int not null
);
desc user;

 

SELECT

  • select * from 테이블이름;
  • 테이블 안의 데이터를 확인할 때 사용하는 명령어

 

INSERT

  • insert into 테이블이름 (열) values (값)
  • 테이블에 데이터를 삽입하는 명령어
insert into user (ID, name, age) values ('a', '테스트', 99);
select * from user;

 

insert into user (ID, name, age) values ('b', '테스트', 99);
select * from user;

 

insert into user values('c', '테스트', 99);
select * from user;

 

SELECT  - 2

user 테이블의 모든 필드 조회

select * from user;

 

user 테이블의 ID 필드만 조회

select ID from user;

 

user 테이블의 ID, name 필드 조회

select ID, name from user;

 

SELECT - WHERE (조건)

  • select * from 테이블이름 where 필드명 = ‘값’;
  • 비교를 위해 테이블에 값 1개를 추가
  • 비교 연산자 ( = , <, >, <=, >=)
  • 부정 연산자 (!=, ^, <>, NOT 컬려명 = )
insert into user (ID, name, age) values ('d', '홍길동', 99);
select * from user where name = '테스트';

 

name = ‘테스트’인 값만 출력이 돼서 ‘홍길동’은 검색 결과에서 안 나옵니다.

 

부정 연산자 (NOT 컬럼명 = )

select * from user where not name = '테스트';

 

SELECT - ORDER BY (정렬)

  • select * from 테이블이름 order by ‘필드명’;
  • 특정 필드를 기준으로 오름차순, 내림차순으로 정렬할 수 있다.

 

ASC - 오름차순

  • ID를 기준으로 오름차순 정렬
  • ASC는 기본적으로 생략이 가능합니다.
select * from user order by ID ASC;

 

DESC - 내림차순

  • ID를 기준으로 내림차순 정렬
select * from user order by ID DESC;

 

SELECT - WHERE + ORDER BY

  • 조건 + 정렬
  • order by는 where 보다 뒤에 있어야 한다.
  • 이름이 테스트인 결과를 id를 기준으로 내림차순 정렬하여 보여준다.
select * from user where name = '테스트' order by id desc;

 

SELECT - LIMIT

  • 조회 결과에 개수 제한을 걸어서 보여준다.
  • limit는 제일 뒤에 작성한다.
  • 조회 결과에서 2개만 보여준다.

 

SELECT - BETWEEN

  • a부터 b 사이의 값을 조건으로 검색한다.
  • 코드 체크를 위해 insert로 값 1개 추가
  • 홍길동2, 80은 between 조건에 포함이 안 돼서 조회 결과에 나오지 않는다.
insert into user (ID, name, age) values ('e', '홍길동2', 80);
select * from user where age between 81 and 99;

 

SELECT - IN

  • IN 안의 값에 해당하는 것만 조회한다.
select * from user where name in('홍길동');

 

SELECT - LIKE

  • 포함하는 글자에 해당하는 것만 조회한다.
select * from user where name like '%길%';

 

select * from user where name like '%트%';

 

  • like 뒤에 %는 아무 글자에 해당하는 조건을 뜻합니다.
  • 다음과 같이 작성되면 앞에는 무슨 글자가 와도 상관없지만, 마지막은 ‘동’으로 끝나야 합니다.
select * from user where name like '%동';

 

select * from user where name like '홍%';

 

  • like 뒤에 _ 를 작성하면 1글자만 해당한다는 의미입니다.
select * from user where name like '%동_';

 

select * from user where name like '홍__';

 

SELECT - IS NULL

  • 특정 필드의 값이 null 이면 조회한다.
  • 현재 테이블 구조에서는 null 이 없기 문에 조회가 되지 않는다.
select * from user where name is null;

 

  • NOT + IS NULL
  • name이 null이 아닌 값들을 조회한다.
select * from user where not name is null;

 

논리연산자

  • AND
  • OR
  • NOT

 

AND

  • A and B ⇒ A와 B 조건 전부 해당하는 경우
  • name이 null 값이 아니고, name이 ‘테스트’인 값만 조회한다.
select * from user where not name is null and name='테스트';

 

name이 null 값이 아니고, 나이가 80~90 사이인 경우 조회한다.

 

OR

  • A or B ⇒ A 또는 B 조건 중 1개만 해당하는 경우

 

UPDATE

  • 테이블 값을 수정할 때 사용
  • UPDATE 테이블 명 set (필드명=값, 필드명2=값);

 

조건을 안 걸어서 user 테이블의 age가 전부다 20으로 바뀐다. [코드 실행 X]

update user set age = 20;

 

where 조건 걸어서 다시 실행

update user set age = 20 where name = '테스트';

 

MySQL 업데이트 이후에 정보를 한 번에 여러 개를 변경하려고 하면 Error 메시지가 출력됩니다.

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

 

  • 코드를 수정해서 1개만 변경합니다.
  • id가 a인 데이터의 age를 20으로 수정합니다.
update user set age = 20 where id = 'a';
select * from user;

 

DELETE

  • 테이블 값 삭제할 때 사용
  • DELETE FROM 테이블 명;
  • id가 a인 데이터를 삭제한다.
delete from user where ID = 'a';
select * from user;

 

TRUNCATE

  • 테이블 값을 초기
  • truncate 테이블 명;
truncate user;
select * from user;

 

이상으로 MySQL의 SQL 명령어에 대하여 알아보았습니다.

원래는 더 많은 명령어가 있지만, 이 정도만 알아보도록 하겠습니다.

감사합니다.

 

반응형