タグ付けされた質問 「sql」

構造化照会言語(SQL)は、データベースを照会するための言語です。質問には、コード例、テーブル構造、サンプルデータ、使用するDBMS実装(MySQL、PostgreSQL、Oracle、MS SQL Server、IBM DB2など)のタグを含める必要があります。質問が特定のDBMSにのみ関連している場合(特定の拡張機能を使用)、代わりにそのDBMSのタグを使用してください。SQLでタグ付けされた質問への回答には、ISO / IEC標準SQLを使用する必要があります。


21
リレーショナルデータベースを使用しない正当な理由は?
代替のデータストレージツールを指摘して、古き良きリレーショナルデータベースの代わりにそれらを使用する十分な理由を教えていただけませんか?私の意見では、ほとんどのアプリケーションがSQLの全機能を使用することはめったにありません。SQLフリーのアプリケーションを構築する方法を見るのは興味深いでしょう。
139 sql  database  nosql 

30
なぜエンティティオブジェクトが必要なのですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 この質問を改善する 現在受け入れられているエンタープライズアプリケーション設計パラダイムのメリットについて、正直で思慮深い議論が必要です。 エンティティオブジェクトが存在する必要があるとは思いません。 エンティティオブジェクトとは、「個人」、「アカウント」、「注文」など、アプリケーションのために構築する傾向がある典型的なものを意味します。 私の現在の設計哲学はこれです: すべてのデータベースアクセスは、ストアドプロシージャを介して実行する必要があります。 データが必要なときはいつでも、ストアドプロシージャを呼び出して、SqlDataReaderまたはDataTableの行を反復処理します (注:Java EEを使用してエンタープライズアプリケーションも構築しました。Javaの人は、.NETの例を同等のものに置き換えてください) 私は反OOではありません。エンティティではなく、さまざまな目的で多くのクラスを作成します。私が書くクラスの大部分は静的ヘルパークラスであることを認めます。 私はおもちゃを作っていません。複数のマシンに展開された大規模で大量のトランザクションアプリケーションについて話している。Webアプリケーション、Windowsサービス、Webサービス、b2bインタラクション、という名前を付けます。 ORマッパーを使用しました。いくつか書いた。私はJava EEスタック、CSLA、および他のいくつかの同等のものを使用しました。私はそれらを使用しただけでなく、本番環境でこれらのアプリケーションを積極的に開発および保守しました。 私は、エンティティオブジェクトは、私たちの邪魔になっていることを戦いテストされたという結論になってきた、と私たちの生活は次のようになりますので、それらなしではるかに簡単。 この単純な例を考えてみましょう。正しく機能していないアプリケーションの特定のページに関するサポートコールがあり、フィールドの1つが本来のように永続化されていない可能性があります。私のモデルでは、問題を見つけるために割り当てられた開発者がちょうど3つのファイルを開きます。ASPX、ASPX.CS、およびストアドプロシージャを含むSQLファイル。この問題は、ストアード・プロシージャー呼び出しのパラメーターが欠落している可能性があるため、解決に数分かかります。しかし、どのエンティティモデルでも、必ずデバッガを起動し、コードをステップ実行し始めると、Visual Studioで15〜20個のファイルが開かれることになります。スタックの一番下に降りるまでに、開始した場所を忘れてしまいました。頭の中にあるのは、一度に多くの物だけです。ソフトウェアは、不要なレイヤーを追加することなく、非常に複雑です。 開発の複雑さとトラブルシューティングは、私の不満の片側にすぎません。 次に、スケーラビリティについて話しましょう。 開発者は、データベースと対話するコードを作成または変更するたびに、データベースへの正確な影響を徹底的に分析する必要があることを理解していますか?開発コピーだけでなく、本番を模倣しているので、オブジェクトに必要な追加の列が現在のクエリプランを無効にし、1秒で実行されていたレポートが2分で完了していることがわかります。選択リストに単一の列を追加したためですか?そして、現在必要なインデックスが非常に大きいため、DBAがファイルの物理レイアウトを変更する必要があることがわかりました。 抽象化によって物理データストアから離れすぎてしまうと、拡張が必要な​​アプリケーションで大混乱が発生します。 私は熱狂的ではありません。Linq to Sql、ADO.NET EF、Hibernate、Java EEなどへの強いプッシュがあるので、私が間違っていると私は確信している可能性があります。それが何であるか、なぜ私は自分の考えを変える必要があるのか​​を本当に知りたいのです。 [編集] この質問が再び突然アクティブになったようです。新しいコメント機能が追加されたので、いくつかの回答に直接コメントしました。お返事ありがとうございます。これは健全な議論だと思います。 おそらく、私がエンタープライズアプリケーションについて話していることをもっと明確にすべきでした。たとえば、誰かのデスクトップやモバイルアプリで実行されているゲームについてはコメントできません。 いくつかの同様の答えに対応して私がここで一番上に置かなければならないことの1つは、エンティティ/ ORMに移行する理由として、直交性と懸念の分離がよく引用されます。ストアドプロシージャは、私が考えることができる懸念の分離の最良の例です。ストアドプロシージャ以外のデータベースへのアクセスをすべて許可しない場合は、理論的にはデータモデル全体を再設計し、ストアドプロシージャの入力と出力を維持している限り、コードを壊さないようにすることができます。これらは契約によるプログラミングの完璧な例です( "select *"を避けて結果セットを文書化する限り)。 業界に長く住んでいて、長命のアプリケーションを扱ってきた人に聞いてください。データベースが存続している間に、アプリケーションとUIのレイヤーがいくつ消えてしまったのでしょうか。データを取得するためにSQLを生成する4つまたは5つの異なる永続化レイヤーがある場合、データベースのチューニングとリファクタリングはどれほど難しいですか?何も変更できません!ORMまたはSQLを生成するコードは、データベースを完全にロックします。
139 sql  database  orm  entities 

