0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQL,SQL文について自分の言葉で説明してみる。

Last updated at Posted at 2021-06-05

##MySQLとは
リレーショナルデータベース管理システムの一種のこと。

###リレーショナルデータベース管理システム(RDBMS)とは
リレーショナルデータベースを管理するためのソフトウェアのこと
MySQL以外にもMicrosoft SQL Server,PostgreSQL,SQLiteなどがある。

###リレーショナルデータベースとは
世界で最も有名な種類のデータベースで、行と列によって構成された「表形式のテーブル」と呼ばれるデータの集合を、互いに関連付けて関係モデルを使ったデータベースのこと。
いくつかあるデータベースの種類の一つ(他にも階層型、NoSQLなどがあります。)

まとめると、データベースという大枠の中に階層型、リレーショナル型、NoSQL、ネットワーク型などがあり、リレーショナル型のデータベースを管理するシステムのことをRDBMS、このRDBMSの一つがMySQL。
スクリーンショット 2021-05-11 16.08.18.png

##SQLとは
RDBMSを操作するための言語のこと。
以下のようなことができる。

  • データの検索
  • データの追加
  • データの更新
  • データの削除
  • テーブルの作成
  • テーブルの削除
  • テーブルの主キーの設定
  • ユーザー権限の付与

##データベース・レコードの作成、削除、更新など
####データベースの作成

create database first_app_develop;

####データベースの削除

drop detabase first_app_develop;

####テーブル・カラムの作成
varchar= variable length(可変長文字列)

create table users (
   id int,
   name varchar(10)
);

####レコードの追加

insert into users (id,name) values (1,'satou');

####レコードの更新

update users
set name ='佐藤', birthday = '1997-01-01'
where id = 1;
-- whereは省力可。whereの条件に合致するものは全て書き換わる

###レコードの削除

delete from users where id = 1;
-- update同様に条件に合致するものは全て削除される

##SELECT文
リレーショナルデータベースのテーブル(表)の行を読み取るためのSQL構文
処理結果はテーブルを返す

select 'カラム名' from 'テーブル名';
-- selectやfromは大文字でも小文字でもok

select 'カラム名1', 'カラム名2' from 'テーブル名';
-- カラム名は複数指定もできる

また、アスタリスクを使用すると全てのカラムを取得できる

select * from city ;
-- selectは条件に合致した情報を取得し、新しくテーブルを作ってくれる

※MySQLのサイトのworld databaseというデータベースを使って練習したので、これから出てくるテーブル名やカラム名は全てworld databaseにあるものになります。

##WHERE句
テーブルデータの検索条件を指定するためのSQL構文
SELECT文やUPDATE文と組み合わせて使う

select 'カラム名' from 'テーブル名' where '条件式';

####等価演算

select * from city where Name = 'Tokyo';
-- cityテーブルにあるNameカラムがTokyoとなってるレコードを取得
-- プログラミング言語だとイコール一つは代入になるが、SQLに代入操作がないためイコールは一つ

MySQLでは条件に合致しTRUEになると1になり、FALSEは0になる。

select * from city where 1;
-- 全てのレコードが得られる

select * from city where 0;
-- 何も得られない

####大小演算子

select * from city where Population >= 1000000;
-- 人口1000000人以上の都市を取得

select * from city where Population > 1000000;
-- 人口1000000人より大きい都市を取得

select * from city where CoutntryCode > 'Y';
-- 文字列の大小比較の場合辞書順での比較になる
-- YよりもあとのCoutryCodeカラムのデータを取得

####非等価比較

select * from city where CountryCode != 'JPN';
-- CountryCodeがJPNではないものを取得

####AND,BETWEEN,IN

-- AND
select * from city where CoutntryCode = 'JPN' and Population > 500000;

-- BETWEEN
select * from city where Population between 400000 and 500000;
-- cityテーブルにあるPopulationカラムが400000 ~ 500000の都市を取得

-- IN
select * from city where CountryCode in ('FRA','ITA')
-- CountryCodeがフランスもしくはイタリアのものを取得
select * from city where CountryCode not in ('FRA','ITA')
-- フランスまたはイタリア以外の以外を取得

###LIKE句(あいまい検索)

ワイルドカード文字

  • % : 0文字以上のあらゆる文字列
  • _ : 任意の1文字

####%(0文字以上の文字列)

select * from city where Name like 'ab%';
-- cityテーブルからNameカラムからabで始まる文字を取得

select * from city where Name like '%ab';
-- cityテーブルからNameカラムのabで終わる都市の名前を取得

select * from city where Name like '%ab%';
-- abを含む都市を検索

####_(任意の1文字)
文字数が分かってる場合便利

select * from city where CountryCode like 'JP_';
-- JPの後に続く一文字。

-- アンダースコアが3つの場合
select * from city where Name like '___';
-- Nameカラムが3文字のものを取得
 
select * from city where Name like '___' and Population > 100000;
-- 他の条件式も組み合わせできる

####ORDER BY
ソートできる(デフォルトだと昇順)

order by 'カラム名'
-- カラム名順に並べ替えることができる
select * from city where CountryCode = 'JPN' order by Population;
--昇順に並ぶ

select * from city where CountryCode = 'JPN' order by Population desc;
-- 降順に並ぶ

####LIMIT句
検索数を制限する

select * from city where CountryCode = 'JPN' order by Population desc limit 5;
-- cityテーブルにあるCountryCodeがJPNで人口が上位5件のものを降順で取得

####OFFSET句
データを取得する開始位置を指定する
例えばOFFSETを4に指定した場合最初から4番目のデータを飛ばし、5番目のデータから取得する

select * from user limit 3 offset 4;

-- 5番目のユーザーから三人分取得できる

##集計関数
平均値,合計値,最大値,最小値などを算出することができる

select sum(population) from country;
-- coutryテーブルの人口を合計する

スクリーンショット 2021-06-05 16.26.10.png

####as句
select文で作成したテーブルに新しくカラム名を決められる

select format(sum(population),0) as WorldPoupulation from country;
-- format関数で三桁をカンマ区切りにする。

スクリーンショット 2021-06-05 16.23.30.png

####GROUPBY句

select Continent, format(sum(population),0) as ContinentPoupulation from country group by Continent;

スクリーンショット 2021-06-05 16.31.42.png

##JOIN
テーブルの結合を行い、他のテーブルを横に繋げることができる

cityテーブルとcountryテーブルを結合したテーブルを作成
on以降はそれぞれどのカラムが紐づいてるかが書いてある

select * from city join country on city.countrycode = country.code;

#####cityテーブルとcountryテーブルをjoinして、日本の人口と東京の人口、日本の人口に対する東京の人口の割合を出してみる

select 
   id, 
   city.name,
   city.population as CityPopulation, 
   country.population as CountryPopulation,
   city.population / country.population as ratio
from city join country on city.countrycode = country.code
where city.name = 'Tokyo';

cityテーブルとcountryテーブルどちらにもあるカラムにはどちらのカラムのことかを明示する必要がある
スクリーンショット 2021-06-05 18.21.44.png

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?