2012年9月7日金曜日

コンピュータ活用能力のSQLクエリ - 基本的な構文




SQLは、コンピュータ活用能力試験中のデータベースの科目で最も多く出題される領域に合格するかどうかは、SQLで決定されることほど重要です。実際出題されるSQL構文は様々ですが、基本的なパターンが決まっているので、これだけ読むと、2/3以上は簡単に合わせることができます。

1)SQLの特徴
複数行に分けて入力することができる。
文章最後にはセミコロン(;)を付ける。
keywordは大文字と小文字を区別しません。

2)基本的なSELECT文
●SELECTフィールドFROMテーブル;


SELECT * FROM学生; - >学生のテーブルのすべてのフィールドを検索します。
SELECT年度入学生、名前FROM生徒; - >学生テーブルの学番、氏名フィールドを検索します。
SELECT学生。学生番号、学生。名FROM学生; - >学生テーブルの学番、氏名フィールドを検索します。
SELECT学生。* FROM学生の学科;(X) - >両方のテーブルをカンマ(、)で接続する必要がある。

3)WHERE句を使用した条件を指定する
●SELECTフィールドFROMテーブルWHERE条件;


条件に文字列を入力するときは、単一​​引用符('')または二重引用符( "")を使用する。
SELECT * FROM学生WHERE平均> = 80; - >学生のテーブルでは、平均が80点以上のすべてのフィールドを検索
SELECT名前、部署FROM社員WHERE年齢> = 30 AND <= 35; - >社員テーブルから30歳以上35歳未満の社員の名前フィールドと部署のフィールドを検索

4)演算子を使用した抽出条件を指定
●IN:含まれている値をすべて取得するための構文でOR演算を実行する。
●BETWEEN A AND B:範囲に含まれるレコードを検索するための構文でAND演算を実行する。
●LIKE:*または%のように使用され、指定した文字または文字列が含まれているレコードのみを検索します。
●NOT:条件が偽であるレコードを検索するための構文です。


WHERE部門= '営業部' OR部門= '総務'はWHERE部門IN( '営業部'、 '総務')と同じ意味である。
SELECT * FROM社員WHEREアドレスLIKE "ソウル*" ORアドレスLIKE "景気*"; - >アドレスがソウルや京畿で始まる従業員のレコードを検索します。
SELECTサボン、名前、役職FROM従業員WHERE NOT年齢<20 AND NOT年齢> 50; - >年齢が20から50の間である従業員のサボン、名前、役職を検索します。
 FROM図書WHEREタイトルLIKE '%アクセス%'; - > "アクセス"という単語が含まれている書籍の情報を検索します。

5)ORDER BY句を使用したソート
●昇順(ASC)と降順(DESC)ステートメントを使用しています。
●並べ替えを指定しない場合、昇順(ASC)でソートされる。


SELECT名前FROM平均成績WHERE平均> = 90 ORDER BY年生DESC半ASC;:平均90以上の学生を検索して学年を基準に降順、半分を基準に昇順で並べ替えている。
SELECT * FROM社員ORDER BY勤務年数DESC、年齢DESC; - >勤務年数が多くの人々から起動するように配置して、勤務年数が同じ場合年齢が多くの人が先に来るように配置する。

6)集団関数
関数
意味
関数
意味
SUM
合計
MIN
最小値
COUNT

MAX
最大値
AVG
平均
StDev
標準偏差
Var
分散





7)GROUP BY句を使用したグループの指定
●特定のフィールドをグループ化した後、レコードを検索します。
●GROUP BY句のグループ化した後、条件を指定するには、HAVING句を使用します。


