SQL表連線,排序輸出

2021-10-06 22:02:26 字數 3512 閱讀 5198

區別on和where:

1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。

2) 為啥不用where? 因為where的實質就是根據你給的條件(personid相等),選取兩表的公共部分。但是,因為person表不是所有人都有位址資訊的,但是address表只顯示有位址資訊的人,這樣選取出來的就是有位址資訊的人,漏掉了沒有位址資訊的人。所以大家注意,where的本質就是過濾。

3) 如何連線?應該用person表左連線(left join)address表,保留person表的所有資訊

左連線右連線

left join / right join /inner join相關

關於左連線和右連線總結性的一句話:

左連線where隻影向右表,右連線where只影響左表。

left join

select * from tbl1 left join tbl2 where tbl1.id = tbl2.id

左連線後的檢索結果是顯示tbl1的所有資料和tbl2中滿足where 條件的資料。

簡言之 left join影響到的是右邊的表

right join

select * from tbl1 right join tbl2 where tbl1.id = tbl2.id

檢索結果是tbl2的所有資料和tbl1中滿足where 條件的資料。

簡言之 right join影響到的是左邊的表。一般要使得資料庫查詢語句效能好點遵循一下原則:

在做表與表的連線查詢時,大表在前,小表在後,不使用表別名,通過字段字首區分不同表中的字段,查詢條件中的限制條件要寫在表連線條件前盡量使用索引的字段做為查詢條件

題目sql架構:

create

table person (personid int

, firstname varchar

(255

), lastname varchar

(255))

create

table address (addressid int

, personid int

, city varchar

(255

), state varchar

(255))

truncate

table person

insert

into person (personid, lastname, firstname)

values

('1'

,'wang'

,'allen'

)truncate

table address

insert

into address (addressid, personid, city, state)

values

('1'

,'2'

,'new york city'

,'new york'

)

表1: person

+-------------+---------+

| 列名 | 型別 |

+-------------+---------+

| personid |

int|

| firstname |

varchar

|| lastname |

varchar|+

-------------+---------+

personid 是上表主鍵

表2: address

+-------------+---------+

| 列名 | 型別 |

+-------------+---------+

| addressid |

int|

| personid |

int|

| city |

varchar

|| state |

varchar|+

-------------+---------+

addressid 是上表主鍵

firstname, lastname, city, state

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。 在使用left jion時,on和where條件的區別如下:

# write your mysql query statement below

select p.firstname,p.lastname,a.city,a.state

from

person p left

join address a

onp.personid=a.personid

sql架構

create

table

ifnot

exists employee (id int

, salary int

)truncate

table employee

insert

into employee (id, salary)

values

('1'

,'100'

)insert

into employee (id, salary)

values

('2'

,'200'

)insert

into employee (id, salary)

values

('3'

,'300'

)

write your mysql query statement below

select ifnull (

(select

distinct salary from employee order

by salary desc

limit1,

1),null

)as secondhighestsalary

或者

# write your mysql query statement below

select ifnull (

(select

distinct salary from employee order

by salary desc

limit1,

1),null

)as secondhighestsalary

#limit 1,1 是指從第二個開始,加1個

#limit n,n 從第n+1個開始,加 n 個

mysql表連線sql表 MYSQL表連線查詢

表連線查詢 一 交叉連線 笛卡爾積 查詢teacher和course表中所有的資料 select from teacher,course select name,courseid,course.id,cname from teacher,course where teacher.courseid c...

SQL表交叉連線

mssql文件中也叫交叉聯接.好比 a表裡面的a,b,c 查詢符合a x 條件的.b表裡面 d,e,f 查詢符合 d 1 語句 select a.a,a.b,a.c,b.d,b.e b.f from a,b where a.a x b.d 1 這個是錯的.錯在 怎麼改?把 where裡面的,改為an...

sql語句 連線表

cartesian join 笛卡爾連線 表1的每一行同表2的每一行結合做為一條記錄。這樣的查詢將返回 表1行數 x 表2行數 條記錄。這樣的連線沒有什麼使用者只是說明了所有連線是把表進行組合的。equi join 相等連線 一般用在表間有相同屬性的列。如有員工表和員工工資表,兩個表中都有員工號這一...