본문 바로가기
SQL

[SQL] practice 2

by nemonemonemo 2025. 8. 11.

시작 과정

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에서는 내부적으로 인덱싱작업을 해둠!!!