不器用なエンジニア見習いのメモ

プログラミングなどのIT関連について学んだことをメモ代わりに書いていきます。 その他興味のあることについても書いていきます。 最近は機械学習に関することをまとめています。 HTML,JavaScript等を使って簡単なゲームを作成して公開しています。

カテゴリ:プログラミング > SQL





MySQLのインストール、パスの指定はなんとか出来る様になった。


201605091


面倒だけど、格納用のフォルダに予めインストールしたデータ個々のデータを格納するフォルダを用意しておくとよいだろう。
名前はご自由に。





201605092



肝心のパスの指定について。

インストールするデータを主導で選択している際に、右下に「Adbanced Options」という文字があるのでクリックすると、インストールする場所を選択できる。

注意点は、1回設定すれば良い訳ではなく、インストール予定のデータ1つ1つにインストールするフォルダを選択し直す必要がある。


インストール予定のデータをクリックすると青く反転するので、青く反転すれば選択が出来ていることになる。(インストール先を選択時は反転は無くなる。)

*「MySQL Server」を選択する際は「データ」の保存先も選択出来る様になる。





しばらく続きそうなので番号を付けてみた。




MySQLの設定に躓いている。


いや、一回セットアップが出来たんですよ。
で、見本通りにデータを挿入しようとしたんだけど、データベースに反映されず。
ログ見たら302ってステータスコードが出てたな。

権限がおかしいのかなと思って、rootに権限を付けようとコマンドを送信しようとしたら、何故かrootでログインが出来なくなる事態に。(後から、気づいたんだけど、たぶん、接続しているusernameが違っていたんだよな。試したかったのに……。)


MySQLに接続している状態なら、設定を変更出来たかもしれないけど、一度接続を切ったらrootで全く再接続できない状態に。
パスワードはあっているのになぜ。


仕方無いけど全てアンインストールがして初めからやり直すことに。


かと思ったら「Sevice」のMySQLサーバーが生きている。関連ファイルやフォルダは既に削除しているのに……。


最終的に下記の記事を参考にしてそれはサーバーを削除すること出来ました。

