프리랜서 웹디자이너 웹퍼블리셔RELATION

RELATION 로고

PHP 웹프로그래밍

[MYSQL함수] PHP, MYSQL 기초 쿼리문 정리

2019.08.22
북마크 작성자 정보
MySQL에서 지원하는 데이터타입

INT : 4bytes 정수
CHAR(n) : 문자의 수가 n개인 문자열
VARCHAE(n) : 문자의 수가 최대 n개인 문자열
TEXT : 문자의 수가 최대 65535개인 문자열



CREATE TABLE (새로운 테이블 생성)

create table 테이블명 (
필드명 데이터타입 [NOT NULL]
{, 필드명 데이터타입 [NOT NULL]}*
[,PRIMARY KEY (필드명)]
)



ALTER TABLE(테이블구조 및 속성변경)
기존의 테이블구조 변경


1. 필드추가생성

ALTER TABLE 테이블명 ADD [COLUMN] 필드명 필드타입
예) ALTER TABLE userdb ADD COLUMN addr VARCHAR(100)


2. 필드속성변경
ALTER TABLE 테이블명 CHANGE [COLUMN] 기존필드명 새필드명 필드타입
예)ALTER TABLE userdb ADD addr VARCHAE(100)
예) ALTER TABLE userdb CHANGE COLUMN addr address VARCHAR(255)


3. 필드삭제
ALTER TABLE 테이블명 DROP [COLUMN] 필드명
예) ALTER TABLE userdb DROP COLUMN address


4. 기존의 테이블삭제
DROP TABLE 테이블명



SELECT (데이터검색하기)

SELECT [DISTINCT] 테이블명 {, 테이블명}*
FROM 필드명 {,필드명}*
[WHERE 검색조건]
[ORDER BY 필드명[ASC or DESC] {,필드명 [ASC or DESC]}*]
[GROUP BY 필드명 {, 필드명}*]
[HAVING 검색조건]



1. 일반적인 검색

SELECT name, id FROM userdb WHERE level = 'B'
//(name,id 이름을 갖고 level B 인 것을 userdb필드에서 찾으시오.)

SELCET * FROM userdb
//(userdb 필드의 모든 내용을 찾으시오(보이시오))

SELECT name, id, email, sex, milage, level FROM userdb




2. 결과레코드의 중복제거

//*DISTINCT가 중복된것을 제거하는 역할을 한다.
//*text데이터 형에서는 사용이 안된다.

SELECT level FROM userdb
//(level 이름을 갖는것을 userdb에서 찾으시오.(중복되게 나왔다고 치자~))

SELECT DISTINCT level FROM userdb
//(userdb에서 level이름을 갖는 테이블이 중복되었을시 제거한다)




3. 조건검색
SELECT name, id, email FROM userdb WHERE milage > 3000 AND sex = 'M'



4. 검색결과의 정렬
SELECT name, id, milage FROM userdb WHERE milage >= 3000 ORDER BY milage DESC
//(milage 항목에 대해 역순(내림차순)으로 정렬하여 보여주시오.(DESC를 사용하지 않읅 경우 오름차순으로 정렬된다.))




5. 검색결과에 대한 산술계산 및 문자열처리
SELECT name, '님의 마일리지는 ', milage, '점입니다.' FROM userdb WHERE milage >= 3000 ORDER BY milage
//(문자열처리가 ' ' 로 되었다.)

SELECT name, id, email, milage+300 FROM userdb WHERE id = 'soony'
//(산술계산처리에서 그냥 위에처럼 +300 하면은 되는구나.)



6. 그룹함수(group function)를 이용한 검색

SELECT count(*) FROM userdb WHERE sex = 'F'
//(count그룸의 모든것을 찾는다.?.뒤에 생략.)

SELECT avg(milage) FROM userdb WHERE sex='F'



7. GROUP BY를 이용한 검색

SELECT level, max(milage), min(milage), avg(milage) FROM userdb GROUP BY level
//(userdb필드에서 level인것끼리 묶어 준다.(GROUP BY는 일정 필드 중 같은 값끼리 묶어주는 질의어이다)

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex



