시작 과정
show databases;
SHOW DATABASES;
shOw Databases;
use employees;
select * from employees;
use shopdb;
-- shopdb가 선택되어 있다고 가정하고,,
select * from membertbl;
select * from producttbl;
use shopdb;
select * from membertbl;
# select : print()
# select 필드/컬럼(들)/*(모드)[세로필터링] from 테이블이름(소속)
# ( where 가로에필터링 ) etc....
# ==> 새로운 나의 Table을 만들어보자!!
select * from membertbl; -- 지금 db내의 테이블명만..
select * from shopdb.membertbl; -- 속속 db를 명시화--> 출처테이블
select * from shopdb.`membertbl`;-- backtick : 1왼쪽 키보드
# ==> 테이블명에 공백이 들어갈 수 있어서;;;;
- Q) 회원테이블에서 회원이름, 주소만 보여주세요!!!!
select memberID, memberAddress from membertbl;
select memberAddress,memberID from membertbl;
- Q) 회원테이블에서 이름이 지운이 사람의 정보만 보여주세요
- 모든 가로줄이 아니라, 특정 가로줄 지정 ( 이름== 지운이
- 세로줄에 대한 볼 항목 : 모두 보여주세요!!!
select * from membertbl where memberName =="지운이";
# --> 파이썬 틱하게 작성하면 안 되요;;에러;;
select * from membertbl where memberName ="지운이";
select * from membertbl where memberName ='지운이';
select * from membertbl where memberName =`지운이`;
# ===> 문자열 값에 대한 비교/요청 : " ", '' 문장인용기호 중심
# `` 에러가 날 수 있음!!!
# ===> DB명 // table 이름 // field 명 : ``backtick중심!!!
# 컬럼/field의 문자열 값 : "", '' 인용기호 중심
# *** 3가지 기호를 잘 구별해야 한다 ****
- 참고) 테이블명에 공백이 있는 것을 하나 만들어 보겠습니다
create table `my testtbl` (id INT);
# ==> 테이블명에는 무조건 공백이 있으면 backtick로만 사용이 가능함!!!
select * from my testtbl; -- 에러 발생...
select * from 'my testtbl'; -- 에러 발생
select * from "my testtbl"; -- 에러 발생
select * from `my testtbl`; -- 에러 없음!!!
- 테이블 삭제
- workbench에서 db변경 명령어 금지를 풀고 하셔야 함!!!
rop table `my testtbl`;
select * from `my testtbl`; -- 해당 테이블이 없어서 에러~~~
- 참고) 큰 테이블에서 특정/원하는 레코드를 빨리 접근
- 인덱스( 색인 )
- PK이외의 특정한 부분을 대상으로 접근의 용이성을 위해서 색인작업을 한다면
create table indextbl ( first_name varchar(14),
last_name varchar(16),
hire_date date);
# --> pk에 대한 지정을 하지 않고 그냥 테이블을 생성한 것임!!!!
select * from indextbl;
# ==> 빈 공간에 employees 다른 동네 있는 테이블을 참조해서 넣고자 함!!!
# 지금 : shopdb ---> 접근하려는 정보 : employees DB동네!!
# ==> 하고 싶은 것 : shopdb 동네에서 employees동네의 employees 테이블 보는 것
select * from employees.employees limit 5; -- data.head(5)와 유사
# --> 필요한 정보는 first_name, last_name, hire_date만 필요하다...
# 나의 새로 만든 indextbl에 레코드를 추가하고 싶다!!
# ( 앞에서와 차별 : 덩어리로 넘기자!!)
select * from employees.employees limit 500;
# --> 내가 필요한 정보만 정확하게 필터링
select first_name, last_name, hire_date
from employees.employees
limit 500;
# 레코드 추가 할 떄 : 앞에서는 1개 데이터 별로 추가
# insert into~~~ value ();
# : 벌크로 보이는 테이블을 통으로 퉁~~ 추가.
# 담을 통(테이블)의 순서/ 형식이 맞아야 함!!!!
insert into indextbl
select first_name, last_name, hire_date
from employees.employees
limit 500
;
select * from indextbl;
# ==> 왼쪽 하단에 보면,,,indextbl 속성에서
# PK는 없이,,그냥 데이터만 들어 있는 테이블입니다!!!
- Q) indextbl에서 first_name이 Mary 동일한 사람을 검색해
select * from indextbl where first_name ="Mary";
# --> 임의의 컬럼의 값에 대해서 조회를 요청 ==> 그냥 주어진
# 전체 데이터를 Full Scan을 해서 진행!!!!
# 데이터의 수가 엄청 많아 지면,,,,,문제가 생길 수 있음...
# 색인을 만들려고 함 :
# ==> 책과 같이 생각하시면 됨
# 미리 주요 키워들에 대해서 색인으 만들면,,,,특정 값이 있는 곳만 찾아
# 가면 됨!!!
create index idx_firstname
on indextbl(first_name);
# ---> 위에서 했던대로 first_name이 Mary 검색해줘~~
select * from indextbl where first_name ="Mary";
# ==> 검색의 속도를 향상시킬 수 있음!!!
# : 레코드 수/ 데이터 수가 많을 때 중요한 정보/자주사용되는 정보
# 색인 작업을 할 때의 효율성을 볼 수 있다!!
# ( 세부적인 것은 구체 상황에 따라 케바케!)
# ==> 내부구현 Algo : Hash Table
# 파이썬에서 자료형 : Dict 자료형!......
# ==> mysql : table PK에서는 내부적으로 인덱싱작업을 해둠!!!