LoginSignup
0
0

More than 5 years have passed since last update.

データ分析を効果的に行うためのSQL構文の基礎[SQL]

Posted at

はじめに

データ分析するにあたってSQLを使いこなせるようになる必要が出てきました。
ですので、ここに自分の為の備忘録として、SQL文を用途に応じて列挙しておきます。

SQLとは

Structured Query Languageの略で、リレーショナルデータベース(RDB)の操作を行うための言語です。
SQLはデータベースやテーブルに対して様々な命令を行いますが、その命令は大まかに2つに分けることができます。
それは、データを定義するDDL(Data Definition Language)と、データを操作するDML(Data Manipulation Language)です。

  • DDLの出来ること
命令 機能
CREATE      データベースやテーブルの作成
ALTER データベースやテーブルの更新
DROP データベースやテーブルの削除
  • DMLの出来ること
命令 機能
INSERT      データの登録
UPDATE データの更新
DELETE データの削除
SELECT データの検索

コマンド群

SQLは大文字で記述されることが多いですが、個人的には、小文字で記述することが大半なので、LOWERCASEで書いていきます。

まずは、mysqlにユーザ名rootで接続します。

$ mysql -u root

データベース一覧を表示

mysql> show databases;

データベース(仮:sql_practice)を作成

mysql> create database sql_practice

利用データベースを選択

mysql> use sql_practice;

テーブルの一覧を表示

mysql> show tables;

カラムの型と名前を指定しテーブル作成

mysql> create table users (id int, family_name varchar(255), first_name varchar(255));

テーブル構造を確認

mysql> show columns from users;

テーブル構造の変更(カラム追加)

mysql> alter table users add (email varchar(255), profile_photo varchar(255));

テーブル構造の変更(カラム名変更)

mysql> alter table users change profile_photo image varchar(255);

テーブル構造の変更(カラム削除)

mysql> alter table users drop image;

取得するカラムを指定

mysql> select family_name from users;

全てのカラムを取得

mysql> select * from users;

取得するレコードの制限

mysql> select * from users where family_name = "古川";

論理演算子で制限(AND)

mysql> select * from users where age <= 25 and prefecture = "大阪";

論理演算子で制限(OR)

mysql> select * from users where age >= 25 or prefecture = "大阪";

論理演算子で制限(NOT)

mysql> select * from users where not prefecture = "大阪";

単一カラムの範囲検索

mysql> select * from users where age between 20 and 25;

単一カラムのリスト検索

mysql> select * from users where prefecture in ("大阪", "京都");

データの結合

mysql> select concat(family_name, first_name) from users;

検索結果のカラム名の変更

mysql> select concat(family_name, first_name) as "名前" from users;

asは省略できます。

mysql> select concat(family_name, first_name) "名前" from users;

重複する行の除外

mysql> select distinct user_id from tweets where data = "2018-07-07";

レコードのグループ化

mysql> select user_id from tweets where data = "2018-07-07" group by user_id;

distinctと一見同じように見えるが、こちらは、グループ単位で集計した結果を取得することが出来る

レコードの数を数える

mysql> select user_id, count(*) from tweets where date = "2018-07-07" group by user_id;

これは、2018-07-07に誰が、何回ずつツイートしたか、を表しています。

カラム名の変更

mysql> select user_id, count(*) as "ツイート数" from tweets where date = "2018-07-07" group by user_id;

テーブルの結合

mysql> select user_id, count(*) "ツイート数", u.* from tweets t join users u on t.user_id = u.id where date = "2018-07-07" group by user_id;

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

検索結果を用いた検索(サブクエリ)

mysql> select * from users where id not in (select distinct user_id from tweets where date = "2018-07-07");

これは、2018-07-07にツイートしていない人を取得しています。

まとめ

備忘録としてまとめたため、読み手に配慮された説明がなされていなかったかもしれませんが、ご容赦ください。

役に立った方は、いいね、お願いします(^^)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0