일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- string
- Python
- function
- nan
- pandas
- wcss
- del
- 덴드로그램
- numpy
- append()
- analizer
- 분류 결과표
- list
- elbow method
- 반복문
- dendrogram
- sklearn
- count()
- IN
- 최솟값
- DataFrame
- Machine Learning
- Dictionary
- insert()
- matplotlib
- hierarchical_clustering
- DataAccess
- data
- 최댓값
- len()
- Today
- Total
목록Database/MySQL (23)
개발공부

like를 사용하면 문자열 안에 원하는 문자열이 존재하는지를 검색 할 수 있다. 하지만 테이블 내 데이터가 점점 늘어나면 이 검색하는 like의 효율이 떨어지게 된다. 이때 문자열 컬럼에 fulltext를 설정하게 되면 해당 컬럼을 서치하는 속도가 빨라지게 된다. 이를 설정하는 방법을 알아보자. 이 테이블의 문자열 컬럼인 content 컬럼에 fulltext를 설정해 보겠다. 먼저 아래의 indexes를 누른다. 그리고 아래와 같이 새로운 인덱스 네임을 지정, type을 FULLTEXT로 설정해준 후 content를 인덱스 컬럼으로 설정하면 된다.

insert 할 경우에 Error Code: 1062. Duplicate entry는 insert 할 테이블의 특정 컬럼의 데이터가 unique 해야하는데 이를 어겨서 발생한다. 예를들어 아래와같이 user_id와 movie_id가 unique한 특성을 가진 review 테이블이 있을 때 만약 새로운 데이터를 insert 할 때 user_id 와 movie_id의 값을 똑같이 하여 저장하려 한다면 insert into review (user_id, movie_id, content) values (1, 1, '재미없어요') Error Code: 1062. Duplicate entry '1-1' for key 'review.user_id_movie_id' 0.000 sec 위와 같은 에러가 발생한다.

예를들어 영화의 리뷰 데이터를 담은 review 테이블이 있다고하자 이 review 테이블에는 유저의 고유 id인 user_id, 영화의 고유 id인movie_id, 리뷰 내용을 담은 content 정도의 컬럼을 가질 수 있다. 만약 여기서 user_id와 movie_id의 쌍은 똑같은 값이 여러개 올 수 있다면 리뷰 조작같은 일이 가능해진다. 그러므로 이 user_id와 movie_id는 unique해야한다. 이를 설정하는 법을 알아보자. 아래와 같은 테이블을 만들것이다. 테이블 생성창에 아래와 같이 입력하자 생성창 아래의 Indexes를 클릭하자. 그 후 아래와 같이 입력해주면 user_id와 movie_id는 unique 하다는 설정을 할 수 있다.

'= NULL '은 문법상 오류가 있다 NULL을 구분하기위해선 IS NULL이나 IS NOT NULL을 사용해야한다. people 테이블 위와같은 people 테이블이 있다. 여기서 age가 null인 데이터만 출력하고 싶다면 is null 을 사용하면 된다. select * from people where age is null; 반대로 age가 null이 아닌 데이터만 출력하고 싶다면 is not null 을 사용하면 된다. select * from people where age is not null;

GROUP BY 를 해서 나온 결과에 조건을 걸 때는 WHERE 을 사용하면 안되고, HAVING 을 사용해야 한다. 아래의 예시를 보자. customers 테이블 orders 테이블 각 고객별로 amount 평균이 300 달러 이상인 데이터만 가져오기 select c.id, c.first_name, c.last_name, c.email, avg(o.amount) as 'AVG' from customers c join orders o on c.id = o.customer_id group by c.id having avg(o.amount) >= 300; 위와 같이 avg(o.amount)는 group by 를 해서 나온 결과에 평균을 구한거라 where로 조건을 걸면 문법 오류가 발생한다. 그러므로 gro..

customers 테이블 orders 테이블 JOIN 하기 두개 테이블을 하나로 합쳐서 가져오기 select * from customers join orders on customers.id = orders.customer_id; 테이블의 이름을 줄여서 사용하는 방법 테이블명 바꿀이름(보통 첫글자를 따옴) select * from customers c join orders o on c.id = o.customer_id; 만일 컬럼의 이름이 중복되는 경우는컬럼명을 바꿔서 가져와야 한다. 위의 경우는 id가 서로 다르지만 동일한 컬럼처럼 보인다. 이런 경우는 아래처럼 바꿔야한다. select c.id as customer_id, c.first_name, c.email, o.id as order_id, o.am..

아래의 예시를 통해 다른 테이블을 참조하는 foreign key (왜래키) 설정하는 방법을 알아보자. 예시 아래와 같은 참조를 하는 테이블을 만들어보자. 1. 고객의 정보가 들어있는 customers 테이블을 만들기 2. 주문정보가 들어있는 orders의 컬럼을 설정해주고 아래의 foreign keys를 누른다. 3. Referenced Table을 customers로 설정하고 customer_id 를 customers 테이블의 id를 참조하도록 설정한다.

IFNULL(데이터, NULL일 때 바꿀 값) 예제 people 테이블 age 가 NULL 이면 100으로 바꾸기 select *, ifnull(age, 100) from people; id가 18인 데이터의 age가 NULL에서 100으로 바뀐것을 볼 수 있다.

IF(조건, 참일 경우 반환 값, 거짓일 경우 리턴 값) 예제 books 테이블 pages 가 300 이상이면 'long' 그렇지 않으면 'short'라는 result 컬럼을 만들어 출력하라 select *, if(pages >= 300, 'long', 'short' ) as result from books;

CASE CASE와 WHEN 이 함께쓰이고, WHEN의 조건이 참이면 THEN에 설정한 반환 값으로 출력 WHEN의 조건이 거짓이면 ELSE 의 값으로 출력된다. 예제 books 테이블 년도가 2000년 이후에 나온 책들은 'Modern'이라고 하고, 그렇지 않은 책들은 'Old'라고하는 'Genre' 컬럼을 새로 만들어서 출력하라 select *, case when released_year >= 2000 then 'Modern' else 'Old' end as 'Genre' from books;