MySQL 06. MySQL - Table (조회1 select, limit, where)

|

생활코딩 - MySQL

mysql monitor

  • CLI 환경인 mysql monitor에서 테이블 데이터를 조회 하는 방법을 살펴본다.
  • GUI 환경인 phpMyAdmin에서 쉽게 동일한 작업이 가능하다.

조회

  • 테이블에서 데이터를 조회
# 문법
# 중복 사용시 순서가 중요하다.
SELECT 칼럼명1, 칼럼명2
      [FROM 테이블명 ] # 생략가능
      [GROUP BY 칼럼명] # 생략가능
      [ORDER BY 칼럼명 [ASC | DESC]] # 생략가능
      [LIMIT offset, 조회 할 행의 수] # 생략가능
# 예시
SELECT * FROM student;
SELECT name, birthday FROM student;
SELECT * FROM student WHERE id=3;
SELECT * FROM student WHERE sex='남자' AND address='서울';
SELECT * FROM student WHERE sex='여자' OR address='서울';
SELECT * FROM student LIMIT 1; # 1개만
SELECT * FROM student LIMIT 1,1; # index 1번부터 1개만
SELECT * FROM student WHERE sex='남자' LIMIT 2; # 남자 중에 2개만

MySQL 05. MySQL - Table (insert, update, delete)

|

생활코딩 - MySQL

mysql monitor

  • CLI 환경인 mysql monitor에서 테이블 데이터를 삽입, 수정, 삭제, 조회 하는 방법을 살펴본다.
  • GUI 환경인 phpMyAdmin에서 쉽게 동일한 작업이 가능하다.

삽입

  • 테이블에 데이터를 삽입한다.
  • insert into 명령어를 사용
# 문법
INSERT INTO table_name VALUES (value1, value2, value3,...)
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)

# 예제
INSERT INTO `student` VALUES ('2', 'leezche', '여자', '서울', '2000-10-26');
INSERT INTO `student` (`id`, `name`, `sex`, `address`, `birthday`) VALUES ('1', 'egoing', '남자', 'seoul', '2000-11-16');

수정

  • 테이블에 데이터 변경한다.
  • update ... set 명령어를 사용
# 문법
UPDATE 테이블명 SET 컬럼1=컬럼1의 값, 컬럼2=컬럼2의 값 WHERE 대상이 될 컬럼명=컬럼의 값

#예제
UPDATE `student` SET address='서울';
UPDATE `student` SET name='이진경' WHERE id=1;
UPDATE `student` SET name='이고잉', birthday='2001-4-1' WHERE id=3;

삭제

  • 테이블에 데이터를 삭제한다.
  • DELETE FROM, TRUNCATE, DROP TABLE 명령어를 사용한다.

    DELETE

# 문법
DELETE FROM 테이블명 [WHERE 삭제하려는 칼럼 명=값]

# 예제
DELETE FROM student WHERE id = 2;

TRUNCATE

  • 테이블의 전체 데이터를 삭제
  • 테이블에 외부키(foreign key)가 없다면 DELETE보다 훨씬 빠르게 삭제됨
# 문법
TRUNCATE 테이블명

# 예제
TRUNCATE student;

DROP TABLE

  • 테이블을 삭제한다
# 문법
DROP TABLE 테이블명;

# 예제
DROP TABLE student;

MySQL 04. MySQL - Table (create, 필드타입)

|

생활코딩 - MySQL

Table

  • 데이터가 실질적으로 저장되는 저장소

스키마(schema)

  • 테이블에 적재될 데이터의 구조와 형식을 정의 하는 것

테이블 관리 - mysql monitor

  • phpMyAdmin를 통해서도 같은 작업을 수행 할 수 있다.
  • 초심자는 GUI환경에서 먼저 연습하고 sql문에 점점 익숙해지는 편이 좋다.

테이블 생성

  • GUI 환경에서 테이블을 생성하는 경우가 많음
