大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
【目次】
YouTube 再生リスト「リレーショナルデータベースの基本」: https://youtube.com/playlist?list=PLwoDcGBEg9WGKPP6dExr8DcUf9nV2kYGD
【サイト内のリレーショナルデータベース関連の資料】
【資料】
【概要】
データベースは、日常生活や社会にも広く影響を与えており、重要な存在である。オンラインでのデータのやり取りやデータの蓄積には、データベースシステムが不可欠である。まずは、データベースとデータベースシステムについての理解が重要であり、Excelとの違いやデータベースシステムの特徴や機能を把握する必要がある。データベースは、人工知能、マルチメディア、情報セキュリティなど、多くの技術と密接に関連している。
【関連する外部ページへのリンク】
【資料】
【概要】
データベースシステムは、データの効率的な管理を可能にするITシステムです。その中でも、最も普及しているデータベースシステムはリレーショナルデータベースシステムです。リレーショナルデータベースシステムでは、データは「テーブル」と呼ばれる表形式で保管され、各テーブルのセルには単一の値が格納されます。必要なデータを取得するためには、リレーショナルデータベースシステムが提供する主要機能である「問い合わせ(クエリ)」を使用します。問い合わせは、SQL言語のコマンドを利用して行います。これにより、データを簡単に取得できるようになります。問い合わせは、人間がSQL言語のコマンドを編集して実行する場合だけでなく、リレーショナルデータベースシステムと連携するさまざまなアプリケーションで広く活用され、データの効率的な管理と共有を実現しています。このように、リレーショナルデータベースシステムの「問い合わせ」の機能は、重要な役割を果たしています。
【資料】
【概要】
リレーショナルデータベースの設計は、データの整合性と効率的な管理を重視するものであり、冗長なデータの排除やデータ型の統一、関連するテーブル間の参照整合性を確保することが求められます。不適切な設計は「異状」を引き起こし、例えば、同じ情報を複数箇所で更新する必要が生じる「更新異状」などの問題を生じさせます。これを解消するための「正規化」というプロセスを通じて、テーブルの冗長性を排除し、整合性を高めることが目指されます。具体的には、混在している情報を持つテーブルを「テーブルの分割」を通じて複数のテーブルに分け、必要に応じて「テーブルの結合」を行うことで、関連するデータを効率的に管理できるようにします。
【演習】
| 注文ID | 顧客名 | 住所 | 商品名 | 価格 | 購入日 | |-------|----------|--------------------|---------|-------|------------| | 1 | 田中太郎 | 東京都中央区1-1-1 | テレビ | 50000 | 2023-10-01 | | 2 | 田中太郎 | 東京都中央区1-1-1 | 冷蔵庫 | 100000| 2023-10-02 | | 3 | 山田花子 | 大阪府北区2-2-2 | 洗濯機 | 30000 | 2023-10-03 | | 4 | 田中太郎 | 東京都中央区1-1-1 | 掃除機 | 15000 | 2023-10-04 |
商品テーブル
| 商品ID| 商品名 | 価格 | |-------|---------|-------| | 1 | テレビ | 50000 | | 2 | 冷蔵庫 | 100000| | 3 | 洗濯機 | 30000 |
注文履歴テーブル
| 注文ID| 商品ID| 商品名 | 価格 | 注文日 | |-------|-------|---------|-------|------------| | A | 1 | テレビ | 50000 | 2023-10-01 | | B | 2 | 冷蔵庫 | 95000 | 2023-10-02 | | C | 3 | 洗濯機 | 31000 | 2023-10-03 |
【資料】
【概要】
オンラインツール「SQLFiddle」を使用しながら、SQL問い合わせ(クエリ)の基本から応用までを広く体験し、SQLの全体像を把握します。オンラインツール「SQLFiddle」のメリットとして、場所や時間に縛られず、ソフトウェアのインストールなしで学習できる点があります。内容は、SQL を用いたテーブル定義、データの追加、基本的な問い合わせ(SELECT, FROM, WHERE)から応用的なクエリ(JOIN, GROUP BY など)まで多岐にわたります。今回は全体像の把握と、オンラインツール「SQLFiddle」に慣れることであり、次回以降で、SQLの基本を確実にマスターしながら、少しずつ応用に進みます。今回の授業で、SQL問い合わせの多様な用途と能力を早期に把握できます。これにより、学習意欲が高まり、効率的にスキルを習得することを期待します。さらに、全体像を早い段階で理解することで、何を深く学ぶべきか、どの方向で学習を進めるべきかが明確になります。
【関連する外部ページへのリンク】
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
create table 朝食と値段 ( 名前 text, 朝食 text, 値段 integer ); insert into 朝食と値段 values ('A', 'カレーライス', 400); insert into 朝食と値段 values ('B', 'うどん', 250); insert into 朝食と値段 values ('C', 'カレーライス', 400);
右側のパネル
select * from 朝食と値段;
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
CREATE TABLE 従業員 ( id INTEGER, name TEXT, age INTEGER, salary INTEGER, department_id INTEGER); CREATE TABLE 部署 ( id INTEGER, name TEXT); INSERT INTO 従業員 VALUES (1, 'Alice', 30, 50000, 1); INSERT INTO 従業員 VALUES (2, 'Bob', 40, 60000, 1); INSERT INTO 従業員 VALUES (3, 'Charlie', 35, 70000, 2); INSERT INTO 部署 VALUES (1, 'HR'); INSERT INTO 部署 VALUES (2, 'Engineering');
右側のパネル
select * from 従業員; select * from 部署;
【自習】
SELECT age FROM 従業員; SELECT * FROM 従業員 WHERE age = 30;
SQLFiddle のURL: http://sqlfiddle.com/
SELECTは、データベースからデータを取得するための基本。
SELECT * FROM 従業員; SELECT name, age FROM 従業員;
FROMは、問い合わせ(クエリ)が対象とするテーブルを指定する。
SELECT name FROM 従業員; SELECT name FROM 部署;
WHEREは、特定の条件に一致する行を選択するために使う。
SELECT * FROM 従業員 WHERE age > 30;
関係のあるテーブルを、結合条件を指定して1つに結合する。
SELECT 従業員.name, 部署.name FROM 従業員 JOIN 部署 ON 従業員.department_id = 部署.id;
SELECT DISTINCT department_id FROM 従業員;
COUNTは、行数をカウントする。
SELECT COUNT(*) FROM 従業員;
これらは、数値データに対する平均、最大、最小、合計を計算する。
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM 従業員;
GROUP BY は、指定した属性についてグループ化する。
SELECT department_id, COUNT(*) FROM 従業員 GROUP BY department_id;
ORDER BY は、指定した属性についてソートする。
SELECT name, salary FROM 従業員 ORDER BY salary DESC;
INや括弧()は、SQLでさまざまな用語があるが、問い合わせ内に別の問い合わせを含めるときにも使える。 これは、ある問い合わせの結果を別の問い合わせのために使うもの。
SELECT * FROM 従業員 WHERE salary > (SELECT AVG(salary) FROM 従業員);
【資料】
【概要】
SQLの基本的なキーワード、SELECT、FROM、WHEREを理解することで、リレーショナルデータベースのテーブルでのデータ管理について理解が深まり、条件指定による柔軟なデータアクセスのスキルを習得できます。例えば、SELECT * FROM T;はテーブルTの全てのデータを取得し、SELECT a, b FROM T WHERE b > 80;は特定の条件を満たすデータだけを選択します。また、SELECT DISTINCT a FROM T;やSELECT * FROM T WHERE c LIKE '%階';のように、重複行の排除や特定のパターンに一致するデータの取得、AVG(平均)、MAX(最大)、MIN(最小)、SUM(合計)、COUNT(行数のカウント)による集計など、多彩な方法でデータを取得、分析できます。これらの基本操作は、データベースの日常的な操作や更に複雑な問い合わせの基盤となり、効果的なデータ取得や分析が可能となります。
【関連する外部ページへのリンク】
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
CREATE TABLE 記録 ( 名前 TEXT, 得点 INTEGER, 居室 TEXT); INSERT INTO 記録 VALUES('徳川家康', 85, '1階'); INSERT INTO 記録 VALUES('源義経', 78, '2階'); INSERT INTO 記録 VALUES('西郷隆盛', 90, '3階'); INSERT INTO 記録 VALUES('豊臣秀吉', 82, '1階'); INSERT INTO 記録 VALUES('織田信長', 75, '2階');
右側のパネル
select * from 記録;
SQLFiddle のURL: http://sqlfiddle.com/
右側のパネル
SELECT 居室 FROM 記録; SELECT DISTINCT 居室 FROM 記録;
SELECT 名前, 得点 FROM 記録 WHERE 得点 > 80; SELECT 名前, 得点 FROM 記録 WHERE 得点 BETWEEN 80 AND 85;
SELECT AVG(得点) FROM 記録;
SELECT * FROM 記録 WHERE 居室 LIKE '%階'; SELECT * FROM 記録 WHERE 居室 IN ('1階', '2階');
【自習】
自習(右側のパネルを使用)
SELECT 名前 FROM 記録;
SELECT 得点 FROM 記録;
【資料】
【概要】
結合は、リレーショナルデータベースにおいて異なるテーブルを結びつけ、新たなテーブルを生成する操作です。通常、結合条件は2つのテーブルの特定の属性同士の値が等しいという条件を指定しますが、複雑な条件も指定できます。結合はSQL言語を用いて行われ、複数のテーブルを効果的に組み合わせてデータを取得でき、データベースの柔軟性と効率性を向上させます。結合を習得することで、データベースのクエリや分析を効果的に行い、意思決定や問題解決能力が向上します。結合を行う際、SQLでは通常、以下のような構文を使用します。JOINキーワードを使用して2つのテーブルを結合し、ON句で結合条件を指定します。ここでは、結合条件として、2つのテーブルの特定の属性同士の値が等しいという条件を指定していますが、他の条件も指定できます。このSQL文を実行することで、2つのテーブルが結合され、新しい結合されたテーブルが生成されます。
【関連する外部ページへのリンク】
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER); INSERT INTO 商品 VALUES(1, 'みかん', 50); INSERT INTO 商品 VALUES(2, 'りんご', 100); INSERT INTO 商品 VALUES(3, 'メロン', 500);
右側のパネル
select * FROM 商品;
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER); INSERT INTO 商品 VALUES(1, 'みかん', 50); INSERT INTO 商品 VALUES(2, 'りんご', 100); INSERT INTO 商品 VALUES(3, 'メロン', 500); CREATE TABLE 購入 ( 購入者 TEXT, 商品番号 INTEGER); INSERT INTO 購入 VALUES('X', 1); INSERT INTO 購入 VALUES('X', 3); INSERT INTO 購入 VALUES('Y', 2);
右側のパネル
SELECT * FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号;
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
演習2と同じ
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER); INSERT INTO 商品 VALUES(1, 'みかん', 50); INSERT INTO 商品 VALUES(2, 'りんご', 100); INSERT INTO 商品 VALUES(3, 'メロン', 500); CREATE TABLE 購入 ( 購入者 TEXT, 商品番号 INTEGER); INSERT INTO 購入 VALUES('X', 1); INSERT INTO 購入 VALUES('X', 3); INSERT INTO 購入 VALUES('Y', 2);
右側のパネル
SELECT * FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X'; SELECT 商品名, 購入者, 単価 FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X';
SELECT 商品名, 購入者, 単価 FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'Y';
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
演習2と同じ
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER); INSERT INTO 商品 VALUES(1, 'みかん', 50); INSERT INTO 商品 VALUES(2, 'りんご', 100); INSERT INTO 商品 VALUES(3, 'メロン', 500); CREATE TABLE 購入 ( 購入者 TEXT, 商品番号 INTEGER); INSERT INTO 購入 VALUES('X', 1); INSERT INTO 購入 VALUES('X', 3); INSERT INTO 購入 VALUES('Y', 2);
右側のパネル
SELECT * FROM 商品 JOIN 購入;
SQLFiddle のURL: http://sqlfiddle.com/
左側のパネル
create table 名簿( ID integer, name text, buy integer ); INSERT INTO 名簿 VALUES(1, '織田', 1); INSERT INTO 名簿 VALUES(2, '豊臣', 2); INSERT INTO 名簿 VALUES(3, '徳川', 2); create table 食材( ID integer, name text ); INSERT INTO 食材 VALUES(1, 'とうふ'); INSERT INTO 食材 VALUES(2, '納豆');
右側のパネル
SELECT * FROM 名簿 JOIN 食材; SELECT * FROM 名簿 JOIN 食材 ON 名簿.buy = 食材.ID; SELECT 名簿.name, 食材.name FROM 名簿 JOIN 食材 ON 名簿.buy = 食材.ID; SELECT 名簿.name, 食材.name FROM 名簿 JOIN 食材 ON 名簿.buy = 食材.ID AND 食材.name ='とうふ'; SELECT count(*) FROM 名簿 JOIN 食材 ON 名簿.buy = 食材.ID;
【資料】
【概要】
SQLのGROUP BYと集約は、データをまとめ、大量のデータからの分析を行うための強力なツールです。たとえば、成績テーブルにおいて科目や受講者ごとにデータをグループ化することで、科目別の平均点や受講者ごとの得点合計を算出できます。このようにグループ化することでデータが見やすくなり、GROUP BY に集約(SUM、AVG、COUNTなど)を組み合わせることで、それぞれのグループに対する行数、平均、最大値、最小値を計算し、データの傾向やパターンを明らかにすることが可能になります。これらの分析結果は、ビジネスの意思決定を支援するために利用できます。GROUP BYの能力を理解しておくことは、SQL以外のツールを使うときにも役に立つ考え方であり、ビジネスや研究の課題にアプローチする上で不可欠です。
【関連する外部ページへのリンク】
CREATE TABLE 成績 ( 科目 TEXT, 受講者 TEXT, 得点 INTEGER); INSERT INTO 成績 VALUES('国語', 'A', 85); INSERT INTO 成績 VALUES('国語', 'B', 90); INSERT INTO 成績 VALUES('算数', 'A', 90); INSERT INTO 成績 VALUES('算数', 'B', 96); INSERT INTO 成績 VALUES('理科', 'A', 95);
select * FROM 成績;
SELECT AVG(得点) FROM 成績 WHERE 科目 = '国語';
SELECT 科目, COUNT(*) FROM 成績 GROUP BY 科目;
SELECT 科目, COUNT(*) FROM 成績 WHERE 得点 >= 90 GROUP BY 科目;
SELECT 受講者, COUNT(*) FROM 成績 GROUP BY 受講者;
SELECT 科目, AVG(得点) FROM 成績 GROUP BY 科目;
CREATE TABLE 売上 ( 日付 DATETIME, 商品 TEXT, 個数 INTEGER, 単価 INTEGER ); INSERT INTO 売上 VALUES('2023-01-01', '商品A', 1, 500); INSERT INTO 売上 VALUES('2023-01-01', '商品A', 2, 500); INSERT INTO 売上 VALUES('2023-01-01', '商品A', 3, 500); INSERT INTO 売上 VALUES('2023-01-01', '商品A', 4, 500); INSERT INTO 売上 VALUES('2023-01-01', '商品B', 1, 1500); INSERT INTO 売上 VALUES('2023-01-01', '商品B', 2, 1500); INSERT INTO 売上 VALUES('2023-01-01', '商品B', 3, 1500); INSERT INTO 売上 VALUES('2023-01-01', '商品B', 4, 1500); INSERT INTO 売上 VALUES('2023-01-02', '商品A', 1, 500); INSERT INTO 売上 VALUES('2023-01-02', '商品A', 2, 500); INSERT INTO 売上 VALUES('2023-01-02', '商品A', 3, 500); INSERT INTO 売上 VALUES('2023-01-02', '商品A', 4, 500); INSERT INTO 売上 VALUES('2023-01-02', '商品B', 1, 1500); INSERT INTO 売上 VALUES('2023-01-02', '商品B', 2, 1500); INSERT INTO 売上 VALUES('2023-01-02', '商品B', 3, 1500); INSERT INTO 売上 VALUES('2023-01-02', '商品B', 4, 1500); INSERT INTO 売上 VALUES('2023-01-03', '商品A', 1, 500); INSERT INTO 売上 VALUES('2023-01-03', '商品A', 2, 500); INSERT INTO 売上 VALUES('2023-01-03', '商品A', 3, 500); INSERT INTO 売上 VALUES('2023-01-03', '商品A', 4, 500); INSERT INTO 売上 VALUES('2023-01-03', '商品B', 1, 1500); INSERT INTO 売上 VALUES('2023-01-03', '商品B', 2, 1500); INSERT INTO 売上 VALUES('2023-01-03', '商品B', 3, 1500); INSERT INTO 売上 VALUES('2023-01-03', '商品B', 4, 1500);
SELECT 日付, SUM(個数 * 単価) FROM 売上 GROUP BY 日付;
SELECT 日付, 商品, SUM(個数 * 単価) FROM 売上 GROUP BY 日付, 商品;
【資料】
【概要】
SQLのIN、副問い合わせ、論理演算子ANDとORは、データベースクエリの柔軟性と効率を高める重要な要素です。INは複数の値の中から一致するものを選択します。副問い合わせは、他の問い合わせ内に埋め込まれた問い合わせで、複雑なデータ抽出や最新のデータに基づいた条件設定を可能にします。例えば、最高得点を取った受講者の特定や平均点以上の得点を持つ行の選択などが可能です。ANDとORは、複数の条件を組み合わせる際に使用され、ANDは両方の条件が成立する場合、ORはいずれか一方、または両方が成立する場合に適用されます。これらの機能を理解し適切に使用することで、データベースの操作がより効率的かつ効果的になります。
【関連する外部ページへのリンク】
CREATE TABLE 成績 ( 科目 TEXT, 受講者 TEXT, 得点 INTEGER); INSERT INTO 成績 VALUES('国語', 'A', 85); INSERT INTO 成績 VALUES('国語', 'B', 90); INSERT INTO 成績 VALUES('算数', 'A', 90); INSERT INTO 成績 VALUES('算数', 'B', 96); INSERT INTO 成績 VALUES('理科', 'A', 95);
select * FROM 成績;
SELECT * FROM 成績 WHERE 得点 >= 85 AND 得点 <= 90; SELECT * FROM 成績 WHERE 得点 BETWEEN 85 AND 90;
SELECT * FROM 成績 WHERE 科目 IN ('国語', '算数');
SELECT 受講者 FROM 成績 WHERE 得点 = (SELECT MAX(得点) FROM 成績);
CREATE TABLE 従業員 ( 従業員ID INTEGER, 名前 TEXT, 部署ID INTEGER, 給与 INTEGER ); INSERT INTO 従業員 VALUES(5, '伊藤', 104, 280000); INSERT INTO 従業員 VALUES(6, '渡辺', 101, 320000); INSERT INTO 従業員 VALUES(7, '小林', 102, 270000); INSERT INTO 従業員 VALUES(8, '加藤', 103, 290000); INSERT INTO 従業員 VALUES(9, '吉田', 104, 310000); INSERT INTO 従業員 VALUES(10, '中村', 101, 330000); INSERT INTO 従業員 VALUES(11, '小川', 102, 260000); INSERT INTO 従業員 VALUES(12, '高橋', 103, 340000); INSERT INTO 従業員 VALUES(13, '山本', 104, 300000); INSERT INTO 従業員 VALUES(14, '石川', 101, 350000); INSERT INTO 従業員 VALUES(15, '中島', 102, 280000); INSERT INTO 従業員 VALUES(16, '佐々木', 103, 360000); INSERT INTO 従業員 VALUES(17, '山口', 104, 290000); INSERT INTO 従業員 VALUES(18, '松本', 101, 370000); INSERT INTO 従業員 VALUES(19, '井上', 102, 310000); INSERT INTO 従業員 VALUES(20, '木村', 103, 280000); INSERT INTO 従業員 VALUES(21, '林', 104, 320000); INSERT INTO 従業員 VALUES(22, '清水', 101, 330000); INSERT INTO 従業員 VALUES(23, '山崎', 102, 340000); INSERT INTO 従業員 VALUES(24, '中田', 103, 300000);
部署ID 101 の従業員の名前と給与を選択:
SELECT 名前, 給与 FROM 従業員 WHERE 部署ID = 101;
給与が平均以上の従業員を選択:
SELECT * FROM 従業員 WHERE 給与 >= (SELECT AVG(給与) FROM 従業員);
部署ID 101 または 102 に所属する従業員を選択:
SELECT * FROM 従業員 WHERE 部署ID IN (101, 102);
給与が300000以上かつ部署IDが102の従業員を選択:
SELECT * FROM 従業員 WHERE 給与 >= 300000 AND 部署ID = 102;
【資料】
【概要】
データベース設計では、テーブル名、属性、データ型、制約、索引などを定め、データベース全体の構造を決定します。正規化の目的は、データベース構造を最適化し、効果的な管理を実現することです。正規化により、データの冗長性を減少させ、異状の防止、効率の向上、信頼性の確保、管理の容易化など多くの利点が得られます。既存のデータベースに対する正規化は、情報無損失原則に基づき、データの冗長性を減少させるようにテーブルを分割することで行います。このプロセスは、「SELECT」や「CREATE TABLE ... AS」などのSQLコマンドを使用して実行できます。以上のことは、正規化を理解し、実際に適用するうえで役立ちます。今回の内容は、より効率的で信頼性の高いデータベースの構築と運用に寄与します。
【関連する外部ページへのリンク】
CREATE TABLE T ( 名前 TEXT, 昼食 TEXT, 料金 INTEGER); INSERT INTO T VALUES('A', 'そば', 250); INSERT INTO T VALUES('B', 'カレーライス', 400); INSERT INTO T VALUES('C', 'カレーライス', 400); INSERT INTO T VALUES('D', 'うどん', 250);
SELECT * FROM T;
SELECT 昼食 FROM T; SELECT DISTINCT 昼食 FROM T;
CREATE TABLE T ( 名前 TEXT, 昼食 TEXT, 料金 INTEGER); INSERT INTO T VALUES('A', 'そば', 250); INSERT INTO T VALUES('B', 'カレーライス', 400); INSERT INTO T VALUES('C', 'カレーライス', 400); INSERT INTO T VALUES('D', 'うどん', 250); CREATE TABLE X AS SELECT DISTINCT 名前, 昼食 FROM T; CREATE TABLE Y AS SELECT DISTINCT 昼食, 料金 FROM T;
SELECT * FROM X; SELECT * FROM Y;
SELECT X.名前, X.昼食, Y.料金 FROM X JOIN Y ON X.昼食 = Y.昼食;
CREATE TABLE S ( StudentID INTEGER, StudentName TEXT, Course TEXT ); INSERT INTO S VALUES (1, 'Alice', 'Math'); INSERT INTO S VALUES (1, 'Alice', 'Science'); INSERT INTO S VALUES (2, 'Bob', 'History'); INSERT INTO S VALUES (3, 'Charlie', 'Math'); INSERT INTO S VALUES (3, 'Charlie', 'History'); INSERT INTO S VALUES (3, 'Charlie', 'Science');
SELECT * FROM S;
SELECT StudentID, StudentName FROM S;
SELECT DISTINCT StudentID, StudentName FROM S;
CREATE TABLE U AS SELECT DISTINCT StudentID, StudentName FROM S; CREATE TABLE V AS SELECT DISTINCT StudentID, Course FROM S;
SELECT * FROM U; SELECT * FROM V;
【資料】
【資料】
paiza.IO の URL: https://paiza.io/
MySQL を選んで使ってください
①挿入
create table T(名前 text, 昼食 text, 料金 integer); insert into T values('A', 'そば', 250); insert into T values('B', 'カレーライス', 400); insert into T values('C', 'カレーライス', 400); insert into T values('D', 'うどん', 250); select * from T;
②更新
次を書き加える
update T set 料金 = 300 where 昼食 = 'うどん'; select * from T;
③削除
次を書き加える
delete from T where 名前 = 'A'; select * from T;
ロールバック
create table T(名前 text, 昼食 text, 料金 integer) engine = InnoDB; insert into T values('A', 'そば', 250); insert into T values('B', 'カレーライス', 400); insert into T values('C', 'カレーライス', 400); insert into T values('D', 'うどん', 250); start transaction; update T set 料金 = 300 where 昼食 = 'うどん'; delete from T where 名前 = 'A'; select * from T; rollback; select * from T;
【資料】
【資料】
【資料】
paiza.IO の URL: https://paiza.io/
MySQL を選んで使ってください
テーブルを分割した後,結合することにより元に戻る場合.
create table T(名前 text, 昼食 text, 料金 integer); insert into T values('A', 'そば', 250); insert into T values('B', 'カレーライス', 400); insert into T values('C', 'カレーライス', 400); insert into T values('D', 'うどん', 250); create table A as select distinct 名前, 昼食 from T; create table B as select distinct 昼食, 料金 from T; select * from A; select * from B; select A.名前, A.昼食, B.料金 from A, B where A.昼食 = B.昼食;
テーブルを分割した後,結合しても元に戻らない場合.
create table T(名前 text, 昼食 text, 料金 integer); insert into T values('A', 'そば', 250); insert into T values('B', 'カレーライス', 400); insert into T values('C', 'カレーライス', 400); insert into T values('D', 'うどん', 250); create table A as select distinct 昼食, 料金 from T; create table B as select distinct 名前, 料金 from T; select * from A; select * from B; select A.昼食, A.料金, B.料金 from A, B where A.料金 = B.料金;
【資料】
【資料】
SQL による並べ替え(ソート)
SELECT * FROM 米国成人調査データ ORDER BY 年齢;
SELECT * FROM 米国成人調査データ ORDER BY 年齢 DESC;
SELECT * FROM 米国成人調査データ ORDER BY 年齢, 教育年数;
SELECT * FROM 米国成人調査データ WHERE 年齢 > 80 ORDER BY 年齢;
SELECT 母国, COUNT(*) FROM 米国成人調査データ GROUP BY 母国 ORDER BY COUNT(*);
Accessデータベースファイル
SELECT * FROM 米国成人調査データ ORDER BY 年齢;
SELECT * FROM 米国成人調査データ ORDER BY 年齢 DESC;
SELECT * FROM 米国成人調査データ ORDER BY 教育年数;
SELECT * FROM 米国成人調査データ ORDER BY 教育年数 DESC;
SELECT * FROM 米国成人調査データ ORDER BY 年齢, 教育年数;
SELECT * FROM 米国成人調査データ ORDER BY 年齢 DESC, 教育年数 DESC;
SELECT * FROM 米国成人調査データ WHERE 年齢 > 80 ORDER BY 年齢;
SELECT * FROM 米国成人調査データ WHERE 年齢 > 80 ORDER BY 年齢 DESC;
SELECT * FROM 米国成人調査データ WHERE 年齢 BETWEEN 20 AND 30 ORDER BY 年齢;
SELECT 母国, COUNT(*) FROM 米国成人調査データ GROUP BY 母国 ORDER BY COUNT(*);