SELECT文は、AVG(スコア)FROM成績GROUP BY氏名、 - >声明でグループ化した後、平均を求める。
SELECT部署名FROM従業員GROUP BY部署名HAVING COUNT(*)> = 3; - >部署人数が3人以上の部署名を検索します。
SELECT職級、AVG(給与)AS給与平均、SUM(給与)AS給与量FROM従業員GROUP BY役職; - >職級別の給与平均と合計を検索します。
SELECT顧客番号、COUNT(注文番号)、SUM(注文数量)FROM注文GROUP BY顧客番号、HAVING COUNT(顧客番号)> = 2; - > 2回以上注文した顧客の "顧客番号"別の顧客番号、注文回数、注文数量の合計を取得します。
SELECT半、COUNT(学生番号)FROM成績WHERE(国語+英語+数学)/ 3> = 95 GROUP BY半; - >国語、英語、数学のフィールドの平均値が95以上の学生数を班別で検索する。

8)ASを使用したフィールドを追加
●AS句を使用して、フィールド名またはテーブル名を変更して表示する。
●関数や数式が使用されて、別の名前を指定しない場合、Exprで始まる任意のフィールドに出力される。


SELECT COUNT(*)AS会員数FROM会員; - >会員(会員番号、名前、年齢、住所)テーブルで会員数が何人か検索する。
SELECT COUNT(*)AS会員数FROM会員; - >会員数を取得します。

9)DISTINCTを利用した重複排除
●重複したレコードは一度だけ表示します。


SELECT DISTINCT単位FROM科目; - >単位フィールドの重複レコードを削除した後、一度だけ表示します。

10)INを使用するサブクエリ
特定のテーブルを対象にクエリを実行した戻り値を別のテーブルのWHERE句に使用する質である。
サブクエリの結果が基になるクエリの条件として使用される形式です。
SELECTフィールドA FROMテーブルA
WHEREフィールドIN(SELECTフィールドB FROMテーブルB);


SELECT文は、勤務年数FROM社員WHERE部門コード
   IN(SELECT部門コードFROM部門
   WHERE部門名= '営業部');
- >部署名が "営業部"である従業員の氏名と勤務年数を検索する。
SELECT年度入学生、科目、点数FROM成績WHERE年度入学生
   IN(SELECT年度入学生FROM学生
   WHERE学年= 1 AND半= 1);
- > 1学年1班の生徒の学番、科目、点数を照会する。
SELECT商品コードFROM商品WHERE商品コード
   NOT IN(SELECT売上商品FROM売上
   WHERE取引先番号BETWEEN 30 AND 40);
- >取引先番号が30から40ではなく、商品の商品コードを検索します。

11)関数を使用した抽出条件を指定
関数
説明
NOW
現在の日付と時刻を表示する
DATE
現在の日付を表示する
TIME
現在の時刻を表示する
WEEKDAY
日付の曜日を番号で表示する
DATEADD
日付の数字を追加
DATEDIFF
開始日と終了日の違い
DATEPART
日付を指定した単位で表示する
DATEVALUE
日付を日付データに変換する
YEAR / MONTH / DAY
年/月/日だけを表示する
HOUR / MINUTE / SECOND
指定された時間の時/分/秒表示する


SELECT LCASE(商品名)FROM出庫; - >商品名の大文字をすべて小文字に変更して表示する。
SELECT DATEDIFF( "Y"、5、DATE())FROM出庫; - >出庫フィールドで、今日の日付までの経過日数(日)の数を表示します。
SELECT DATEADD( "YYYY"、5、DATE())FROM出庫; - >今日の日付から5年を加算した日付を表示します。
SELECT COUNT(*)FROM出庫GROUP BY DATEPART( "m"、[入荷日]); - >入荷日を月別にグループ化して、そのレコードの数を表示します。
YEAR([生年月日])> = 1980; - >誕生日が1980年以降の人を探す。
SELECT平均、IF(平均> = 90、 "合格"、 "不合格")AS合否FROM成績; - >平均と平均スコアが90点以上の場合は "合格"、そうでなければ "不合格"を表示するフィールドを "合格するかどうか "というフィールドに持って来る。
   
12)Cartesian product
両方のテーブルのすべてのフィールドを検索するクエリです。
レコード数:両方のテーブルのレコードを掛けた値が出力される。
フィールドの数:両方のテーブルのフィールド数を足した値が出力される。

0 件のコメント:

コメントを投稿