[1일의 요일 구하는 PHP 코드]

<?php
//윤년인지 평년인지(윤년은 366일)
//윤년은 true=1 $leap_year
//평년은 false0 $common_year
function is_leapyear($year){
if($year%4==0){
if($year%100==0){
if($year%400==0){
return true;
}
return false;
}
return true;
}
else{
return false;
}
}
//해당 달이 몇 일인지
function get_day($year, $month){
if($month==1 or $month==3 or $month==5 or $month==7 or $month==8 or $month==10 or $month==12) {
return 31;
}
else if($month==2){
if(is_leapyear($year)){
return 29;
} else return 28;
}
else if($month==4 or $month==6 or $month==9 or $month==11){
return 30;
}
}
//총 일수
function total_day($year, $month){
$sum = 0;
// 년 수 합
for($i=1; $i<$year; $i++){
if (is_leapyear($i)){
$sum += 366;
} else{
$sum += 365;
}
}
// 월 수 합
for($start_month=1; $start_month<$month; $start_month++){
$sum+=get_day($year, $start_month);
}
return $sum;
}
function what_week($day){
$temp=($day+1)%7;
switch ($temp) {
case 0: return "일요일"; break;
case 1: return "월요일"; break;
case 2: return "화요일"; break;
case 3: return "수요일"; break;
case 4: return "목요일"; break;
case 5: return "금요일"; break;
case 6: return "토요일"; break;
}
}
//main
$year=1;
$month=1;
echo total_day($year, $month)."<br>";
echo what_week(total_day($year, $month));
?>












[실행결과]




1단계는 윤년과 평년을 구하는 것이다.

윤년과 평년을 구하기 전에, 각 규칙에 대해 알아보았다.

 

1. 윤년 - 2월 29일 까지 있음

2. 평년 - 2월 28일 까지 있음

 


[윤년 평년 추가 규칙]


* 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다

* 4로 나누어 떨어지지만 100으로 나누어 떨어지는 해는 평년으로 한다

* 단, 400으로 나누어 떨어지는 해는 윤년으로 한다.

 


[윤년 평년 구하는 PHP 코드]


<?php

 

//윤년은 true
//평년은 false
 
function is_leapyear($year){
    if($year%4==0){
        if($year%100==0){
            if($year%400==0){
                return true;
            }
            return false;
        }
        return true;
    }
    else{
        return false;
    }
}
 
echo $year=2018;
if(is_leapyear($year)){
    echo '윤년입니다.';
}else{
    echo '평년입니다.';
}
 
?>



[코드 실행 결과]



index

  • primary: 중복되지 않는 유일한 키
  • normal : 중복을 허용하는 인덱스
  • foreign : 다른 테이블과의 관계성을 부여하는 키
  • unique : 중복을 허용하지 않는 유일한 키
  • full text : 자연어 검색, myisam에서만 지원

primary KEY

  • 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다.
  • where 문을 이용해서 데이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다.
  • 테이블마다 딱 하나의 primary key를 가질 수 있다.

#id가 3인 데이터
select * from student where id=3;


unique KEY

  • 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. (== primary key)
  • 고속으로 데이터를 가져올 수 있다.
  • 여러개의 unique key를 지정할 수 있다.

 

#number가 0534543인 데이터
select * from student where number=0534543;


normal KEY

  • 중복을 허용한다.
  • primary, unique 보다 속도가 느리다.
  • 여러개의 키를 지정할 수 있다.

 

#department가 국문과인 데이터
select * from student where department='국문과'


full text

  • mysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다.
  • mysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다.
    전문검색엔진으로 lucene, sphinx 참고
  • 스토리지 엔진 중 myisam에서만 사용가능

 

#indroduction 값에 '영문과에'를 포함한 데이터
AGAINST('영문과에') FROM student WHERE MATCH (introduction) AGAINST('영문과에');


중복

  • 하나의 키에 여러개의 칼럼을 포함

 

 

#국문과이면서 제주도가 주소인 데이터
select * from student where department='국문과' AND address='제주';


인덱스의 사용 방법

  • 자주 조회되는 칼럼에 적용
  • 조회 시 오랜시간을 소모하는 컬럼에 적용
  • 데이터가 긴 경우 인덱스를 사용하지 않는다.


JOIN

  • 여러개의 테이블 사용하기
  • 테이블간의 관계성에 따라서 복수의 테이블을 결합, 하나의 테이블인 것처럼 결과를 출력


