コンテンツ
序文
- 上記は、知っておく必要のある基本的なmysqlエントリであり、SQL構文に精通していない友人がさまざまな操作をすばやく確認して開始するのに役立ちます。
- このシリーズは、Xiaojieのmysqlの日常的な練習です。役立つと思われる場合は、Xiaojieに注意を払い、SQLの問題を一緒に練習して、さまざまなクエリテーブルのマージ操作に習熟してください。将来のインタビューの基礎を築いてください。
トピック1:2つのテーブルをマージする
- トピック要件:
SQLクエリを記述して、Personテーブルの各人物の姓、名、都市、およびステータスを報告します。personIdのアドレスがAddressテーブルにない場合は、nullとして報告されます。
結果テーブルを任意の順序で返します。
-
トピック分析:personIdのアドレスがAddressテーブルに存在しない場合、レポートはnullですが、personIdテーブルの情報を出力する必要があるため、これは外部結合メソッドです。
select
FirstName, LastName, city, state
from
person p left outer join address a
on p.personid = a.personid
ちなみに、いくつかの接続を確認してください
-
内部結合:両方のテーブル値が内部結合に存在します
-
外部結合:添付の表の値にnullが含まれている可能性があります
要約:
- 内側の結合B:交差点を取ります
- 左結合B:すべてのAを取得します。Bに対応する値がない場合、それはnullです。
- 右結合B:すべてのBを取得し、Aに対応する値がない場合は、nullになります。
- フルアウターB:ユニオンを取り、互いに対応しない値はnullです
フィルター条件は後に書き込まれます
トピック2:マネージャーの収入を超える従業員
- トピック要件
SQLクエリを記述して、マネージャーよりも稼いでいる従業員を見つけます。
- トピック分析:マネージャーよりも収入の高い従業員を見つける必要があります。これは明らかな自己接続の問題です。比較する必要のある情報は同じ表にあります。この関係は自己接続として理解できます。問題。
- 自己関連付け:自己関連付けとは、文字通り、自分自身が自分自身に接続されていることを意味します。現時点では、結合に使用されるテーブルは1つだけです。現時点では、自己結合は2つの同一のテーブルが結合されていると考えることができます。
- この問題は、多くの場合、同じテーブル内の2つのリンクされた情報です。従業員マネージャーはすべて従業員テーブルにあり、明らかに自己接続の問題です
# 形式1
select
a.name as Employee
from
Employee a inner join Employee b
on a.managerid = b.id
where
a.salary > b.salary;
# 形式2
/*
select
a.name as Employee
from
Employee a inner join Employee b
on a.managerid = b.id && a.salary > b.salary;
*/
# 形式3
/*
select
a.name as Employee
from
Employee a, Employee b
where
a.managerid = b.id && a.salary > b.salary;
*/
トピック3:重複するメールを探す
- 要件:テーブル内の重複するすべての電子メールを検索します
- アイデア:重複したメールであることが判明しました。これは、メールでグループ化した後、カウントが重複排除されることを示しています。count(email)>1の結果をansとして保持します。
select
email
from
person
group by
email
having
count(email) > 1;
要約する
- 今日のトピックは、主にいくつかのテーブル結合方法、理解する集合の共通部分を使用してテーブル結合を理解する方法、内部結合交差、完全外部結合結合、左外部右外部結合を確認することです:左右のテーブルに関するすべての情報、関連付けなしヌル
- テーブルの自己結合クエリ。同じテーブルがそれ自体と自己結合を形成してクエリを実行できます。
- グループ化されたクエリもあります。優先順位に注意してください。ここで、> group by> have> order by