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

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

21
テーブルの主キーのベストプラクティスは何ですか?
テーブルを設計するとき、一意であり、主キーにする1つの列を持つ習慣を身につけました。これは、要件に応じて3つの方法で実現されます。 自動インクリメントするID列。 一意の識別子(GUID) 行ID列として機能できる短い文字(x)または整数(またはその他の比較的小さな数値型)列 数値3は、かなり小さなルックアップに使用されます。主に、一意の静的な長さの文字列コード、または年やその他の数値などの数値を持つテーブルを読み取ります。 ほとんどの場合、他のすべてのテーブルには、自動インクリメント整数または一意の識別子の主キーがあります。 質問 :-) 私は最近、一貫した行識別子がなく、主キーが現在さまざまな列にわたってクラスター化されているデータベースでの作業を開始しました。いくつかの例: 日時/文字 日時/整数 datetime / varchar char / nvarchar / nvarchar これに有効なケースはありますか?私は常にこれらのケースのためにアイデンティティまたは一意の識別子の列を定義していたでしょう。 さらに、主キーがまったくない多くのテーブルがあります。これの正当な理由がある場合、それは何ですか? テーブルが設計どおりに設計された理由を理解しようとしていますが、それは私にとって大きな混乱のように見えますが、それには十分な理由があったのかもしれません。 答えを解読するのに役立つ3番目の質問:複合主キーを構成するために複数の列が使用されている場合、代理キー/人工キーと比較して、この方法には特定の利点がありますか?主にパフォーマンス、メンテナンス、管理などについて考えていますか?

15
SELECT *が有害と見なされるのはなぜですか?
SELECT *悪い習慣はなぜですか?必要な新しい列を追加した場合、変更するコードが少なくなるという意味ではないでしょうか。 SELECT COUNT(*)一部のDBではパフォーマンスの問題だと理解していますが、すべての列が本当に必要な場合はどうでしょうか。
256 sql  database 

11
SQL左結合と複数行のFROM行のテーブル?
ほとんどのSQL方言は、次の両方のクエリを受け入れます。 SELECT a.foo, b.foo FROM a, b WHERE a.x = b.x SELECT a.foo, b.foo FROM a LEFT JOIN b ON a.x = b.x ここで明らかに外部結合が必要な場合、2番目の構文が必要です。しかし、内部結合を行うとき、なぜ最初の構文よりも2番目の構文を優先する必要があるのですか(またはその逆)?
256 sql  syntax  join 

6
Oracleの「Partition By」キーワード
誰かがpartition byキーワードが何をするのかを説明し、実際のキーワードの簡単な例と、なぜそれを使いたいのかを教えてもらえますか?他の誰かが作成したSQLクエリがあり、それが何をするのか理解しようとしています。 次によるパーティションの例: SELECT empno, deptno, COUNT(*) OVER (PARTITION BY deptno) DEPT_COUNT FROM emp オンラインで見た例は少々深すぎるようです。




15
主キーと一意キーの違い
mysqlデータベースを使用しています。主キーと一意キーの間で混乱があります。 主キーと一意キーをどこに作成すればよいか教えてください。つまり、どのような状況で一意のキーまたは主キーを作成するかということです。

4
列がnullの一意制約を作成する
このレイアウトのテーブルがあります: CREATE TABLE Favorites ( FavoriteId uuid NOT NULL PRIMARY KEY, UserId uuid NOT NULL, RecipeId uuid NOT NULL, MenuId uuid ) 次のような一意の制約を作成します。 ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId); ただし、これにより、同じ(UserId, RecipeId)場合に複数の行が許可されますMenuId IS NULL。メニューが関連付けられていないお気に入りを保存できるようNULLにMenuIdしたいのですが、ユーザー/レシピのペアごとにこれらの行の最大1つだけが必要です。 私のこれまでの考えは次のとおりです。 nullではなく、ハードコードされたUUID(すべてゼロなど)を使用します。 ただし、MenuId各ユーザーのメニューにはFK制約があるため、ユーザーごとに特別な「null」メニューを作成する必要があり、面倒です。 代わりにトリガーを使用して、nullエントリの存在を確認してください。 これは面倒で、トリガーをできるだけ避けたいと思います。加えて、私は彼らが私のデータが決して悪い状態にあることを保証することを信頼していません。 それを忘れて、ミドルウェアまたは挿入関数にnullエントリが以前に存在するかどうかを確認してください。この制約はありません。 Postgres 9.0を使用しています。 私が見落としている方法はありますか?