9
集計関数なしのTSQLピボット
このようなテーブルがあります... CustomerID DBColumnName Data -------------------------------------- 1 FirstName Joe 1 MiddleName S 1 LastName Smith 1 Date 12/12/2009 2 FirstName Sam 2 MiddleName S 2 LastName Freddrick 2 Date 1/12/2009 3 FirstName Jaime 3 MiddleName S 3 LastName Carol 3 Date 12/1/2009 これが欲しい… これはPIVOTを使用して可能ですか? CustomerID FirstName MiddleName LastName Date ---------------------------------------------------------------------- 1 …

18
単一引用符をエスケープし、単一引用符でユーザー入力を囲むことで、SQLインジェクションから保護できますか?
ユーザー入力を含むクエリを作成する場合、パラメーター化されたSQLクエリがユーザー入力をサニタイズするための最適な方法であることを理解していますが、ユーザー入力を取得して一重引用符をエスケープし、文字列全体を一重引用符で囲むと何が問題になるのでしょうか。これがコードです: sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'" ユーザーが入力する一重引用符はすべて二重一重引用符に置き換えられます。これにより、ユーザーは文字列を終了できなくなります。そのため、セミコロンやパーセント記号など、ユーザーが入力する可能性のある他のすべてはすべて文字列の一部となり、コマンドの一部として実際には実行されません。 私たちはMicrosoft SQL Server 2000を使用しています。これは、単一引用符が唯一の文字列区切り文字であり、文字列区切り文字をエスケープする唯一の方法であると私は考えているため、ユーザーが入力するものを実行する方法はありません。 これに対してSQLインジェクション攻撃を仕掛ける方法は見当たらないが、もしこれが私のように弾丸であるとすれば、他の誰かがすでにそれを考えていて、それが一般的な慣行になるだろう。 このコードの何が問題になっていますか?このサニタイズ手法を超えてSQLインジェクション攻撃を取得する方法はありますか?この手法を利用するユーザー入力のサンプルは非常に役立ちます。 更新: このコードに対してSQLインジェクション攻撃を効果的に開始する方法はまだわかりません。一部の人々は、バックスラッシュが1つの単一引用符をエスケープし、もう1つを残して文字列を終了し、残りの文字列がSQLコマンドの一部として実行されるようにすることを提案しました。 MySQLデータベースですが、SQL Server 2000では、単一引用符をエスケープする唯一の方法(私が見つけたもの)は、別の単一引用符を使用することです。バックスラッシュはそれをしません。 また、単一引用符のエスケープを停止する方法がない限り、ユーザー入力の残りの部分はすべて1つの連続した文字列と見なされるため、実行されません。 入力をサニタイズするより良い方法があることを理解していますが、上記で提供した方法が機能しない理由を学ぶことに本当に興味があります。このサニタイズ方法に対するSQLインジェクション攻撃を実装する特定の方法を誰かが知っている場合は、ぜひご覧ください。

26
T-SQL分割文字列
カンマで区切る必要のある文字列を含むSQL Server 2008 R2列があります。StackOverflowで多くの回答を見てきましたが、R2ではどれも機能しません。スプリット関数の例に対する選択権限があることを確認しました。どんな助けも大歓迎です。

18
SQL Server SELECT LAST N Rows
これは既知の質問ですが、私が見つけた最良の解決策は次のようなものです: SELECT TOP N * FROM MyTable ORDER BY Id DESC 行の多いテーブルがあります。時間がかかるため、このクエリを使用することはできません。では、ORDER BYを使用せずに最後のN行を選択するにはどうすればよいですか? 編集 この質問の重複した質問で申し訳ありません

