質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

903閲覧

SQL における否定形の表現

退会済みユーザー

退会済みユーザー

総合スコア0

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/07/08 14:41

前提・実現したいこと

社会を登録していない学生の氏名が取得したいです。そのためのSQLを教えていただきたいです。

テーブル「学生」

番号 | 氏名 | 出身 --------------------- 100 | あみ | 東京 200 | まい | 千葉 300 | はな | 神奈川

テーブル「科目」

番号 | 登録科目 | 人数 --------------------- 100 | 数学 | 20 100 | 社会 | 10 100 | 国語 | 30 200 | 数学 | 20 200 | 国語 | 30 300 | 国語 | 30

また、DB管理を行う際にAccessの導入を検討することは一般的か教えていただきたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/07/08 14:55

>そのためのSQLを教えていただきたいです。 まず自身で思ったようにやってみては。 何一つ手が付けられないのでしたら基礎勉強を。 >一般的か 要件次第なので提示された情報から言えることはないです。
退会済みユーザー

退会済みユーザー

2021/07/08 20:11

「自分が考えたSQLを提示し、修正点を教えてもらう」よりも「模範解答をいただき、その理解に努める」ほうが私の勉強スタイルに合っていると思うため、このような質問形式となりました。 申し訳ございません。 いずれにせよ質問者の「解を得る」という本質にそぐわない内容のコメントはお控えください。 学習のアドバイスをくださり、ありがとうございました。 今後もよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/07/08 20:43

ご指導いただき、ありがとうございます。 ベストアンサーを差し上げることができず、申し訳ございませんでした。
guest

回答4

0

社会を登録していない学生の氏名が取得したいです。

このようなExistsを使ったクエリになります。

SQL

1SELECT 学生.番号, 学生.氏名 2FROM 学生 3WHERE (((Exists (select 科目.番号 from 科目 where 科目.番号 = 学生.番号 and 科目.登録科目 = '社会'))=False));

イメージ説明

投稿2021/07/08 16:08

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/07/08 20:47 編集

ご回答ありがとうございました。 とてもわかりやすい内容で、ベストアンサーと甲乙つけがたい回答でした。大変勉強になりました。 重ね重ねありがとうございました。
guest

0

Accessではwhere条件でサブクエリーとするより、インラインビューによる結合の方が高速です。
※SQLServerも同様な傾向があるので、MS関連のエンジンの特性な気がします。

SQL

1select g.* 2from 学生 g 3 left join ( 4 select 番号 from 科目 5 where 登録科目 = '社会' 6 group by 番号 7 ) k 8 on g.番号 = k.番号 9where k.番号 is null

投稿2021/07/09 00:31

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

社会を登録していない学生の氏名が取得したいです。そのためのSQLを教えていただきたいです。

たとえば以下のようなクエリはどうでしょうか?

SQL

1SELECT * 2FROM 学生 G 3WHERE NOT EXISTS ( 4 SELECT * 5 FROM 科目 K 6 WHERE G.番号 = K.番号 7 AND K.登録科目 = '社会' 8)

また、DB管理を行う際にAccessの導入を検討することは一般的か教えていただきたいです。

個人のPCで完結するレベルのアプリケーション開発ではAccessを採用するメリットは大きいと思います。

  • 環境構築がシンプル
  • VBAやExcelとの親和性が高く、連携も比較的容易
  • データがすべてひとつのaccdbファイルに格納されるので、バックアップやコピーが簡単 など

一方、複数ユーザがひとつのDBを共有するようなアプリケーションになると、Accessでは苦しいと思います。

「ネットワークドライブに設置したaccdbファイルを複数人が共有する」というようなこともできなくはないのですが、
accdbが頻繁に破損したり、不整合が起きたりなど、個人的にいい思い出がありません…。

「Excelにデータベースの要素が追加されたもの」という程度の認識でAccessには付き合ったほうが良いと個人的には考えています。

投稿2021/07/08 17:42

neko_the_shadow

総合スコア2230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

また、DB管理を行う際にAccessの導入を検討することは一般的か教えていただきたいです。

Accessはパーソナル・データベースです。複数の人が同時に同じデータを更新するときに必要な排他制御ができません。それを理解しないで破綻する初心者は多いです。

投稿2021/07/08 15:24

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2021/07/08 15:43 編集

排他が出来ない訳ではありません。 トランザクション制御もできますし、競合に弱い場面がありますが、工夫すれば使えない事は無いですよ。 ただ、大規模なシステムの場合に、敢えて使う事はお奨めしませんが。
Orlofsky

2021/07/08 18:33

10人で3ヶ月のOracle Database の開発でAccessでできる、って言い張って作業を中断させて、開発期間を2ヶ月に削ってくれた御仁を思い出す。
sazi

2021/07/09 00:21

そう言われても、実際に運用している身としては、出来ないと断言されても、と云う事です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問