今回の記事は応用情報午後試験のデータベース分野で出題されるSQLをまとめてみました。応用情報午後試験でデータベース分野を受験しようとしている方は是非参考にしてみてください。
頻出SQL文まとめ
SQL文に関しては午前・午後両方で問われます。午前試験では基本的にはSQLを実行した後の結果やSQLの機能や関数の意味などが問われることが多いです。ただ、かなり回数は少ないですが、SQLを空欄に当てはめるなども出題されていた(過去15年分しか確認していませんが。。)ので是非押さえておきましょう。
下記の流れで紹介していきます。
- SQL関連用語
- 頻出SQL文
SQL関連用語
ストアドプロシージャ(Stored Procedure)
一連の処理手順をプログラムとしてまとめて実行できる処理モジュールをDBMS上に用意したもの。
VARCHAR・CHAR
CHAR(10)は常に10バイトでそれ以下のバイトの場合はバイト数がその数に減る。そのバイト数は固定。VARCHARは可変長。補足:日本語は2バイト。
直積
直積はデータ操作で、2つの関係(表)に含まれる要素のすべての組合せから成る表のことです。
べき等
複数回同一操作をしても、一回しか実行しなくても結果が同じになる(selectなど)
レプリケーション
一つのノードへのレコード挿入を他のノードでも実行する
頻出SQL
SQLの組み立てはCRUD操作のSQL(select,insert,update,delete)の後ろでテーブルを指定(from句)し、条件句(where句)で操作対象のデータを絞るという構成です。
(例)
select id from テーブル1 where id = 1;
頻出SQLを順番にご紹介していきます。
CREATE文
テーブルを作成。
create table テーブル名 (id int, name varchar(10));
SELECT文
データを取得。
select * from テーブル名;
INSERT文
データを追加。
insert into テーブル名;
UPDATE文
データを更新。
update テーブル名 set {更新するカラム} = {更新データ};
DELETE文
データを削除。
delete テーブル名;
where句
where {検索対象のカラム} = {検索条件}
order by句
order by {並び順を指定するカラム}
GROUP BY句
ほぼ確実に出題されている気がします。SQLノータッチの方は答えづらいので、少しでも勉強している方はかなり簡単に回答できます。基本的にgroupごとに結果をまとめて取得するものです。
(データ例)
テーブル名:Sample
class point
a | 10
a | 20
b | 30
a | 30
b | 30
select class,avg(point) from sample group by class;
------
a 20
b 30
------
ちなみにgroup byしたデータを絞る場合はwhereでなく、「having」を使う。これも良く出る。
(データ例)
テーブル名:Sample
class point
a | 10
a | 20
b | 30
a | 30
b | 30
select class,avg(point) from sample group by class having point > 20;
------
b 30
------
最後に、group byを実行するとselect分で出力できる項目にはgroup by でグルーピングした項目と計算系(sumやavg、countなど)のみです。このルールで午前午後かなりの問題が解けます。
(データ例)
テーブル名:Sample
class point teacher
a | 10 | tanaka
a | 20 | tanaka
b | 30 | sato
a | 30 | tanaka
b | 30 | sato
select class,avg(point),teacher from sample group by class,teacher having point > 20;
------
b 30 sato
------
上記のように先生を結果に出力したい場合は、group by句にそのカラムも追加する必要があります。
group by長くなりましたがかなり重要。
計算系SQL
先ほどのgroup by句でも説明に使いましたがこちらもほぼ頻出です。
select count(*) from ... -- データの個数
select max(項目) from ... -- 点数などの項目の一番上のデータを取得
select sum(*) from ... -- 点数などの項目合計を取得
select avg(*) from ... -- 点数などの項目の平均点を取得
in句
こちらもほぼ頻出。条件の中にデータが含まれているかの条件句です。
select count(*) from テーブル where 点数 in (0,1,2,3) -- 0,1,2,3の中に含まれている点数のデータが抽出される
exists句
こちらもほぼ頻出。条件の中にデータが存在しているかの条件句です。
select count(*) from テーブル where exists 点数 < 30 -- 30以下の点数のデータ抽出される
副問い合わせ(サブクエリ)
こちらも必ず出ます。かっこで囲ってSELECT文の結果を使います。みた方が早いです。
-- 通常のselect文
select id, name from テーブル where id in (0,1,2) ;
-- サブクエリを含むselect文(上記とやっていることは同じだがin句の中身をselect文で取得している)
select id, name from テーブル where id in (select id from テーブル where id < 3);
-- 通常のinsert文
insert into テーブル (id, name) values (1, 'aaa');
-- サブクエリを使用したinsert
insert into テーブル (id, name) values (select id, name from 取得元テーブル where id < 100);
join句
こちらも必ず出題されます。テーブルを結合します。結合条件が違うという差があります。
- inner join:内部結合
- left join:外部結合
select id from テーブル1 inner join テーブル2 on テーブル1.cd = テーブル2.cd;
select id from テーブル1 left join テーブル2 on テーブル1.cd = テーブル2.cd;
ここまでがかなり良く問われる頻出SQLです。
頻出ではないがよく聞かれるSQL
カラム定義
create文が出ることまあまああり、この辺りのカラム定義で制約をつけるSQLは知っておく方が良いです。主キー、一意制約、外部キー、not Null、デフォルト値セット、参照、自動採番をカラムに設定するCREATE文です。
CREATE TABLE SAMPLETABLE
(
no int auto_increment
id int PRIMARY KEY,
name varchar(50) UNIQUE NOT NULL,
tel varchar(12) default '000-0000-0000'
FOREIGN KEY(refNo) REFERENCES anotherTable(refNo)
);
between句
こちらもほぼ頻出。条件の間にデータが存在しているかの条件句です。
select count(*) from テーブル where between 点数 40 and 50 -- 40点以上50点以下の点数のデータ
GRANT
稀に聞かれます。GRANT文は、特定のユーザに表などのデータベースオブジェクトに対する権限を付与するSQL文です。
GRANT {権限3,権限2} ON テーブル TO ユーザ;
GRANT SELECT, UPDATE ON table1 TO user1;
REVOKEで権限削除。使用方法はGRANTの部分を置き換えるのみです。
念の為押さえておくべきSQL
CREATE ASSERTION
こちらは午前の用語で出ていたような気がします。CREATE ASSERTION文は、スキーマ内の複数のテーブルに対して制約を適用するSQL文です。テーブルAの合計がテーブルB・Cの合計になるという制約をつけるSQL。
CREATE ASSERTION totalCount
CHECK (SELECT COUNT(*) FROM TableA) = (SELECT COUNT(*) FROM TableB) + (SELECT COUNT(*) FROM TableB);
CASCADE
こちらは午前の用語で出ていたような気がします。参照データの同時削除を行う。
ALTER TABLE
出ているのをみたことはないですが、念の為。カラムの追加・更新・削除などで使用。
-- 単一カラム追加
ALTER TABLE sample ADD COLUMN addCol VARCHAR(8);
-- 複数の場合
ALTER TABLE sample ADD (addCol1 VARCHAR(8),addCol2 VARCHAR(8));
-- カラムの定義変更(複数は上記と同じ要領)
ALTER TABLE sample MODIFY COLUMN addCol VARCHAR(8);
-- カラム削除(複数は上記と同じ要領)
ALTER TABLE sample DROP COLUMN address;
以上で今回の記事は終了です。他にも応用情報関連の記事を記載しているので是非参考にしてみてください。
コメント