程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql查詢語句(mysql學習筆記七),

mysql查詢語句(mysql學習筆記七),

編輯:MySQL綜合教程

mysql查詢語句(mysql學習筆記七),


Sql語句

一般順序GHOL : group by,having ,order by,limit

    如果是分組,應該使用對分組字段進行排序的group by語法

                    Limit start ,length

                   去除重復記錄默認為all

Select distinct 字段  from

Select distinct * from 沒用(所有字段組合不相同才認為不相同,用在這裡基本沒用),記錄值完全一樣時取其一個

Union查詢

把兩個select 結果union起來

( select 語句1)union(select 語句2)

選出英語最高分和數學最高分的學生的id,name ,class

注意加括號

有重復記錄時的合並

english由高到低和由低到高的結果合並

在符合語句中 order by功能受影響,需加上limit

子語句的排序

1.將子語句包裹在子括號內

2.子語句的 order by

 中有order by配合Limit使用時才生效。

原因是:union在做子語句時,會對沒有limitorder by優化(忽略)

所有結果排序

只需要在最後一個select語句後增加相應排序即可。

子語句括號非必須最後一個排序默認針對所有結果。

Union檢索的字段必須個數一樣(否者出錯),數據類型也一樣(發生類型轉換列名由第一個select檢索列名來定

子查詢

語句內部的查詢語句

表中數據

查出英語成績最高的學生的信息

不用子查詢:

 

但有2個學生英語成績最高且一致,這個時候在不知道表裡數據的情況下就不能使用這種查詢方法

   思路:先找出英語成績最大的那個值,再找出哪些學生的英語成績與這個最大的值相等。這樣一步一步進行查詢。

 

只檢索一個字段時可以作為一個值使用,必須只檢索一個字段

子查詢分類

不同的分類會有不同的使用方式

分類標准:

子查詢出現的位置

子查詢的返回值形式

  返回值分類:

   單一值,單列,多列,多行多列()

出現位置:

Where 型,where 

From  from

Exists

使用:

標量的:獲得一個值後用關系運算符進行運算(> >=,< <= = <> )

列子查詢(只是1):獲得一列通常是對個行的一列值(一個集合)

 使用in,not in運算符

查出班級為php101中所有學生的信息

集合操作符還有

Any(集合)  集合中的任意一個

=any(集合) 等於集合中的任意一個即可

等同於in

=All(集合) 集合中的所有元素

!=all(集合) 不等於集合中的所有元素等同於Not in

!=any(集合) 不等於集合中的任意一個元素成立即可,即為只要不等於其中的一個元素即為成立的。

注意:這種語法不該出現在實際開發中

Some(集合) 集合中的一些

語法上與any一樣

總結:

=any  等同於in

!=all 等同於 not  in

Some 和any同義

All,any ,some可以使用除了=,!=之外運算符,比in強大

返回一行

在參與比較時,使用括號可以構建一行

(field1,field2,…)

表中數據

現在要查詢出和賀8在同樣的班級且與他math成績一樣的同學的信息

子查詢

 

返回一個表

如果用在from子句內,要求要是一個表

現在是查詢結果,必須給這個查詢結果起別名

 表中數據

查詢php103班 english不及格的學生信息

必須有別名

Exists

如果子查詢可以返回數據則返回真,否者返回假

有以下2表

A表 

B表

在a中查詢出id在 b中有的記錄

先獲取a表的第一行記錄,在子查詢中判斷a表的id與b表的id比較

連接查詢

Join

每個實體,一個表

一個業務邏輯,使用多個實體的數據

多張表應該在一起使用,將多個表的記錄連接起來

Teacher

Teacher_class1

查出代課老師的代課信息

 

 

 

笛卡爾(交叉)連接

內連接處理

在連接時,是可以省略連接條件的。意味著,所有的左表數據,都要與右表的記錄做一個連接

共存在m*n個連接

稱之為交叉連接或笛卡爾集

此時可以使用 cross join代替inner join

Mysql中cross join與inner join相同

Inner join是默認的連接方式(inner 省略)

等效的

也可使用

表示笛卡爾積

結果雖然一樣

On數據連接條件

Where數據過濾條件

但 where是先連接成笛卡爾積

然後做篩選,而on 是在連接時就判斷

上表是連接條件2

下表是 

過濾條件2

 

 

 

下表連接過濾各一個

Using:要求負責連接的兩個實體之間字段名稱一致。

查詢條件與外連接通用 外連接不能用where作為連接條件。

注意:

無論是連接條件還是連接查詢多字段列表,都沒必要一定要寫表名.字段語法,是否寫取決於是否發生沖突。建議寫上。

別名

  表應該別名,保證簡潔清晰。

列別名

 

外連接:

分類

左外連接

右外連接

全外連接(暫不支持)

左連接

在連接時,如果出現左邊表,數據連接不到右邊表的情況,則左表的數據在最終結果內保留。而如果出現右表的數據連接不到左標的情況,右表數據被丟棄。

由於內連接沒有左右連接之分,left outer joinouter可以省略。

在外連接中不可以用where做連接條件可用on ,using

表別名可以用在連接條件裡,但字段別名不可以。

表起別名後,在篩選或者連接條件裡必須用別名,原名不能用了

左表teacher裡的數據孫武連接不上也保留。

全外連接左外與右外 union(取並集)

內連接是左外右外交集

Using會去掉結果中重復字段,並放在列首

外連接不能使用沒有條件的連接(不像內連接那樣形成笛卡爾積)

自然連接

通過mysql自己判斷完成連接過程。不需要指定連接條件,mysql會使用多表內相同的字段作為連接條件。

one數據

Two表數據

 

自然連接也有內外之分

內:natural join

:左外natural left join ,右外 natural right join

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved