条件が異なる複数の集計

test_asテーブル
idtest1val1text1test_date
1-11neko2014/4/1
21012kani2014/4/2
4-14buta2014/4/4
51003yagi2014/4/3
61003ari2014/4/3
71003tori2014/4/3
81003kame2014/4/3

条件が異なる複数の集計

全レコード数と、val1が3のレコード数を取得する。

	SELECT COUNT(id), COUNT(val1 = 3 or null) FROM test_as
	
COUNT(id)COUNT(val1 = 3 or null)
74

CASE WHEN ~ THEN | AND条件

test_asテーブル
idval1text1test_datetest_dt
11neko2014/4/12014/12/12 0:00
22kani2014/4/22014/12/12 0:00
44buta2014/4/42014/12/12 0:00
53yagi2014/4/32014/12/12 0:00
63ari2014/4/32014/12/12 0:00
73tori2014/4/32014/12/12 0:00
84kame2014/4/32014/12/12 0:00
9-1unagiNULLNULL

ANDの記述例


	SELECT 
		MIN(CASE WHEN test_date >= '2014-4-2' AND test_date < '2014-4-4' THEN val1 ELSE null END) as min_val1 
	FROM test_as;
	
min_val1
2

CASE WHEN ~ THEN | 入れ子

test_asテーブル
idval1text1test_datetest_dt
11neko2014/4/12014/12/12 0:00
22kani2014/4/22014/12/12 0:00
44buta2014/4/42014/12/12 0:00
53yagi2014/4/32014/12/12 0:00
63ari2014/4/32014/12/12 0:00
73tori2014/4/32014/12/12 0:00
84kame2014/4/32014/12/12 0:00
9-1unagiNULLNULL

分岐の入れ子:例1


	SELECT 
		MIN(
			CASE WHEN ISNULL(test_date) THEN
				-999 
			ELSE 
				CASE WHEN test_date >= '2014-4-2' AND test_date < '2014-4-4' THEN val1 ELSE null END 
			END
		) AS min_val1
	FROM test_as;
	
min_val1
-999

分岐の入れ子:例2


	SELECT 
		MIN(
			CASE WHEN ISNULL(test_date) THEN
				999 
			ELSE 
				CASE WHEN test_date >= '2014-4-2' AND test_date < '2014-4-4' THEN val1 ELSE null END 
			END
		) AS min_val1
	FROM test_as;
	
min_val1
2


SQL文(クエリ)の最大長さは?

下記のSQLを実行することによりSQL文の最大長さが分かる。
	show variables like 'max_allowed_packet'
デフォルトでは1Mとなっているようである。

最大長さはMySQLの設定(my.ini)で変更できる。
変更する場合、my.iniに下記のような設定があるので書き換えて、mysqlを再起動すればよい。
	max_allowed_packet = 1M

データベースを作成する

	CREATE DATABASE IF NOT EXISTS animal_park COLLATE utf8mb4_general_ci

旧2018-9-5
	CREATE DATABASE IF NOT EXISTS animal_park COLLATE utf8_general_ci
「IF NOT EXISTS」は既にデータベースが存在している場合でもエラーにならないようにする命令。 上書きではない。
「COLLATE utf8_general_ci」は照合順序をutf8_general_ciに設定する命令。

参考サイト


旧覚書:MySQLのインストールとODBCへの登録について

