SQLデータベースの14の事例の紹介

SQLデータベースの14の事例の紹介

データシート

/*
Navicat SQLite データ転送

ソースサーバー: school
ソース サーバー バージョン: 30808
ソースホスト: :0

ターゲット サーバー タイプ: SQLite
ターゲット サーバー バージョン: 30808
ファイルエンコーディング: 65001

日付: 2021-12-23 16:06:04
*/

プラグマforeign_keys = OFF;

-- ----------------------------
-- コースのテーブル構造
-- ----------------------------
"main"."Course"が存在する場合はテーブルを削除します。
CREATE TABLEコース(
    CourseID 整数主キー自動増分、
    courseme varchar(32)、
    教師ID int
);

-- ----------------------------
-- コースの記録
-- ----------------------------
INSERT INTO "main"."Course" VALUES (3001, 'Chinese', 1001);
「main」に「コース」VALUES(3002、「数学」、1002)を挿入します。

-- ----------------------------
-- マークのテーブル構造
-- ----------------------------
"main"."Mark"が存在する場合はテーブルを削除します。
CREATE TABLE マーク(
    ユーザーID整数、
    コースID整数がNULLではありません。
    スコア int デフォルト 0
);

-- ----------------------------
-- マークの記録
-- ----------------------------
「main」に「Mark」VALUES(2001、3001、89)を挿入します。
「main」に「Mark」VALUES(2001、3002、90)を挿入します。
「main」に「Mark」VALUES(2002、3001、66)を挿入します。
「main」に「Mark」VALUES(2003、3002、85)を挿入します。

-- ----------------------------
-- sqlite_sequence のテーブル構造
-- ----------------------------
"main"."sqlite_sequence"が存在する場合はテーブルを削除します。
テーブル sqlite_sequence(name,seq) を作成します。

-- ----------------------------
-- sqlite_sequence のレコード
-- ----------------------------
"main"."sqlite_sequence" に VALUES ('Teacher', 1002) を挿入します。
"main"."sqlite_sequence" に VALUES ('Student', 2002) を挿入します。
"main"."sqlite_sequence" に VALUES ('Course', 3002) を挿入します。

-- ----------------------------
-- 学生用のテーブル構造
-- ----------------------------
"main"."Student" が存在する場合はテーブルを削除します。
学生テーブルを作成(
    ユーザーID 整数 主キー 自動増分、
    ユーザー名varchar(32)、
    使用率 int、
    ユーザーセックスvarchar(32)
);

-- ----------------------------
-- 学生の記録
-- ----------------------------
「main」に「学生」値(2001年、「Xiao Ming」、18歳、「男性」)を挿入します。
「main」に「学生」値(2002、「Xiaohong」、18、「女性」)を挿入します。

-- ----------------------------
-- 教師用テーブル構造
-- ----------------------------
"main"."Teacher" が存在する場合はテーブルを削除します。
教師テーブルの作成(
    教師ID整数主キー自動増分、
    教師名 varchar(32)
);

-- ----------------------------
-- 教師の記録
-- ----------------------------
INSERT INTO "main"."Teacher" VALUES (1001, '张三');
「main」に「Teacher」VALUES (1002, 'Li Si') を挿入します。

質問:

1. 「中国語」コースの成績が「数学」コースの成績より低いすべての学生の学生IDを照会します。

からユーザーIDを選択 
(Mark から、courseid = '3001' のユーザー ID、スコアを選択)a、
(コースID = '3002' のマークからユーザーID、スコアを選択)b 
ここで、a.userid = b.userid かつ a.score<b.score;

2. 平均点が60点を超える学生の学生IDと平均点を照会する

MarkからユーザーID、平均スコアを選択
ユーザーIDによるグループ化 
平均スコアが60以上であること

3. 全学生の学生ID、名前、選択したコース数、合計スコアを照会する

選択したコースの数として s.userid、s.username、count_courseid を選択します。 
sum_score は生徒の合計得点
左結合 
(userid、count(courseid) を count_courseid として選択し、sum(score) を sum_score として選択します 
ユーザーIDによるマークグループから)sc
s.userid = sc.userid; の場合

4. 姓が「Li」の教師の数を照会します。

count(教師名)を選択
先生から 
teachername は '张%' のようになります。

5. 中国語コースのスコアが 60 未満の学生の学生 ID を、スコアの降順で検索します。

ユーザーID、スコアを選択
マークより
コースID = '3001'
スコア<60
スコア降順で並び替え;

