데이터베이스/MySQL

[MySQL] 데이터 수정, 삭제, 검색, where

caramel-bottle 2023. 9. 19.

 


복습

데이터베이스 MK에 테이블 생성하기.

create table

CREATE TABLE MK_member (
    userid VARCHAR(20) PRIMARY KEY,
    userpw VARCHAR(20) NOT NULL,
    name VARCHAR(20) NOT NULL,
    hp VARCHAR(20) UNIQUE NOT NULL,
    email VARCHAR(50) NOT NULL,
    gender VARCHAR(10) NOT NULL,
    ssn1 CHAR(6) NOT NULL,
    ssn2 CHAR(7) NOT NULL,
    zipcode VARCHAR(5),
    address1 VARCHAR(100),
    address2 VARCHAR(100),
    address3 VARCHAR(100),
    regdate DATETIME DEFAULT NOW(),
    point INT DEFAULT 0
);

생성된 테이블 확인.

desc MK_member;

 


select * from 으로 데이터 확인하기.

select * from MK_member;

 


필드 추가하기

insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('apple', '1234', '사과', '010-1111-1111', 'apple@apple.com', '여', '990101', '2203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('banana', '1111', '바나나', '010-1121-1111', 'banana@banana.com', '여', '000101', '4203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('orange', '2222', '오렌지', '010-1234-1441', 'orange@orange.com', '남', '990101', '2203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('melon', '3333', '멜론', '010-1112-1551', 'melon@naver.com', '남', '991201', '244246');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('avocado', '4444', '아보카도', '010-2211-1341', 'avocado@avo.com', '여', '970102', '2203326');

 

복습 끝.

 

 

데이터를 다루기 위해서는 데이터베이스를 생성해야한다.

이전에 생성한 데이터베이스에 접근하기 위해 use 키워드를 사용한다.


데이터 수정하기

use

use MK;

 

Action Output을 확인하면 에러 없이 MK에 접근 성공한 것을 알 수 있다.

 


데이터베이스 테이블 가져오기

select * from MK_member;

 


update

테이블에 입력되어있는 데이터를 수정하기 위해서는 update를 사용한다.

 

/*
	데이터 수정하기
	update 테이블명 set 필드명1=값1, 필드명2=값2 ...;
	-> 필드에 값이 다 바뀜.
    
	update 테이블명 set 필드명1=값1, 필드명2=값2 ... where 조건절;
	-> 조건에 해당하는 값을 바꿔줌.
	-> where 연산자.
*/

 

update word set lev=2 where eng = 'orange'; -- where 뒤에는 무조건 '=' 같다 라는 의미.

이전에 만든 word 테이블을 수정해본다.

조건절을 사용하여 eng 항목이 orange일 경우에 lev값을 변경하도록 한다.

 

update word set lev=2;
-- 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
-- <<safe update mode>>

-- 전체 데이터를 바꾸려고 하면 일단 오류가 남.

필드값이 다 바뀌는 코드를 실행하면 위와 같은 에러가 난다.

safe update mode가 활성화되어있기 때문에 나는 에러이므로 세이프 모드를 꺼야한다.


safe update mode

set sql_safe_updates=0; -- 일시적인 safe모드 해제.


-- workbench settings에서 SQL Editor -> Safe Updates 체크 해제 -> 재시작 -> 영원히 Safe 모드 해제.

코드를 입력하여 일시적으로 safe 모드를 해제할 수 있지만 영구적으로 safe 모드를 해제하기 위해선 설정이 필요하다.

 

위 체크박스를 해제하면 safe 모드를 끌 수 있다.


데이터 수정

MK_member 테이블의 point값을 임의로 다음과 같이 수정하였다.

update MK_member set point=point+50;

point에 point + 50을 넣겠다는 의미로 아래 결과를 보면 point 값들이 50씩 더해진 것을 볼 수 있다.


로우 수정

update MK_member set zipcode='12345', address1='서울시 동대문구', address2='전농동', address3='xx아파트 101동' where userid = 'apple';

 

필드를 더 채우기 위해 위와 같이 코드를 작성하였고 결과를 잘 얻을 수 있었다.

 


데이터 삭제하기

데이터 수정의 연장선인 데이터를 삭제하는 방법이다.

 

데이터 삭제하기

/*
	데이터 삭제하기
	delete from 테이블명;
	delete from 테이블명 where 조건절;
*/

 

delete from word where eng='orange';

word 테이블의 eng 필드중 orange에 해당하는 로우를 삭제한다.

보통 삭제하려는 필드는 primary key인 것이 좋다.

 

* SQL 연산자

SQL에서 사용 가능한 연산자

  • 산술 연산자: +, -, *, /, mod(나머지 연산자), div(몫)
  • 비교 연산자: =(같다), <, >, >=, <=, <>(다르다)
  • 대입 연산자: =
  • 논리 연산자: and, or, not, xor
  • 기타 연산자:
    • is: 양쪽의 피연산자가 모두 같으면 true, 아니면 false
    • between A and B: 값이 A 보다는 크거나 같고, B 보다는 작거나 같으면 true, 아니면 false
    • in: 매개변수로 전달된 리스트에 값이 존재하면 true, 아니면 false
    • like: 패턴으로 문자열을 검색하여 값이 존재하면 true, 아니면 false

데이터 검색하기

/*
	데이터 검색하기
	select 필드명1, 필드명2, ... from 테이블명;
*/

 

word 테이블에서 select를 사용하여 필드 데이터를 검색해본다.

select

select eng from word;
select eng, kor from word;
select kor, eng from word;

 

각각의 실행 결과이다. select는 순서에 따라서 결과도 달라지는 것을 알 수 있다.


select의 이해

select 100;
select 100 + 50;

 

 

100 + 50 의 결과는 좋은데 필드 이름이 마음에 들지 않는다.

이럴때 사용하는 키워드가 'as'이다.


as

select 100 + 50 as '덧셈';
select 100 + 50 as 덧셈;
select 100 + 50 as '덧셈 연산';

 

위 두 줄의 결과는 같다. 별명에 들어가는 문자열은 ''(작은 따옴표)로 묶어줘도 되고 그대로 써도 된다. 하지만 띄어쓰기가 포함되어 있을 경우 꼭 ''(작은 따옴표)를 사용해야 한다.


두 개 이상 동시에 select

select 100 + 50, '덧셈';

select eng '영단어', kor '뜻' from word;

 

위와 같은 형식으로 두 개 이상의 필드를 만들거나 검색할 수 있다. 


모든 컬럼 가져오기

두 개, 세 개, ... 모든 필드를 찾아내고 싶을 경우엔 '*'를 사용한다.

-- *: 모든 컬럽 가져오기
select * from word; -- select eng, kor, lev, from word;, 라이브에 *는 사용하지 않는다.

-- *를 쓰면 느려지니까 잘 써야한다.
-- 원하는, 필요한 컬럼만 가져오기

select * from MK_member;

앞에서도 자주 사용했던 문장이다. 모든 컬럼을 가져오는 동작을 실행하는 경우 데이터 양에 따라서 실행 속도가 많이 느려질 수 있다. 따라서 보통 필요한 컬럼만 따로 꺼내오는 식으로 사용하는 것이 좋다. 

 

 

* null

테이블을 자세히 보면 null 키워드가 자주 등장한다.

null은 데이터가 없다는 의미로 '', ' ' 등 공백과 비어있다 라는 의미와는 다르다.

insert 자체가 되지 않았다는 의미로 필요시에 insert하여 값을 넣어줄 수 있다.

 

-- Null 은 '' 이거나 ' ' 이거나 공백과 null은 다르다.

-- null 과 ''

select null; -- 데이터가 없음, insert가 되지 않은 것
select ''; -- 해당 셀에 ''데이터가 삽입된 것

select 100 + null; -- 결과: null, 연산할 수 없음.
select 100 + ''; -- 결과: 100, 연산할 수 있음

조건절

select에서도 조건을 부여할 수 있다.

 

/*
	조건절
	select 필드명1, 필드명2, ... from 테이블명 where 조건절;
*/

조건이 부여된 select

select * from MK_member where userid='apple';

 

조건절에 다양한 연산자를 사용할 수 있다.

 

두 가지 조건을 같이 부여하고 싶을 경우, 두 조건을 and 나 or 논리 연산자를 사용한다.


is로 null 을 찾다.

select * from MK_member where zipcode = 'null';

위 코드는 zipcode필드에 null값이 있는 모든 로컬을 불러오라는 의미일 것이다.

하지만 실행 결과는 아무 결과를 가져오지 못한다.

null 값은 값 자체가 없다는 의미이므로 다른 연산자를 사용해야한다.

 

select * from MK_member where zipcode is null;

select * from MK_member where zipcode is not null;

between A and B

select * from MK_member where point between 300 and 500; -- 300 이상 500 이하

select * from MK_member where point >= 300 and point <= 500;

between A and B 는 A 보다 크고 B 보다 작은 값아야 true, 아니면 false를 의미한다.

따라서 위 두 코드는 같은 의미임을 알 수 있다.


name in ()

select * from MK_member where name in ('김사과', '바나나', '오렌지');

 

name 항목 괄호 안의 값인 로컬이 있는지 확인할 수 있다.


like

select * from member where userid like 'a%'; -- a로 시작하는 문자열

select * from member where userid like '%a'; -- a로 끝나는 문자열

select * from member where userid like '%a%'; -- a를 포함하는 문자

select * from member where userid like 'ap%'; -- ap로 시작하는 문자열

like를 사용하면 문자 하나 혹은 여러개가 포함되어 있는 로컬을 찾아준다.

 


 

댓글