(参考「リリアのパソコン学習記」:http://lilia-study.com/trouble/service/00001.html)



さあ再インストールするぞ!!と思ったら。


今度はインストール先を指定できない……。

ProgramFileとかにインストールすると後々めんどくさいんだよなあ。

iniファイルが表示されなかったり、無暗にファイルやフォルダの削除が出来なかったり。

そういうのが嫌だから別途フォルダを用意しているのに!!


インストール先を指定できない!!

なんでやねん!!


いつになったらMySQLにデータを入れることが出来るんだろう……。


引き続きSQLの講座で学んだことをまとめます。

foodというテーブルに
name,calory,genreという列がとします。


 SELECT name, calory FROM food;

foodのテーブルからname,caloryの列を抽出します。
ラーメンが何Kcal、ステーキが何Kcalという情報が出てきます。




 SELECT DISTINCT genre FROM food;

DISTINCTでは、重複しているデータを同時に抽出しないようにしています。


例えば、うどん、そば、ラーメンのジャンルは同じ「麺類」になります。
この「DISTINCT」が抜けた状態で抽出すると、
「genre」のデータが3行出てくることになります。

ジャンルにはどの様なものが定義されているのかを知りたい為、
重複しているデータがあるとかへって分かりづらくなり非効率的です。
そこでこのDISTINCTを使います。



SELECT * FROM food
  WHERE calory > 500;
カロリーが500以上の食事を表示します。



SELECT * FROM food
WHERE name LIKE 'Su_Shi';

説明の都合上名前は英語表記にします。
名前が最初が「Su」かつ、
最後が「Shi」の名前のfood を表示します。
「_」はワイルドカードです。
つまり、「Su」と「Shi」の間にはどんな文字が
含まれても構わないということになります。


SELECT * FROM food
WHERE name LIKE  'A%'


「%」もワイルドカードです。
これは名前の最初が「A」で始まる料理を
表示することになります。

ただ、「'%A'」 の場合、名前の最後の文字が「A」の料理を表示します。

「%」の前後どちらに値を配置するかによって表示方法が変わる為
注意が必要です。


SELECT * FROM food
WHERE name LIKE  '%tea% 

ちなみにワイルドカード「%」については
上記のようなパターンもあります。 
これは文字列の途中に「tea」が含まれている料理を
表示します。


SELECT * FROM food
WHERE name BETWEEN 'A' AND 'J';

SELECT * FROM food
WHERE calory BETWEEN 500 AND 1000;

「BETWEEN AND」は範囲を示しています。

nameの場合は、先頭の文字列の文字列の範囲を示しています。
アルファベット順に、「A」から「I」のどれかの文字から始める料理名の行を表示します。
「J」は含まれない為注意が必要です。

caloryの場合は500以上から1000以下のカロリーの料理を表示します。
1000が含まれる為注意が必要です。
アルファベットの場合は最後は含まれず、
数字の場合は含まれるみたいです。



SELECT * FROM food
WHERE calory BETWEEN 500 AND 1000
AND genre = 'meat'

カロリーの範囲が500以上かつ1000以下の、
かつジャンルが肉類の料理を表示することになります。



 
 SELECT * FROM food
WHERE genre = 'meat'
OR calory < 500;

ジャンルが肉類、
またはカロリーが500以下の料理を
表示します。



SELECT * FROM food
ORDER BY calory DESC


ORDER BYは抽出するデータを整理して並べ替えます。

DESCの場合、降順にデータが表示されます。
つまり、カロリーが高い順に表示されます。
名前の場合、アルファベットを「Z-A」の順に表示していきます。



SELECT * FROM food
ORDER BY calory ASC
LIMIT 3;


ASCの場合は昇順に表示していきます。
つまり、カロリーが福低い順です。 
名前の場合、アルファベットを「A-Z」の順に表示していきます。


「LIMIT」は表示する行数を指定します。
この場合、カロリーが低い料理上位3つを表示することになります。


 
 
 


今日は、SQLの勉強をしました。


入社してからの研修で一度触れてはいたのですが、
その後も一切使っていなかった為まっさらに近い状態からの勉強でした。 

おかげでまとめることが沢山あります。

今日は基本中の基本の行や列の追加の仕方やデータの抽出の仕方についてです。


本日習ったのは以下の6つのコマンド?です。
 
・CREATE TABLE
新たなテーブルを作成する為のコマンドです。
データベースの根幹となるテーブルを創ってくれます。


・INSERT INTO 
既存のテーブルにデータを新たに追加する為のものです。

・SELECT 
既存のテーブルから条件に沿ったデータを抽出する為のものです。

・UPDATE 
テーブル上にあるデータの更新を行う為のものです。


・ALTER TABLE 
列の追加や変更、削除の際に使用します。


・DELETE FROM 
データおテーブルを削除する際に使用します。


もう少し具体的に見ます。


INSERT INTO sample1 (id, name, age)
VALUES (1, 'Tanaka', 27);
SELECT * FROM sample1;

テーブル「sample1」に年齢27歳の田中さん(idは無視させて頂きます。)というデータを追加する場合。
 上記のsample1 (id, name, age)の引数は、挿入される各列の項目のことを指します。
つまり、 (id, name, age)の列に新しいデータが入ることになります。

 VALUES (1, 'Tanaka', 27);で具体的な値が設定され、テーブル上に挿入されることとなります。

SELECT * FROM sample1;では、テーブル「sample1」 から全てのデータを抽出していることになります。


ちなみに複数追加したいデータを指定して、1回のコマンドで抽出することも出来そうです。


INSERT INTO sample1 (id, name, age) VALUES (2, 'Saitou', 34); 

INSERT INTO sample1 (name, id, age) VALUES ('Shima', 3, 31); 

INSERT INTO sample1 (age, name, id) VALUES ( 29, 'Fujita', 4);

SELECT name FROM sample1;

引数の順番がバラバラでも、INSERTとVELUESの引数とで整合が取れていれば抽出できます。

 

UPDATE sample1
SET age = 22
WHERE id = 1; 
 
データの更新なので、もし、age = 22なのだけどid = 3だった場合は1に更新されるということで良いんだろうか……。



ALTER TABLE sample1 ADD COLUMN
BackNo TEXT;

SELECT * FROM celebs;


列を追加します。テーブル「sample1」に BackNoという列を追加します。
TEXTと書いてある為、数字ではなく、文字列のデータが格納されることになります。

 


UPDATE sample1
SET BackNo  = 'number11'
WHERE id = 4;
DELETE FROM sample1 
WHERE BackNo IS NULL;
SELECT * FROM sample1

 
 SET BackNo  = 'number11'
ここで、新たにデータを追加しています。
文字列の為「''」で囲っています。


この更新処理では、Id=4の行に 
BackNo  = 'number11'となっている為、
他の行では値が無いNULL状態となります。

このままでは見栄えが悪くなる為、 
WHERE BackNo IS NULL;

で関係ない行を削除してから
 
SELECT * FROM sample1 

として、抽出しています。




眠い、もう寝よ。 

↑このページのトップヘ