【DB入門】抽出条件を指定する(Where)

2020年11月19日PostgreSQL構文

スポンサーリンク

Where文

Where文をSelect文の後につけることで、抽出条件を指定できます。

select 列名 from テーブル名 where 条件;

抽出条件が複数あった場合は、「and」でつなぎます。

select 列名 from テーブル名 where 条件1 and 条件2;

 

Select文に抽出条件を加えた例です。

--学生コード = 'stu01'となっているデータを抽出する。
select * from m_student_score where student_code = 'stu01';

--得点(score)が80以上のデータを取得する
select * from m_student_score where score >= 80;

--得点(score)が50以下のデータを取得する
select * from m_student_score where score <= 50;

--得点(score)が50以下のデータ 
--かつ 学生コードが'sub06'となっているデータを抽出する。
select * from m_student_score where score <= 50 and student_code = 'stu06'; 

--得点(score)が30以上50以下のデータを取得する(以下の二つは結果が同じです)。 
select * from m_student_score where score >= 30 and score <= 50;
select * from m_student_score where score between 30 and 50;

 

like

文字を抽出条件にする時、等しい場合は「=」、部分一致の場合は「like」を使います。

--等しいものを抽出
select 列名 from テーブル名 where 条件 = 文字列;

--前方一致するものを抽出
select 列名 from テーブル名 where 条件 like 文字列%;

--後方一致するものを抽出
select 列名 from テーブル名 where 条件 like %文字列;

--部分一致するものを抽出
select 列名 from テーブル名 where 条件 like %文字列%;

 

like例

--名前が「織田信長」と一致するデータを取得
select * From m_student where student_name = '織田信長';

--名前が「豊臣」から始まるデータを取得
select * From m_student where student_name like '豊臣%';

--名前が「家康」で終わるデータを取得
select * From m_student where student_name like '%家康';

--名前が「田」を含むデータを取得
select * From m_student where student_name like '%田%';

 

In

「○か○か○のもの」のように条件を指定する場合は、IN句を使用します。

select 列名 from テーブル名 where 列名 in(値1 , 値2 , 値3);

--例:商品分類が食品、電化製品、車の商品を取得する。
select * from 商品 where 分類 in('食品' , '電化製品' , '車');

 

Not In

「○か○か○でないもの」のように条件を指定する場合は、NOT IN句を使用します。

select 列名 from テーブル名 where 列名 not in(値1 , 値2 , 値3);

--例:商品分類が食品、電化製品、車でない商品を取得する。
select * from 商品 where 分類 not in('食品' , '電化製品' , '車');

 

サブクエリ

SELECT文を実行すると、現在接続中のセッションを取得できます。

select 列名 from テーブル名1 
where 列名1 in(select 列名2 from テーブル名2); --列名1と列名2は一致してなくてもOKです。

--例:Aさんが購入した商品を取得する
select * from 商品 where 商品コード in(select 商品コード from 商品購入履歴 where ユーザーID = AさんのID);

上の例では、()内の『select 商品コード from 商品購入履歴 where ユーザーID = AさんのID』の

結果で、商品コードで「商品」テーブルを取得しています。