8. HAVING을 이용한 검색

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex HAVING sex = 'F'
//(!!!!!! WHERE 와 HAVING 의 차이점?

WHRE은 전체 데이터를 대상으로 조건을 주는 것이고.
HAVING은 GROUP BY 절과 함께 나와서 GROUP BY로 나온 결과중에서 일부분의 조건을 다시 줄 때 사용)



9. BETWEEN 연산자를 이용한 검색

SELECT name, email, mailage, sex FROM userdb WHERE sex = 'F' AND milage BETWEEN 3000 AND 4000
//(BETWEEN 은 하나의 범위를 이용해 수치를 찾는 법!)

SELECT name, email, milage, sex FROM userdb WHERE sex = 'F' AND milage >= 3000 AND milage <= 4000

SELECT name, sex, milage FROM userdb WHERE milage NOT IN (3300,3500,3700)


IN 을 이용한 검색
SELECT count(*) FORM DB(table) WHERE shipcon = 'F' or shipcon = 'B'
SELECT count(*) FORM DB(table) WHERE shipcon IN ('F','B')








10. LIKE를 사용한 검색

SELECT name FROM userdb WHERE name, LIKE '%현%'

SELECT name, id, FROM userdb WHERE id LIKE 'm%'
//(내가 보기에는 LIKE가 상당히 좋은것 같음....ㅋ

※LIKE 는 WHERE 절중에서 사용되는 다른 하나의 인스트럭션입니다. LIKE 는 우리들로 하여금 하나의 양식에 (pattern) 따라 필요한 데이터를 찾을수 있게 합니다. 상대적으로 IN 을 응용할때는 우리가 필요한 조건을 완전히 알수 있지만; BETWEEN) 를 응용할때는 하나의 범위만 열거합니다. LIKE 의 용어는 아래와 같습니다:

SELECT "필드명"
FROM "도표명"
WHERE "단락명" LIKE {양식}

{양식}와일드 카드(wildcard)가 자주 포함됩니다. 아래는 여러가지 예입니다:

'A_Z': :임의치의 자원이 'A' 자로 시작하고 'Z' 자로 끝나는 모든 문자부호. 'ABZ' 와 'A2Z' 모두 이 양식에 부합되지만, 'AKKZ'는 부합되지 않습니다. A 와 Z 사이에 하나 아닌 두개의 문자가 있기때문입니다.).
'ABC%': 'ABC' 로 시작하는 모든 문자 부호. 예를 들면, 'ABCD' 와 'ABCABC' 는 모두 이 양식에 부합됩니다.
'%XYZ': 'XYZ' 로 끝나는 모든 문자 부호. 예를 들면, 'WXYZ' 와 'ZZXYZ' 는 모두 이 양식에 부합됩니다.
'%AN%': 'AN'양식을 포함하는 모든 문자부호.예를 들면 , 'LOS ANGELES' 와 'SAN FRANCISCO' 는 모두 이 양식에 부합됩니다.



11. NULL값을 갖는 데이터검색

SELECT name, id FROM userdb WHERE email IS NULL
//(눌값인걸 찾는 거구만.)

SELECT name, id FROM userdb WHERE email IS NOT NULL



INSERT (새로운 데이터의 삽입)

INSERT INTO 테이블명 [(필드명{[, 필드명]}*)] VALUES (필드값)

INSERT INTO userdb (name, id, email, sex, milage, level) VALUES ('이완철', 'yunka1018','sspark@kornet.net'.'M','3500','B')
//(userdb테이블에 VALUES 뒤의 내용들과 대응되는 해당 필드에 추가한다.)

INSERT INTO userdb VALUES('이완철', 'yunka1018','sspark@kornet.net','M','3500','B')

INSERT INTO userdb (id, name) VALUES('yunka1018','정양미')



데이터의 수정(UPDATE)

UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE 검색조건]