7
Oracle SQL:別のテーブルのデータでテーブルを更新する
表1: id name desc ----------------------- 1 a abc 2 b def 3 c adf 表2: id name desc ----------------------- 1 x 123 2 y 345 Oracle SQLで、表1を表2で更新し、それを使用できるSQL更新クエリを実行するにはどうすればよいですか?だから私が得る最終結果はnamedescid 表1: id name desc ----------------------- 1 x 123 2 y 345 3 c adf 質問は、あるテーブルを別のテーブルのデータで更新することですが、特にOracle SQLの場合です。
251 sql  oracle  sql-update 

8
MySQLはクエリでORDER BYとLIMITをどのように処理しますか?
次のようなクエリがあります。 SELECT article FROM table1 ORDER BY publish_date LIMIT 20 ORDER BYはどのように機能しますか?すべてのレコードを注文してから最初の20件を取得しますか、それとも20件のレコードを取得してpublish_dateフィールドで注文しますか? 最後の記事である場合、最新の20件の記事を実際に取得できる保証はありません。

10
ストアドプロシージャでDbContext.Database.SqlQuery <TElement>(sql、params)を使用する方法 EFコードファーストCTP5
3つのパラメーターを持つストアード・プロシージャーがあり、以下を使用して結果を返そうとしています。 context.Database.SqlQuery&lt;myEntityType&gt;("mySpName", param1, param2, param3); 最初にSqlParameterオブジェクトをパラメーターとして使用しようとしましたが、これは機能せずSqlException、次のメッセージでをスローしました。 プロシージャまたは関数 'mySpName'には、パラメータ '@ param1'が必要ですが、指定されていません。 だから私の質問は、パラメーターを期待するストアドプロシージャでこのメソッドをどのように使用できるかです。 ありがとう。

7
PostgreSQLのタイムスタンプから日付(yyyy / mm / dd)を抽出します
PostgreSQLのタイムスタンプから日付部分だけを抽出したいのですが。 値が必要なDATE別のテーブルに挿入できるように、それをpostgresql 型にする必要がありDATEます。 たとえば、私が持っている場合2011/05/26 09:00:00、私は欲しい2011/05/26 キャストを試しましたが、2011年しか取得できません。 timestamp:date cast(timestamp as date) 私が試しto_char()たto_date(): SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') FROM val3 WHERE id=1; 私はそれを機能させようとしました: CREATE OR REPLACE FUNCTION testing() RETURNS void AS ' DECLARE i_date DATE; BEGIN SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD") INTO i_date FROM exampTable WHERE id=1; INSERT INTO foo(testd) VALUES (i); END PostgreSQLのタイムスタンプから日付(yyyy / …

7
SQL Server SELECT INTO @variable?
私のSql(2008)Stored Procsの1つに次のコードがあり、完全に正常に実行されます。 CREATE PROCEDURE [dbo].[Item_AddItem] @CustomerId uniqueidentifier, @Description nvarchar(100), @Type int, @Username nvarchar(100), AS BEGIN DECLARE @TopRelatedItemId uniqueidentifier; SET @TopRelatedItemId = ( SELECT top(1) RelatedItemId FROM RelatedItems WHERE CustomerId = @CustomerId ) DECLARE @TempItem TABLE ( ItemId uniqueidentifier, CustomerId uniqueidentifier, Description nvarchar(100), Type int, Username nvarchar(100), TimeStamp datetime ); INSERT …

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