SQLについての研修があったので復習を兼ねて内容をまとめました。
SQLはプログラミング初学者が重要視していません。
(あくまでも推測です。)
しかし、
先輩エンジニアはSQLはしっかり勉強すべき
と言っていたので
初学者の方も疎かにしないようにしましょう。
###基礎的なSQLに関連のある言葉
#####SQL(structured query language)
データベースを操作する言語
#####DB(データベース)
データを格納する箱
#####RDB(リレーショナルデータベース)
データを表形式で扱うデータベース
複数のテーブルでデータベースを管理する方式
#####テーブル
データの格納領域
データの種類ごとに分けられている
#####カラム
テーブルの列
#####ロウ
テーブルの行
#####レコード
水平方向にあるデータそのものをさす言葉
ロウと混同してはいけない
#####フィールド
レコードを構成する1つ1つの要素
#####クエリ
SQLを実行した時にデータベースに送る命令文
SQL接続方法
-- 起動
mysql.server start
-- 停止
mysql.server stop
-- rootでログイン
mysql -u root -p
-- 起動状況確認
mysql.server status
###SQLの例
-- クエリの最後に";"を忘れない
-- 全てのレコードを抽出する
select * from テーブル名;
-- 指定したカラムを含むレコードを抽出する
select カラム名 from テーブル名;
-- 列に別名をつける
select カラム名 as 新しいカラム名 form テーブル名;
-- asは省略可能
select カラム名 新しいカラム名 form テーブル名;
-- where句で条件を指定してレコードを抽出
select * from テーブル名 where 条件;
-- 他の言語で見ることがなかった比較演算子
-- 値がnulのレコード
is nul
-- 値がnulではないレコード
is not nul
-- ある値が値セットに含まれているかどうか
in()
-- ある値が値セットに含まれていないかどうか
not in()
/* パターンマッチング
% 0文字以上の文字列
_ 任意の1文字
''で囲む */
select * from テーブル名 where カラム名 like '***';
-- limit句で抽出するレコード数を制限する
-- オフセットは省略可能
select * from テーブル名 limit オフセット number;
###集約関数
-- 合計値を求める
select sum(カラム名) from テーブル名;
--- 平均値を求める
select avg(カラム名) from テーブル名;
-- 最小値を求める
select min(カラム名) from テーブル名;
-- 最大値を求める
select max(カラム名) from テーブル名;
###集約関数におけるnullの扱い
nullは「値がないこと」を表す時に使う言葉
集約関数では基本的にnullは無視される
nullを含んだ計算結果は全てnullになる。
-- 数える
select count(カラム名) from テーブル名;
-- 重複を取り除く
select count(distinct カラム名) from テーブル名;
###select文の記述順序と実行順序
記述順序
select from where group by having order by limit;
実行順序
from where group by having select order by limit;
###order by
昇順、降順を指定する
-- 昇順を指定
select * from テーブル名 order by カラム名 asc;
-- 降順を指定
select * from テーブル名 order by カラム名 desc;
###演算子
-- 絶対値を求める。
select abs(引数);
-- 四捨五入
-- 桁数で0にすると、小数点第1位を四捨五入する。
select round(引数,桁数);
###文字列の連結
select concat(引数1, 引数2) from テーブル名;
###日付と時刻の関数と演算子
-- 現在の日付
select current_date();
-- 現在の時刻
select current_timestamp();
-- n日後の日付
select current_date() + interval n day;
-- n日前の日付
select current_date() - interval n day
n時間後の時間
select current_timestamp() + interval n hour;
n時間前の時間
select current_timestamp() - interval n hour;
-- extract
-- 日時や日付の特定の部分を取り出す。
-- 条件に当てはまるyearを含むレコードを取り出す
select * from テーブル名 where extract(year from カラム名) = 条件;
随時更新します。