SQL
SQLとは
このページでは主なコマンドの使用方法を取り上げていきます。
データの入れ物であるテーブルを操作するためのコマンド
CREATE、DROP、ALTER
テーブル内のデータを操作するためのコマンド
INSERT、SELECT、UPDATE、DELETE
基本的な文法
命令の最後には;をつける。
大文字・小文字の区別はない。
文字列定数は""か''で括る。
データベースの作成、削除
code:sql
-- データベースを作成する
create database <database>;
-- 使うデータベースを宣言する(MySQL)
use <database>;
-- データベースを消す
drop database <database>;
-- データベースの一覧を表示する(MySQL)
show databases;
テーブルの作成、削除
code:sql
-- テーブルを定義する
create table <table> (<field> <type>, ...);
-- 例: create table book (code integer, title varchar(20), author varchar(20));
-- テーブル定義を表示する(MySQL)
describe <table>;
-- テーブルを削除する
drop <table>;
型はvarchar(n)(最大n文字の可変長文字列)とintegerをよく使う気がする。
型名とフィールドを逆にしがち。
varchar[20]って書きがち(丸括弧が角括弧になっていることに注目してください)。
テーブルのデータ内容の制約付与
型名の後に制約名を追記することで付与できる。
例: create table book (code integer primary key, title varchar(20), author varchar(20)); -- primary key制約を付与している。
主キーの付与
基本的にテーブル宣言時に設定する(一応後からでも設定できる)
型名の後にPRIMARY KEYと追記すると付与できる。
テーブルの行を一意に識別可能な値のみに制限。
ほかの行と同じ値・NULLを許可しない。
基本的に1つのカラムにしか付けられない。
2つ以上のフィールドの値をまとめて主キーとして扱う場合は複合主キーを使う。 自動採番: AUTO INCREMENT
NULLを許可しない: NOT NULL
ほかの行との重複を許可しない: UNIQUE
テーブルにデータを挿入する
code:sql
insert into <table>(<field>, ...) values(<value>, ...);
/* 例: insert into book(code, title, author) values(2, '思想表現と技術研鑽', 'mgn901'); */
AUTO_INCREMENTなカラムでは、NULLを入れることで自動採番される。
テーブルからデータを取得する。
code:sql
-- tablenameからデータを取得する
select <field>, ... from tablename;
-- select * from tablename;
where句
select文と一緒に使う。
code:sql
/* authorがmgn901の行のみ表示 */
select * from book where author='mgn901';
=: 等しい
==ではない。
<>: 等しくない
!=ではない。
>=、>、<=、<
AndとOr
&&や||ではない。
Between
比較演算子の代わりに使える。
code:sql
select * from <table> where <field> Between <value1> and <value2>;
select * from book where price Between 600 And 1000;
like句
Where句とセットで利用する。
特定の文字が含まれるものを検索可能。
%: 任意の0文字以上の文字列
"%mgn%"→mgnが含まれる任意の文字列
_: 任意の1文字
"mgn9_1"→mgn901、mgn911、……が出てくる。
code:sql
select * from book where title like "%mgn%";
delete文
whereなしだと全レコード削除
code:sql
/* idが1のレコードを削除 */
delete from <table> where id=1;
/* 全てのレコードを削除 */
delete from <table>;
update文
レコードを書き換える。
whereなしだと全レコード書換
指定したカラムを書き換えることができる。
code:sql
/* 600円のものを650円に値上げ */
update book set price=650 where price=600;
/* 全レコード50円値上げ */
update book set price=price+50;
alter table文
add: カラムの追加
drop: カラムの削除
modify (modify column?): カラムの変更
code:sql
alter table <table> add <column> <type>;
alter table <table> drop <column>;
order by句
asc: 昇順
desc: 降順
code:sql
select * from <table> order by <column> <order>;
select * from student order by age desc;
select * from student order by age asc;
where句と併用する場合はwhere句を先に書く。
一つのカラムの合計や平均を取得する。
sum, max, min, avg, count
code:sql
select <func>(<column>) from <table>;
select avg(age) as '平均年齢' from student;
select count(*) from student;
select sum(price*1.08) from items;
countの引数に
カラム名を指定した場合はnullをカウントしない。
全行nullの場合集計結果は0。
ワイルドカードを指定した場合はnullをカウントする。
計算(sum, max, min, avg)
nullは無視
全行nullの場合nullを返す。
sum, avgは数値型のみを扱える。
max, min, countは全型を扱える。
group by
code:sql
select gender, AVG(age) as average from nameList group by gender;
カラムの値が同じグループごとに集計することができる。
あるクエリの結果を問い合わせて別の問い合わせを行う。
該当ID一覧を取得し、そのID一覧を条件に別テーブルを検索。
code:sql
select <column1> from <table2> where <column1>=(select <column2> from <table2>...);
NULLと比較するとNULLが返ってくる挙動の理由