일별 통계

SELECT DATE(RegDate), COUNT(Id) FROM Table GROUP BY DATE(RegDate);

월별 통계

SELECT DATE_FORMAT(RegDate, '%Y-%m'), COUNT(Id) FROM Table GROUP BY DATE_FORMAT(RegDate, '%Y-%m');

년별 통계

SELECT DATE_FORMAT(RegDate, '%Y'), COUNT(Id) FROM Table GROUP BY DATE_FORMAT(RegDate, '%Y');


또는


select YEAR(RegDate), count(Id) from Table group by YEAR(RegDate);

every derived table must have its own alias


every derived table must have its own alias 오류는 서브쿼리가 없어서 라고 한다.


SELECT * FROM (SELECT a, b FROM TB_B) as TBB;


이 부분만 넣어주면 해결!

SELECT * FROM table_A


SELECT * FROM table_B



두개의 select 문의 결과값을 합치고 싶을때


union 을 사용하면 된다.


SELECT * FROM table_A

UNION

SELECT * FROM table_B

SELECT * FROM 테이블명 WHERE 컬럼명 NOT IN 필드명;


A B 두 테이블이 있다고 가정하자


A와 B는 id라는 컬럼을 공유하며 가지고 있다.


A는 B를 포함하고 있다.  여기서 A 테이블의 id 에서 B테이블의 id를 제외한 결과를 가져오고 싶다면


select A테이블의 컬럼명 from A테이블 where id not in (select B테이블의 컬럼명 from B테이블);


select id from A where id not in (select id from B);


를 하면 된다.

MySQL IF문 사용법


IF( 조건 , 참일때, 거짓일때 )

Insert


INSERT into (테이블명) (컬럼명,¨¨¨,) values("ABC", "DEF",¨¨);



Select


SELECT id,name from (컬럼명) where (조건);



Update


UPDATE (테이블명) SET (컬럼명)="변경값" where (조건);



Delete


DELETE from (테이블명) where (컬럼명)=(삭제하고자 하는 데이터);



The user specified as a definer ('root'@'%') does not exist

라는 에러 발생시 권한이 없다는 문제라고한다.


grant all on *.* to 'root'@'%' identified by 'password' with grant option;


로 해결

데이터베이스 접속 

$ mysql -u 사용자명 -p dbname

비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다. 


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호<br />

  • update문 이용
    $ mysql -u root mysql<br /><br />mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';<br />mysql> FLUSH PRIVILEGES;<br />


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');<br />
     


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제 

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';<br />


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면 

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';<br />


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.

http://tech.zhenhua.info/2009/01/mysql-error-104528000-access-denied-for.html 에 따르면 '%'란 localhost 를 제외한 모든 호스트를 뜻한다고 한다. 즉, localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.

불필요한 사용자 삭제는 

mysql> DLETE FROM user WHERE user='username';<br />mysql> FLUSH PRIVILEGES;<br />



데이터베이스 생성/보기 


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;<br />

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;<br />

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;<br />

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;<br />

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기 


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (<br />column_name1 INT,<br />column_name2 VARCHAR(15),<br />column_name3 INT );<br />

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;<br />

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;<br />혹은<br />mysql> DESCRIBE tablename;<br />

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];<br />

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;<br />
     



현재 상태 보기 

<br />mysql> status<br /><br />--------------<br />mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)<br /><br />Connection id: 26<br />Current database: study<br />Current user: study@localhost<br />Current pager: stdout<br />Using outfile: ''<br />Server version: 3.23.58<br />Protocol version: 10<br />Connection: Localhost via UNIX socket<br />Client characterset: latin1<br />Server characterset: euc_kr<br />UNIX socket: /var/lib/mysql/mysql.sock<br />Uptime: 2 hours 9 min 59 sec<br /><br />Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1<br />Open tables: 1 Queries per second avg: 0.021<br />--------------<br /> 



INSERT 

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);<br /><br />혹은<br /><br />mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);<br />



SELECT 

mysql> SELECT col1, col2, ... FROM tablename;<br />


컬럼명을 *로 하면 모든 컬럼 의미.
 

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;<br />


컬럼의 이름을 바꿔서 출력.
 

mysql> SELECT * FROM tablename ORDER BY col1 DESC;<br />mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;<br />


DESC는 내림차순 ASC는 오름차순.
 

mysql> SELECT * FROM grade WHERE korean < 90;<br />


조건줘서 SELECT.
 

mysql> SELECT * FROM grade LIMIT 10;<br />


결과중 처음부터 10개만 가져오기
 

mysql> SELECT * FROM grade LIMIT 100, 10;<br />


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE 

mysql> UPDATE tablename SET col1=새값 WEHER 조건<br />



DELETE 

mysql> DELETE FROM tablename WEHRE 조건<br />



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다. 

$ mysql -E -u root -p mysql<br />



mysql에서 발생한 오류나 경고 다시 보기 

mysql> show errors;
mysql> show warnings;



출처 : http://egloos.zum.com/kwon37xi/v/1634694


+ Recent posts