6. 教師「張三」が担当するコースを受講した、または受講していない学生の名前を照会します。

ユーザー名を選択  
学生から 
ユーザーIDが(
    ユーザーIDを選択  
    マーク、コース、教師より 
    Course.teacherid = Teacher.teacherid かつ Mark.courseid = Course.courseid
    Teacher.teachername = 'Zhang San' の場合
);

7. すべての学生の選択科目、コース番号、コース名を照会します。

CourseID、CourseMeを選択 
コースから 
where courseid in (mark group by courseid から courseid を選択します)。

8. 2 つのコースを受講した学生の学生 ID を取得します。

ユーザーIDを選択 
マークより
ユーザーIDによるグループ化 
count(8) == 2である;

9. 各コースとそれに対応する選択科目の受講生数を照会する

Course グループから CourseID 、count(*) を CourseID で選択します。

10. 教師「張三」が担当するコースを選択した生徒の中で、最も成績が良い生徒の名前と成績を照会します。

Student.username、Mark.scoreを選択
マークより 
Mark.userid = Student.userid の Student に参加しました 
Mark.courseid = Course.courseid のコースに参加しました 
Course.teacherid = Teacher.teacherid の教師に参加しました 
Teacher.teachername = 'Zhang San' の場合
そして、Mark.score = (
最大(スコア)を選択 
マーク sc_1 より 
ここで、Mark.courseid = sc_1.courseid);

11. コースを選択した学生の数:

count(2) を選択 
(マークとは異なるユーザーIDを選択)a;

12. コースコードが「中国語」で、コーススコアが80点を超える学生の学生IDと名前を照会します。

Mark.userid、Student.usernameを選択  
マークより 
Mark.userid = Student.userid の Student に参加しました 
ここで、Mark.courseid = '3001' かつ Mark.score>80;

13. 各コースの平均スコアを照会し、結果を平均スコアの昇順で並べ替えます。平均スコアが同じ場合は、コース番号の降順で並べ替えます。

コースID、平均スコアを選択
マークより 
コースIDでグループ化 
平均(スコア)、コースID降順で並べ替え;

14. コース名が「数学」で、スコアが 85 を超える学生の名前とスコアを照会します。

c.courseme、Student.userid、Student.username、Mark.score を選択
コースcから
Mark.courseid = c.courseid のマークを左結合します 
Student を Student.userid = Mark.userid に LEFT JOIN する 
ここで、c.courseme = 'Mathematics' かつ Mark.score>85;

これで、14 の SQL データベース ケースに関するこの記事は終了です。SQL データベース ケースに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • いくつかのMySQL更新操作のケース分析
  • MYSQL の 10 の典型的な最適化ケースとシナリオ
  • SQL Server バッチデータ挿入ケースの詳細な説明

<<:  HTML印刷関連の操作と実装の詳細な説明

>>:  IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

推薦する

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです操作は実際にはそれほど難しくありません。バックアップ操作を実...

MySQL シリーズ 3 基礎

目次チュートリアルシリーズ1. MySQL の紹介2. MySQLの開発履歴3. MariaDBの基...

JavaScript クロージャの詳細

目次1. クロージャとは何ですか? 2. 閉鎖の役割序文: JavaScript部分ではクロージャが...

マインスイーパゲームを実装するための jQuery プラグイン (2)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する2番目の記事を参考までに...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

Vueフォームで画像を処理する方法

質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...

Tomcat ソースコード起動コンソールの中国語文字化けのデバッグプロセス記録

問題を見つける今日はTomcatのソースコードを勉強するつもりなので、公式サイトからTomcatのソ...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...

Redux Toolkit で Redux を簡素化する方法

目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...

DIV の一般的なタスク (パート 1) — 一般的なタスク (スクロール バーの表示、div の非表示、イベント バブリングの無効化など)

最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...

CSS の高度な使い方(実戦で活用)

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

画像にマウスを置いたときにズームイン/ズームアウトするには JS を使用します

マウスが画像上にあるときにズームインおよびズームアウトするには、JS を使用します。具体的なコードは...

Vue + Axios リクエストインターフェース方式とパラメータ渡し方式の詳しい説明

目次1. リクエストを取得する: 2. 投稿リクエスト: 3. 拡張と補足Vue スキャフォールディ...

ハードコーディングに別れを告げ、フロントエンドテーブルがインスタンスコードを自動的に計算できるようにします。

序文私のチームが税制モジュールを開発していたとき、計算問題、特にグリッド内の計算を解決するために時間...