CREATE TABLE table_name (
    칼럼명1 data_type,
    칼럼명2 data_type
)
CREATE TABLE `student` (
    `id`  tinyint NOT NULL ,
    `name`  char(4) NOT NULL ,
    `sex`  enum('남자','여자') NOT NULL ,
    `address`  varchar(50) NOT NULL ,
    `birthday`  datetime NOT NULL ,
    PRIMARY KEY (`id`)
);

테이블 리스트

SHOW tables;

테이블 스키마 열람

DESC `테이블명`

테이블 제거

DROP TABLE `테이블명`

데이터 타입

type 설명 기타
문자    
CHAR( ) 0 to 255 고정문자 길이 용량고정, 검색에 유리
VARCHAR( ) 0~65535 가변 문자 길이 용량 절약에 유리, 글 제목
TINYTEXT 최대 255 문자길이  
TEXT 최대 65535 문자길이 글 본문
숫자    
TINYINT( ) -128 ~ 127 정수형, 0 ~ 255 정수형, UNSIGNED  
INT( ) -2147483648 ~ 2147483647 정수형  
FLOAT 작은 부동소수점 10.35
날짜    
DATE YYYY-MM-DD  
DATETIME YYYY-MM-DD HH:MM:SS  
TIME HH:MM:SS  
기타    
ENUM ( ) 정해진 값을 강제 ENUM (‘여자’, ‘남자’ )

level 3. 다음 큰 숫자

|

출처

문제

어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.

N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다. 1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다. 예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다. N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.

풀이 (python)

def nextBigNumber(n):
    num_of_one = str(bin(n)).count('1')
    for i in range(n+1,1000001):
        if str(bin(i)).count('1') == num_of_one:
            return i


#아래 코드는 테스트를 위한 출력 코드입니다.
print(nextBigNumber(78))

풀이과정

  1. 인자 N을 2진수로 변환
  2. 1의 갯수를 확인
  3. 10진수 N < x <= 1,000,000 사이의 숫자를 하나씩 2진수로 바꾸어 1의 갯수가 위의 2와 같다면, x를 리턴한다.

배운점

  • bin(), oct(), hex() 내장함수를 통해 정수를 각 2진수, 8진수, 16진수로 바꿀 수 있다.
  • str() 내장함수를 통해 인자를 문자열로 변환한다.
  • str.count(‘검색어’)를 통해서 해당 검색어의 갯수를 리턴한다.

level 2. 소수 찾기

|

문제출처

문제

numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.)

10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환

풀이

def numberOfPrime(n):
    num_list = list(range(n+1))
    prime_list = []
    for num in num_list:
        check = 0
        for i in list(range(1,num+1)):
            if num % i == 0:
                check += 1
        if check == 2:
            prime_list.append(num)
    return len(prime_list)



# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(numberOfPrime(10))

풀이 과정

  • 1부터 n 사이의 숫자를 리스트로 만든다. (list, range 함수)
  • 리스트의 각 요소를 돌면서 (반복문) 소수인지 확인한다.
  • 어떻게 소수인지 확인하지?
    • 소수는 1부터 자신까지의 수로 나누어 나머지가 0인 수가 2개만 존재한다. (range, 반복문)

다른사람 풀이


# 소수인지 판단
def is_prime(n):
    return all([(n%j) for j in range(2, int(n**0.5)+1)]) and n>1 # bool 값 리턴

# 소수의 갯수 리턴
def numberOfPrime(n):
    return [is_prime(x) for x in range(1, n+1)].count(True)  
  # return len(list(filter(is_prime, range(1, n+1))))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(numberOfPrime(10))

배운점

  • all() 내장함수 : all(x)은 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며, 이 x가 모두 참이면 True, 거짓이 하나라도 있으면 False를 리턴한다.
  • (※ 반복 가능한 자료형이란 for문으로 그 값을 출력할 수 있는 것을 의미한다. 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있다.)
  • .count(x) : 리스트, 문자열, 튜플 등 iterable 자료형 안의 x 요소의 갯수를 리턴한다.