ルイス森田の備忘録

このブログはアウトプットが死ぬほど苦手な森田の強制&矯正装置としてゆるっとはじまったブログです。

勉強メモーMySQL関連

勉強メモーMySQL関連

 
SQL

リレーショナルデータベース(RDB)の操作を行うための言語
DDLデータを定義する

DMLデータを操作する

 

SQLの文法について学ぶ

 

mysql -u root

mysqlにユーザー名がrootで接続する

 

SHOW DATABASES;

データベースを一覧で表示するSQL

 

CREATE DATABASE データベース名;

指定した名前のデータベースが作成される

 

USE データベース名;

データベースを選択するSQL

 

SHOW TABLES;

選択したデータベースに存在するテーブルを一覧で表示するSQL

 

CREATE TABLE テーブル名 (カラム名 カラム名の型, ……);

CREATE TABLE文はテーブルを作成するためのSQL

 

CREATE TABLE goods(id INT, name VARCHAR(255));

 

SHOW columns FROM テーブル名;

テーブル構造を確認するためのSQL

 

ALTER TABLE テーブル名 操作

カラムの追加・修正・削除はすべてテーブル構造の変更

SQL文は共通して、ALTER命令を用いたALTER TABLE文を使用

 

ALTER TABLE goods ADD (price INT,zaiko INT);

 

ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名 新しいカラムの型;

カラムの修正は先ほど同様ALTER TABLE文を使用する

 

ALTER TABLE goods CHANGE zaiko stock INT;

※カラムの型は変更しなくても、再度記述をしなくてはなりません。

 

ALTER TABLE テーブル名 DROP カラム名;

カラムの削除にもALTER TABLE文を使用する

 

ALTER TABLE goods DROP stock;

 

 

テーブルにデータを登録するためのINSERT文を使用する

 

・全てのカラムに値を入れる場合

INSERT INTO テーブル名 VALUES(値1, 値2, 値3);

 

・特定のカラムのみに値を入れる場合

INSERT INTO テーブル名(カラム名1, カラム名2) VALUES(値1, 値2);

 

INSERT INTO goods VALUES(1, "ペン", 120);

 

デフォルト値

レコードを生成するときにカラムにn入れるものを指定しなかった場合、そのカラムに入る値のこと

 

UPDATE テーブル名 SET 変更内容 WHERE 条件;

データの更新にはUPDATE文を使用する

 

例)先ほど追加したidが2のレコードを、priceが100となるように更新してみましょう。

UPDATE goods SET price = 100 WHERE id = 2;

 

DELETE FROM テーブル名 WHERE 条件;

テーブルにあるデータを削除するためにはDELETE文を使用

 

DELETE FROM goods WHERE id = 2 ;

 

 

Sequel proでもクエリ操作が出来る

=>セミコロンは不要

=>検索時には長いタイプが必要であり、ミス時に修正が楽

=>出力が多く、その出力を見やすくするため

 

 

SELECT *

FROM users

SELECT句とFROM句を用いたSQL文が、検索の基本的な形となります。

 

FROM句 :検索するテーブルを指定する

SELECT句:取得するカラムを指定する

WHERE句 :取得するレコードの条件を指定し、その条件が正のレコードを取得する

比較演算子を使用することが出来る

文字列や日付の場合は””でもじを囲う

"*"(アスタリスク)を指定:ワイルドカード(代わりになるもの)

 

WHERE a AND b

AND演算子:複数の条件を指定して式を作り、その条件が全て正であるとき、式が正となる

 

WHERE a OR b

OR演算子:複数の条件を指定して式を作り、その条件のうちどれか1つ以上が正となれば、式は正となる

 

 

WHERE NOT a

NOT演算子:1つの条件を指定して式を作り、式の正誤はその条件と逆のものになる

条件aが誤となる(当てはまらない)レコードが取得出来ます。

 

WHERE カラム名 BETWEEN 下限 AND 上限

BETWEEN演算子:1つのカラムに対し上限と下限を指定して式を作り、カラムの値がその範囲に含まれるとき、その式は正になる

 

WHERE カラム名 IN (値1, 値2, ……)

-- (値1, 値2, ……)の部分がリストとなります

IN演算子:1つのカラムに対しリストを指定して、カラムの値がそのリストに含まれるとき、その式は正になる

 

CONCAT(文字列1, 文字列2, ……)

CONCAT関数:複数の文字列を連結させることができる

 

SELECT 取得するデータ AS 別名

AS句:SELECT句でデータを取得するとき、AS句を併用すると、そのカラムに別名を付けることが出来る

 

SELECT user_id

FROM shifts

WHERE date = "2015-07-01"

↑これだと重複した結果が出力される

 

SELECT DISTINCT カラム名

DISTINCTキーワードを使用で。、指定したカラムの値が重複する行を除外してデータ取得する

 

SELECT DISTINCT user_id

FROM shifts

WHERE date = "2015-07-01"

 

GROUP BY カラム名

GROUP BY句:指定したカラムが同じ値を持つデータを1つのグループとしてまとめることが出来る

 

SELECT user_id

FROM shifts

WHERE date = "2015-07-01"

GROUP BY user_id

このSQL文では、

①”shifts"テーブルから"date"が"2015-07-01"のレコード取得しています。

②”user_id"が同じ値のレコードをグループ化し、

③そのグループ化された一覧の"user_id"のみを表示する

ということが行われています。

 

レコードの数を数える

グループ化されたデータは何件のレコードがグループされているのかというデータを持っている

 

SELECT COUNT(カラム名)

CONUT関数:グループ化されたデータに対して使用することが出来る集計関数の一

 

SELECT user_id, COUNT(*)

FROM shifts

WHERE date = "2015-07-01"

GROUP BY user_id

上記のSQL文は、先ほどGROUP BY句で実行したSQL文の、

SELECT句にCOUNT(*)を追加したものです。

今回は特にNULLの行を除きたいといったことはないため、

COUNTのカラム指定は*となっています。

 

FROM テーブル名1

JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2

JOINを使用すると、指定したそれぞれのテーブルの、カラムの値が一致するデータを結合することが出来る

 

FROM shifts

JOIN users ON shifts.user_id = users.id

「"shifts"テーブルに"users"テーブルを結合させます。

 "shifts"テーブルの各行には、その行の"user_id"が"users"テーブルの"id"と一致する行を結合させます。」

という意味

 

FROM shifts (as) s

JOIN users (as) u ON s.user_id = u.id

 

SELECT

    user_id,

    COUNT(*) "コマ数",

    u.*

FROM shifts s

JOIN users u ON s.user_id = u.id

WHERE date = "2015-07-01"

GROUP BY user_id

 

SELECT DISTINCT user_id

FROM shifts

WHERE date = "2015-07-01"

 

SELECT *

FROM users

WHERE id NOT IN (リスト)

SQL文はWHERE句で、NOT INを使用して以下のように記述することが出来る

 

テスト解答

https://master.tech-camp.in/expert_exam_questions/D9UwxZaakE0FxXffCQjs/expert_exam_responses/232515/edit