JOIN의 종류

  • OUTTER JOIN : 매칭되는 행이 없어도 결과를 가져옴. 매칭되는 행이 없는 경우 NULL로 표시.
  • INNER JOIN : 조인하는 두개의 테이블 모두에 데이터가 존재하는 행에 대해서만 결과를 가져옴.

# FROM student AS s = student를 s라고 명명 # FROM location AS l = location를 l라고 명명 # l.name AS address = location의 name을 address로 명명 SELECT s.name, s.location_id, l.name AS address, l.distance FROM student AS s LEFT JOIN location AS l ON s.location_id = l.id;


* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-7.조회:Index,Join  (0) 2018.03.24
MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24


그룹

#성별이 어떻게 구성되어 있는지
select sex from student group by sex;

 

 

#성별을 기준으로 distance의 합과 평균값
select sex,sum(distance), avg(distance) from student group by sex;


정렬

#거리가 큰것부터 정렬
select * from student order by distance desc;

#거리가 큰것부터 정렬, 주소도 정렬(대전-청주)
select * from student order by distance desc, address asc;



* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

 

 

'Programming > DB' 카테고리의 다른 글

MySQL-7.조회:Index,Join  (0) 2018.03.24
MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24

조회

데이터 내용 조회하기
데이터 예제 사용

스키마


스키마

#이름과 생일 조회하기
select name,birthday from student;


스키마

#아이디 값 3인 사람 조회하기
select * from student where id=3;

#성별이 남자고, 주소가 서울인 사람 조회하기
select * from student where sex='남자' and address='서울';


스키마

#성별이 여자거나 주소가 서울인 사람
select * from student where sex='여자' or address='서울';

#전체 데이터베이스에서 맨 위 부터 1개만
select * from student limit 1;


스키마

#오프셋0, 로우1 = 오프셋은 0이고, 1개의 행을 가지고옴
select * from student limit 0,1;

#오프셋1, 로우1 = 오프셋은 1이고, 1개의 행을 가지고옴
select * from student limit 1,1;

#오프셋2, 로우1 = 오프셋은 2이고, 1개의 행을 가지고옴
select * from student limit 2,1;


조회5

#오프셋0, 로우2 = 오프셋은 0이고, 2개의 행을 가지고옴
select * from student limit 0,2;

#오프셋1, 로우2 = 오프셋은 1이고, 2개의 행을 가지고옴
select * from student limit 1,2;


* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-7.조회:Index,Join  (0) 2018.03.24
MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24

TABLE 내용 삽입

테이블에 내용 입력하고 확인하기

스키마

#입력하기 방법1
INSERT INTO `student` VALUES ('2', 'leezche', '여자', '서울', '2000-10-26');

#입력하기 방법2
INSERT INTO `student` (`id`, `name`, `sex`, `address`, `birthday`) VALUES ('1', 'egoing', '남자', 'seoul', '2000-11-16');

#내용 확인하기
select * from stuent;


TABLE 내용 변경

데이터 내용 변경하기

스키마

실습을 위해 준비한 기본 데이터

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL,
  `name` char(4) NOT NULL,
  `sex` enum('남자','여자') NOT NULL,
  `address` varchar(50) NOT NULL,
  `birthday` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');

스키마

#address 컬럼을 모두 서울로 변경하기
UPDATE student SET address='서울';

#결과 확인하기
select * from student;


TABLE 내용 삭제

데이터 내용 삭제하기

스키마

#id가 2인 데이터 삭제하기
DELETE FROM student WHERE id=2;

#결과 확인하기
select * from student;

데이터 내용 전부 삭제하기

스키마

#데이터 전부 삭제하기 TRUNCATE student; #결과 확인하기 select * from student

테이블 삭제하기

스키마

#테이블 삭제하기
Drop table student;

#결과 확인하기
select * from student;



* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24
MySQL-1.데이터베이스란?  (0) 2018.03.24

TABLE

데이터가 저장되는 곳

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

테이블 생성하기

스키마

#사용할 데이터베이스 선택하기
use class;

