後者の場合、COLLATE句が、処理対象と想定している入力演算子の引数に対して付与されることに注意してください。演算子や関数の呼び出しのどの引数に対してCOLLATE句が付与されるかは問題ではありません。演算子や関数により適用される照合順序は対象となる全ての引数を考慮して引き出され、そして明示的に指定されたCOLLATE句がその他の全ての引数に対しての照合順序を上書きするからです。(しかし、複数の引数に対して一致しないCOLLATE句の付与はエラーとなります。詳細は項22.2を参照してください)。このため、前述の例と同じ結果を次の様にして取得することができます。'foo';ただし、これはエラーになります。正しくは次の様にします。"C";なぜなら、照合順序を与えることができないboolean型となる>演算子の結果に対して。照合順序が適用されようとするからです。(問い合わせの記述方法については第7章を参照してください)。そのSELECT問い合わせは実行され、返される単一の値はその値の前後の評価式で使用されます。(しかし、ある実行時に、副問い合わせが行を返さない場合はエラーとはなりません。そのスカラ結果はNULLとして扱われます)。副問い合わせは、その周りの問い合わせ内の値を参照することができます。その値は副問い合わせの評価時には定数として扱われます。副問い合わせに関する他の式については項9.22も参照してください。以下は各州で最も人口の多い都市を検索します。配列コンストラクタ配列コンストラクタは、メンバー要素に対する値を用いて配列値を構築する式です。単純な配列コンストラクタの構成は、ARRAYキーワード、左大括弧[、(カンマで区切った)配列要素値用の式のリストで、最後に右大括弧]です。(項10.5を参照してください)。これを明示的に配列コンストラクタを希望する型にキャストすることで書き換えることができます。row)これはそれぞれの式を配列型に個別にキャストするのと同じ効果があります。キャストについてより多くは項4.2.9を参照してください。多次元配列値は、配列コンストラクタを入れ子にすることで構築できます。内側のコンストラクタではARRAYキーワードは省略可能です。以下は同じ結果になります。row)多次元配列は四角形配列でなければなりませんので、同一レベルの内部コンストラクタは同一次元の副配列を生成しなければなりません。外部ARRAYコンストラクタに適用される全てのキャストは自動的に全ての内部コンストラクタに伝播します。多次元配列コンストラクタの要素は、副ARRAY構文だけでなく、適切な種類の配列を生成するものをとることができます。row)空配列を構築できますが、型を所有しない配列を持つことは不可能なので、空配列を望まれる型に明示的にキャストしなければなりません。row)また、副問い合わせの結果から配列を構成することも可能です。この形式の場合、配列コンストラクタはARRAYキーワードの後に括弧(大括弧ではない)で括られた副問い合わせとして記述されます。row)副問い合わせは単一の列を返さなければなりません。その結果である一次元配列は、副問い合わせの出力列と一致する型を要素型とした、副問い合わせの結果内の各行を要素として持ちます。ARRAYで構築された配列値の添字は、常に1から始まります。配列についての詳細は項8.15を参照してください。行コンストラクタ行コンストラクタは、そのメンバフィールドに対する値を用いて行値(複合値とも呼ばれます)を構築する式です。行コンストラクタは、ROWキーワード、左括弧、行のフィールド値用の0個以上の式(カンマ区切り)、最後に右括弧からなります。test');ROWキーワードは、1つ以上の式がリスト内にある場合は省略することができます。行コンストラクタにはrowvalue.*構文を含めることができます。これは、SELECTリストの最上位レベルで.*構文が使用された時とまったく同様に、行値の要素の列挙に展開されます。テーブルtがf1列とf2列を持つ場合、以下は同一です。8.2より前では、.*構文は展開されませんでした。42)と記述すると、1つ目のフィールドに別の行値を持つ、2つのフィールドからなる行が作成されました。場合、新しい動作はより使いやすくなっています。42)といった、内部行値を記述してください。デフォルトでは、ROW式により作成される値は匿名レコード型になります。ASで作成された複合型にキャストすることができます。明示的なキャストは曖昧性を防止するために必要となることもあります。getf1()が1つしか存在しないためキャスト不要。ここでは、どの関数を呼び出すのかを示すためにキャストが必要。row)行コンストラクタは、複合型のテーブル列に格納する複合型の値を構築するため、あるいは複合型のパラメータを受け付ける関数に渡すために使用することができます。NULLで行を検査することも可能です。すべてがNULLの行を検出します。詳細は項9.23を参照してください。行コンストラクタは、項9.22で説明した、副問い合わせと一緒に使用することもできます。副式の評価の順序は定義されていません。演算子や関数の入力は、必ずしも左から右などの決まった順序で評価されるわけではありません。その式の一部を評価しただけで式の結果を判断できる場合には、他の副式がまったく評価されないこともあります。somefunc();では、(おそらく)somefunc()は呼び出されないでしょう。以下の場合も同様です。true;これは一部のプログラミング言語に見られる、ブーリアン演算子での左から右への"ショートサーキット"とは異なることに注意してください。そのため、副次作用がある関数を複雑な式の一部として使用することは推奨されません。WHERE句およびHAVING句で副次作用や評価順に依存するのは危険です。これらの句は、実行計画を作成する過程で頻繁に再処理されるからです。これらの句のブール式(AND/OR/NOTの組み合わせ)は、ブール代数の規則で許されるあらゆる方式で再編成することができます。評価の順序を強制することが重要であれば、CASE構文(項9.17を参照)を使用できます。次の式はWHERE句で0除算を避ける方法としては信頼性の低いものです。1.5;しかし、次のようにすれば安全です。1.5*xと代わりに記述することが問題を回避するより優れた方法です。