2009年版

	①インストール
		・以下のHTML情報にインストール手順が載せられている。
			同フォルダの「MySQL Server Instance Config Wizard.mht」を参考(資料はIEでしか開けません)
	
		※1インストールの際、以下の設定ができる。
			更新系重視タイプ or 参照系中心タイプ or バランスタイプ
			シングルユーザータイプ or マルチユーザータイプ(online型)
			文字コードcp932
			ユーザー&パスワード
		
		※2MySQLの再インストール場合
			インストールに失敗した場合、以下のことに注意されたし。
				管理ツールのサービスにまだ残っている場合がある。すべてのファイルを削除したあと、更新をすると消える。
	
	②DBを作成する
		・MySQL Command Line Clientを開く
			スタート→プログラム→MySQL→MySQL Command Line Client
		
		・コマンド画面が開くので、コマンドを打ち込んでDBを作成する。
			詳しくは専門書を参考のこと。
	
	③ODBCへの登録
		・まず「mysql-connector-odbc」をインストールする。
			同フォルダの「mysql-connector-odbc-noinstall-3.51.26-win32.zip」を解凍しインストールする。
		・管理ツール→ODBCに登録 登録方法は以下のとおり
			1)ODBCデータソース アドミニストレータ画面を開く
			2)左側にある「追加」ボタンを押下
			3)データソースの新規作成画面が開くので「MySQL ODBC3.51 Driver」を選択して「完了」ボタンを押下。
			4)Connector/ODBC 3.51.26 - Add Data Source Name 画面が開くので以下の通り入力する
			5)Loginタブを選択して以下のとおり入力する
				Data Source Name 任意の名前
				Description	空白で良い
				Server	localhost
				User	root
				password パスワードを入力
				Database MySQLのコマンドで作成した、データベース一覧がコンボで表示されるので、該当を選択する。
			6)Connection Optionタブを選択して以下の項目だけ選択する。
				Port 3306
				Character Set cp932を選択する。(日本語文字列を入力できるようにするため。utf-8はなぜか失敗する。)
			7)下側にある「Test」ボタンを押下し、Success:connection was made!と表示されたら成功
			8)「OK」ボタンを押下して終了
	
			同フォルダの「MySQLインストール設定【資料】¥ODBCドライバのインストール.mht」を参考。ただし自分は文字コードを「utf-8」としている。
	
		※MySQLをインストールしたフォルダにある「my.ini」に必要な設定情報が書かれているので参考事。
	
	④CSEのインストールと設定
		・同フォルダの「cse.lzh」を解凍する
		・メニューの「データベース」→「接続」と操作して接続情報画面を開く
			DBMS:ODBC汎用
			データソース:ODBCに登録したDB名
			ユーザー名:MySQLに登録したときに入力したユーザー名(通常はroot)
			パスワード:同上の要領でパスワードを入力
	
	⑤JavaでMySQLを利用する場合
		・ドライバを入手(同フォルダにある「mysql-connector-java-5.1.7-bin.jar」のこと)
		・上記のドライバを%JAVA_HOME%¥bin¥lib¥extに配置する。
				例)C:¥Java¥jdk¥lib¥extディレクトリへドライバを配置
		・これでJavaでMySQLにアクセスすることができる。
		※もしこの手順を行わなかった場合、以下のJAVAコードでエラーがでる。(DB接続関連のコード)
	
				Class.forName(org.gjt.mm.mysql.Driver);
	●CSEの注意点
		直接MYSQLにアクセスする場合
			バージョン3までしかサポートされていない。「libmysql.dll」を使う
	
	●Accessとの連携
		AccessでODBCに登録したDBを参照できる。しかし更新系の操作はできない。
	
	●libmysql.dll
		これを使えばVS.NETからもODBCにアクセスできるようだ。
			要調査
	●サーバー関連
		後ほど調査する必要がある。
	

INで指定した順に取得する


	SELECT * FROM nekos WHERE id in (5,4,6) ORDER BY FIELD(id,5,4,6)
	
5,4,6の順番でデータ取得できる。


リストアのよくあるエラー Fatal error: Allowed memory size of 402653184 bytes exhausted

MySqlAdminでデータ件数の多いテーブルをエクスポートし、それを別のDBにインポートするときによく起こる問題。
エクスポートしたsqlファイルのSQL文にエラーメッセージ「Fatal error: Allowed memory size of 402653184 bytes exhausted」 が書かれる。そのためインポートしたときにエラーが起こる。
SQL文からこのエラーメッセージを除去すれば、とりあえずエクスポートできたデータ分だけインポートできる。