#테이블의 구조와 형식 정의하기
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`)
);


테이블 확인하기

스키마

#테이블 스키마 열람하기
DESC `테이블명`

#테이블 리스트 확인 하기
SHOW tables;



* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24
MySQL-1.데이터베이스란?  (0) 2018.03.24

데이터 관리(SQL)

Structured Query Language, 데이터베이스에서 데이터를 저장하거나 얻기 위해서 사용하는 표준화된 언어. 관계형 데이터베이스는 거의 비슷한 문법으로 사용 가능함.


데이터베이스 접속하기

접속

mysql -uroot -p



데이터베이스 생성 및 확인하기

접속

CREATE DATABASE `CLASS` CHARACTER SET utf8 COLLATE utf8_general_ci;
show databases;


* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24
MySQL-1.데이터베이스란?  (0) 2018.03.24

1. 데이터베이스란?

데이터 저장소

2. 데이터베이스 종류

  • 관계형 데이터베이스 : MySQL, ORACLE, MsSQL
  • NoSQL : mongodb, 빅데이터가 등장하면서 나옴

종류


  • 데이터베이스 서버 : 데이터를 저장하고, 제어하는 역할을 함.
  • 데이터베이스 클라이언트 : mysql-client, phpMyAdmin, navicat, mysql query browser 등…,
    데이터베이스 서버에 접속하기 위한 도구
  • 데이터베이스 : 테이블을 카테고리화 한 것
  • 테이블 : 열과 행을 가진 하나의 표



* 해당 글은 생활코딩 MySQL강의(https://opentutorials.org/course/195)를 듣고 작성하였습니다.

'Programming > DB' 카테고리의 다른 글

MySQL-6.조회:그룹,정렬  (0) 2018.03.24
MySQL-5.조회  (0) 2018.03.24
MySQL-4.TABLE:삽입,변경,삭제  (0) 2018.03.24
MySQL-3.TABLE  (0) 2018.03.24
MySQL-2.데이터관리(SQL)  (0) 2018.03.24
MySQL-1.데이터베이스란?  (0) 2018.03.24

MySQL Auto Casting에 대해서 실습을 통해 알아보겠습니다.


1. MySQL 데이터베이스 생성하기 

: 서버에 접속 한 후, DATABASE를 생성합니다.


# mysql -u root -p 

> CREATE DATABASE DB명; 



2. DATABASE 확인하기

: DATABASE가 잘 생성되었는지 확인합니다.


> SHOW DATABASES; 



3. DATABASE 선택 후 TABLE 생성하기

: 만들어진 DATABASE에 TABLE을 생성합니다.


> use DB명;

> CREATE TABLE `student` (

    `id`  tinyint NOT NULL ,

    `name`  char(4) NOT NULL ,

    `sex`  enum('man','woman') NOT NULL ,

    `address`  varchar(50) NOT NULL ,

    `birthday`  datetime NOT NULL ,

    PRIMARY KEY (`id`)

);



4. TABLE에 값 입력하기

: 생성한 TABLE에 값을 입력합니다.


> INSERT INTO `student` VALUES ('1', 'star', 'woman', 'seoul', '2017-08-10');

INSERT INTO `student` VALUES ('2', 'ruby', 'man', 'mokpo', '2017-08-10');

INSERT INTO `student` VALUES ('3', 'mine', 'woman', 'daejeon', '2017-08-10');

INSERT INTO `student` VALUES ('4', 'cool', 'woman', 'seoul', '2017-08-10');



5. TABLE 생성 확인하기 

: TABLE이 알맞게 생성되었는지 확인합니다.


> desc student; 




6. TABLE에 저장된 내용 확인하기

: select를 이용하여 TABLE에 저장된 내용을 확인합니다.


> select * from student; 



7. TABLE 내의 특정 정보 확인하기

: where 절을 이용하여 TABLE내의 특정 정보를 확인합니다.


> select * from student where id=1; 

> select * from student where id=2;



Auto Casting 알아보기


1. where name=0; 을 이용하여 데이터베이스의 내용을 출력한다.

 

> select * from student where name=0;



2.  ~ where name=0; 을 입력한 결과 아래 그림과 같이 student 테이블의 내용 전체를 출력한다.



3. ~ where address=0; 을 입력해도 student 테이블의 내용 전체가 출력된다.



이유는 ????? 바로 MySQL Auto Casting 때문이다.

우리가 위에서 테이블을 생성한 구문을 보면 아래 표와 같다.


> use DB명;

> CREATE TABLE `student` (

    `id`  tinyint NOT NULL ,

    `name`  char(4) NOT NULL ,

    `sex`  enum('man','woman') NOT NULL ,

    `address`  varchar(50) NOT NULL ,

    `birthday`  datetime NOT NULL ,

    PRIMARY KEY (`id`)

);


name과 address는 각 자료형이 char와 varchar로 되어있다. 

하지만 우리는 "~ where name=0;" 쿼리문을 실행시켰고 그 결과 모든 테이블이 출력되었다.

이는 name이 char형일 때 Auto Casting에 의해 name이 int형으로 변환되어 0으로 치환되었고, 

0=0 즉 참이 된 것이다. 때문에 모든 테이블의 내용이 출력되었다.


참고자료 : https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

+ Recent posts