7
MySQL-1つのクエリで異なる値を持つ複数の行を更新する
異なる値を持つ複数の行を更新する方法を理解しようとしていますが、取得できません。解決策はどこにでもありますが、私には理解するのが難しいようです。 たとえば、1つのクエリへの3つの更新: UPDATE table_users SET cod_user = '622057' , date = '12082014' WHERE user_rol = 'student' AND cod_office = '17389551'; UPDATE table_users SET cod_user = '2913659' , date = '12082014' WHERE user_rol = 'assistant' AND cod_office = '17389551'; UPDATE table_users SET cod_user = '6160230' , date = '12082014' WHERE user_rol …
139 mysql  sql  sql-update 

4
単一のクエリセットでデータベースレコードを選択して更新する
2つのクエリを実行するのではなく、同じようにupdateand selectステートメントを実行するにはどうすればよいですかqueryset。1つはオブジェクトを選択するためのもので、もう1つはオブジェクトを更新するためのものです。 SQLでこれに相当するものは次のようになります。 update my_table set field_1 = 'some value' where pk_field = some_value

9
mysql更新クエリの値を増分する
私は+1ポイントを与えるためにこのコードを作成しましたが、正しく機能しません。 mysql_query(" UPDATE member_profile SET points= ' ".$points." ' + 1 WHERE user_id = '".$userid."' "); $ points変数は、ユーザーの現在のポイントです。それに1を足したいので、たとえば、ポイントが5ポイントあった場合、5 + 1 = 6.になるはずですが、そうではなく、単に変更されます。に1 何が悪いのですか?ありがとうございました
138 php  mysql  sql  sql-update 

3
SQL Serverインデックス-昇順または降順、どのような違いがありますか?
MS SQL Server(バージョン2005を使用しています)の列または列の数にインデックスを作成する場合、各列のインデックスが昇順または降順のいずれかになるように指定できます。なぜこの選択​​がここにもあるのか理解するのに苦労しています。バイナリソートテクニックを使用すると、ルックアップはどちらの方法でも同じくらい速くありませんか?どの順序を選択すると、どのような違いがありますか?

19
AndroidのSQLite特定の行を更新する方法
私はしばらくの間特定の行を更新しようとしていましたが、これを行うには2つの方法があるようです。私が読んで試したことから、あなたは単に以下を使うことができます: execSQL(String sql) 方法 または: update(String table, ContentValues values, String whereClause, String[] whereArgs) 方法。 (AndroidとSQLが初めてなので、これが間違っているかどうかを教えてください。) それでは、実際のコードを見てみましょう。 myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null); 私はこれを達成しようとしています: 主キー(_id)が1に等しいField1、Field2、およびField3を更新します。 Eclipseでは、「更新」という単語のすぐ下に赤い線が表示され、次のように説明されています。 タイプSQLiteDatabaseのメソッドupdate(String、ContentValues、String、String [])は引数(String、String、String、null)には適用できません ContentValuesを正しく割り当てていないと思います。誰かが私を正しい方向に向けることができますか?
138 java  android  sql  eclipse  sqlite 

5
このクエリでページング(スキップ/テイク)機能を実装する
私はSQLでカスタムページングを実装する方法について少し理解しようとしています。たとえば、このような記事を読んでいます。 次のクエリがありますが、これは完全に機能します。しかし、私はこれでページングを実装したいと思います。 SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate from dbForumEntry group by PostId ) SubQueryAlias order by LastDate desc 何が欲しい フォーラムの投稿と関連エントリがあります。最近追加されたエントリを含む投稿を取得したいので、最近議論された投稿を選択できます。 ここで、「トップ10」の代わりに「最近アクティブなトップ10〜20の投稿」を取得できるようにしたいと考えています。 私は何を試しましたか 私はROW関数を記事の1つとして実装しようとしましたが、実際にはうまくいきませんでした。 それを実装する方法はありますか?

14
IN演算子で使用する変数を定義(T-SQL)
IN演算子を使用するTransact-SQLクエリがあります。このようなもの: select * from myTable where myColumn in (1,2,3,4) リスト「(1,2,3,4)」全体を保持する変数を定義する方法はありますか?どのように定義すればよいですか? declare @myList {data type} set @myList = (1,2,3,4) select * from myTable where myColumn in @myList
138 sql  tsql 

5
SQLデータベースに関数が存在するかどうかを確認する方法
関数がデータベースに存在するかどうかを確認して、関数を削除して再作成できるようにする必要があります。基本的には、ストアドプロシージャに使用する次のコードのようになります。 IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.