UPDATE userdb SET sex = 'F' WHERE name = '김현아'
//(userdb테이블의 name=김현아인 필드의 sex를 F 로 수정한다)

UPDATE userdb SET sex = 'F'

만일 위와 같이 WHERE절로 검색조건을 명시하지 않은 경우에는 해당테이블내의 모든레코드의 필드값이 설정한값으로 수정되므로 유의해야한다.

UPDATE userdb SET sex = 'F'

UPDATE userdb SET milage = milage + 300



DELETE (데이터의 삭제)

DELETE FROM 테이블명 [WHERE 검색조건]

DELETE FROM userdb WHERE id = 'king94'

DELETE FROM userdb

만일 위와 같이 검색조건을 지정하지 않으면 해당테이블내의 모든레코드가 삭제되므로 주의해야한다.



>>>>UNION

UNION인스트럭션의 목적은 SQL 어구의 결과를 합병하는것입니다. 이 각도로 볼때 UNION 는 JOIN 과 유사한 면이 있습니다. 그것은 이 두 인스트럭션 모두 여러개의 도표로 부터 데이터를 채용할수 있다는 것입니다. UNION의 규제는 두개의 SQL어구가 산생한 필드는 같은 데이터 종류여야 한다는 점입니다. 그리고 우리가 UNION 인스트럭션을 사용할때 부동한 데이터치(SELECT DISTINCT 와 유사함)만 볼수 있습니다.

*다음과 같이 사용한다.

[SQL 어구 1]
UNION
[SQL 어구 2]


*이해를 돕기위해~

union 과 union all 의 차이
A와 B의 합집합은 union과 union all을 사용하는데
그 차이가 뭐냐면

만약에 A 집합에 10 20 30 40
B 집합에 10 20 30

이 있으면

union : 10 20 30 40
union all : 10 20 30 40 10 20 30

즉 유니온 올은 중복된 데이터도 모두 출력하고 유니온은 중복된 데이터는 출력되지 않는다.



MYSQL 데이터베이스의 사용법

1. MYSQL서버의 기동과 종료
이하 디렉토리위치는 /usr/local/mysql/bin이다.
./bin/safe_mysql &


2. MYSQL서버의 종료 및 재기동

safelab.skku.ac.kr.pid파일은 MYSQL의 PID를 저장하고 있다.
kill -9 PID
mysqladmin -u root -p shutdown
mysqladmin -u root -p reload


3. mysqladmin 사용법
mysqladmin -u root -p reload
mysqladmin -u root -p create sample
mysqladmin -u root -p drop sample


4. mysql 클라이언트사용법
mysql -u root -pphp99 mysql
mysql -u root -p mysql

mysql>show databases;
mysql>show tables;
mysql>show columns from db;
mysql>desc db;
mysql>select host, user, password from user;
mysql>update user set password = password('php99') where user = 'root';
mysql>select host, user, password from user;
mysql>drop database sample;



5. 생성된 데이터베이스의 등록

mysql>insert into db values('%','sample','php','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>select host, db, user from db;



6. 새로운 사용자(데이터베이스 소유자)등록

mysql>insert into user (host, user, password) values('localhost','php','password('php99'));
mysql>select host, user, password from user;



7. 테이블의 생성과 수정 및 삭제

mysql -u root -p sample

mysql>show tables;
mysql>desc userdb;
mysql>alter table userdb change column id varchar(12) NOT NULL;
mysql>desc userdb;
mysql>drop table userdb;
mysql>show tables;



8. *.sql파일로 쉘에서 SQL명령어 실행

mysql -u root -p php99 sample < userdb.sql
mysql -u php -p sample

mysql>show tables;



9. 데이터의 백업과 복구

mysqldump -u [DB사용자명] -p [백업할 데이터베이스명] > [외부로 저장할 파일명]

mysqldump -u php -p sample > sample_backup.sql
cat sample_backup.sql
mysql -u php -p php99 sample < sample_backup.sql

이 포스트 공유하기

전체목록