mysql數據庫多表查詢的語法,sql中多表查詢語法

本文目錄一覽:

如何使MYSQL多表聯合查詢?

select * from 表1 inner join 表2 on 關聯條件

select * from 表1 left outer join 表2 on 關聯條件

select * from 表1 right outer join 表2 on 關聯條件

select * from 表1 cross join 表2 on 關聯條件

MYSQL查詢

查詢平均成績大於70分的同學的學號和平均成績

SELECT s.id,AVG(sc.score) FROM student s,studentcourse sc WHERE s.id=sc.student_id GROUP BY s.id HAVING  AVG(sc.score)70;

查詢所有同學的學號、姓名、選課數、總成績

SELECT id,NAME

FROM student

WHERE id NOT IN (SELECT student_id

FROM studentcourse

WHERE course_id IN (SELECT course.id

FROM teacher,course

WHERE teacher.id=course.teacher_id

AND teacher.name=’關羽’));

查詢學生信息和平均成績

SELECT s.id,s.name,s.city,s.age, c.name,sc.score,t.name

FROM student s,studentcourse sc,course c,teacher t

WHERE s.id=sc.student_id AND c.id=sc.course_id AND c.teacher_id=t.id GROUP BY s.id; 

mysql複雜查詢–多表查詢

多表查詢是指基於兩個和兩個以上的表或是視圖的查詢.在實際應用中,查詢單個表可能不能滿足你的需求,(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到(dept表和emp表)

自連接是指在同一張表的連接查詢

select * from emp where empno=(select mgr from emp where ename=’ford’);

子查詢是指嵌入在其它sql查詢語句中的select語句,也叫嵌套查詢

單行子查詢是 指只返回一行數據的子查詢語句

select * from emp where deptno=(select deptno from emp where ename=’smith’);

多行子查詢指返回多行數據的子查詢 使用關鍵字 in

如果我們的一個子查詢,返回的 結果是多列,就叫做列子查詢

合併多個select語句的結果,可以使用集合操作符 union,union all

mysql我想模糊多表查詢應該怎麼寫?

table_list——多表查詢

指定查詢的數據表。

既可以從一個數據表中查詢,也可以從多個數據表中進行查詢,多個數據表之間用“,”進行分隔,並且可以通過where子句使用連接運算來確定表之間的聯繫。

多表查詢的sql語句格式如下:

select 表名.字段名 from 表1,表2… where 表1.字段=表2.字段 and 其它查詢條件

例如,首先查看一下tb_chengji數據表中的數據記錄。在上圖有顯示效果。

然後查看一下tb_info數據表中的數據記錄。代碼如下:

select * from tb_info;

在上面的SQL語句中,因為2個表都有id字段和xuesheng字段,為了告訴服務器要顯示的是哪個表中的字段信息,所以要加上前綴。語法格式如下:

表名.字段名

mysql多表查詢語句

你這兩個表裡沒有相同的字段,那麼如果兩個表一起查詢的時候出現的記錄太多了,你也用不了。如果你想查,那麼SELECT * FROM A A,B B 就行了,但我覺得這應該不是你想要的,你最好把表結構改一下,在B表裡加一字段,與A表能關聯起來,比如ID,

SELECT * FROM A A,B B WHERE A.ID=B.ID

mysql多表查詢sql語句怎麼寫?

一使用SELECT子句進行多表查詢

SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查詢條件

SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id

注:在上面的的代碼中,以兩張表的id字段信息相同作為條件建立兩表關聯,但在實際開發中不應該這樣使用,最好用主外鍵約束來實現

二使用表的別名進行多表查詢

如:SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id AND b.id=’$_POST[textid]’

SQL語言中,可以通過兩種方式為表指定別名

第一種是通過關鍵字AS指定,如

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id

第二種是在表名後直接加表的別名實現

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id

使用表的別名應注意幾下幾點

(1)別名通常是一個縮短了的表名,用於在連接中引用表中的特定列,如果連接中的多個表中有相同的名稱列存在,必須用表名或表的別名限定列名

(2)如果定義了表的別名就不能再使用表名

三合併多個結果集

SQL語言中,可以通過UNION 或 ALL將多個SELECT語句的查詢結果合併輸出,這兩個關鍵字的使用說明如下:

UNION:利用該關鍵字可以將多個SELECT 語句的查詢結果合併輸出,並刪除重複行

ALL:利用該關鍵字可以將多個SELECT 語句的查詢結果合併輸出,但不會刪除重複行

在使用UNION或ALL關鍵字將多個表合併輸出時,查詢結果必須具有相同的結構並且數據類型必須兼容,另外使用UNION時兩張表的字段數量也必須相同,否則會提示SQL語句有錯誤。

e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel

四簡單嵌套查詢

子查詢:子查詢是一個SELECT查詢,返回單個值且嵌套在SELECT、INSERT、UPDATE和DELETE語句或其它查詢語句中,任何可以使用表達式的地方都可以使用子查詢.

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id=’$_POST[test]’)

內連接:把查詢結果作為WHERE子句的查詢條件即稱為內連接

五複雜的嵌套查詢

多表之間的嵌套查詢可以通過謂詞IN實現,語法格式如下:

test_expression[NOT] IN{

subquery

}

參數說明:test_expression指SQL表達式,subquery包含某結果集的子查詢

多表嵌套查詢的原理:無論是多少張表進行嵌套,表與表之間一定存在某種關聯,通過WHERE子句建立此種關聯實現查詢

六嵌套查詢在查詢統計中的應用

實現多表查詢時,可以同時使用謂詞ANY、SOME、ALL,這些謂詞被稱為定量比較謂詞,可以和比較運算符聯合使用,判斷是否全部返回值都滿足搜索條件.SOME和ANY謂詞是存在量的,只注重是否有返回值滿足搜索條件,這兩個謂詞的含義相同,可以替換使用;ALL謂詞稱為通用謂詞,它只關心是否有謂詞滿足搜索要求.

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName=’$_POST[select]’)

SELECT a.id,a.name FROM tb_demo067 AS a WHERE id3)

ANY 大於子查詢中的某個值

=ANY 大於等於子查詢中的某個值

=ANY 小於等於子查詢中的某個值

=ANY 等於子查詢中的某個值

!=ANY或ANY 不等於子查詢中的某個值

ALL 大於子查詢中的所有值

=ALL 大於等於子查詢中的所有值

=ALL 小於等於子查詢中的所有值

=ALL 等於子查詢中的所有值

!=ALL或ALL 不等於子查詢中的所有值

七.使用子查詢作派生的表

在實際項目開發過程中經常用到從一個信息較為完善的表中派生出一個只含有幾個關鍵字段的信息表,通過子查詢就可以來實現這一目標,如

SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people

注:子查詢應遵循以下規則:

(1)由比較運算符引入的內層子查詢只包含一個表達式或列名,在外層語句中的WHERE子句內命名的列必須與內層子查詢命名的列兼容

(2)由不可更改的比較運算符引入的子查詢(比較運算符後面不跟關鍵字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非預先確定了成組或單個的值

(3)用EXISTS引入的SELECT列表一般都由*組成,不必指定列名

(4)子查詢不能在內部處理其結果

八使用子查詢作表達式

SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071

註:在使用子查詢時最好為列表項取個別名,這樣可以方便用戶在使用mysql_fetch_array()函數時為表項賦值,如

SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071

九使用子查詢關聯數據

SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = ‘$_POST[text]’)

十多表聯合查詢

利用SQL語句中的UNION,可以將不同表中符合條件的數據信息顯示在同一列中。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten

注:使用UNION時應注意以下兩點:

(1)在使用UNION運算符組合的語句中,所有選擇列表的表達式數目必須相同,如列名、算術表達式及聚合函數等

(2)在每個查詢表中,對應列的數據結構必須一樣。

十一對聯合後的結果進行排序

為了UNION的運算兼容,要求所有SELECT語句都不能有ORDER BY語句,但有一種情況例外,那就是在最後一個SELECT語句中放置ORDER BY 子句實現結果的最終排序輸出。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id

使用UNION條件上相對比較苛刻,所以使用此語句時一定要注意兩個表項數目和字段類型是否相同

十二條件聯合語句

SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=’人民郵電出版社’ OR name=’機械工業出版社’ UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name ‘人民郵電出版社’ AND name ‘機械工業再版社’ ORDER BY id

上面語句應用了GROUP BY分組語句和HAVING語句實現條件聯合查詢。其實現目的是先保證將’人民郵電出版社’和’機械工業出版社’始終位於名單最前列,然後再輸出其它的出版社

十三簡單內連接查詢

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1

其中,filedlist是要顯示的字段,INNER表示表之間的連接方式為內連接,table1.column1=table2.column1用於指明兩表間的連接條件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id

十四複雜內連接查詢

複雜的內連接查詢是在基本的內連接查詢的基礎上再附加一些查詢條件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM tb_demo065 WHERE tb_demo065.name=’$_POST[text]’)

總之,實現表與表之間的關聯的本質是兩表之間存在共同的數據項或者相同的數據項,通過WHERE 子句或內連接INNER JOIN … ON 語句將兩表連接起來,實現查詢

十五使用外連接實現多表聯合查詢

(1)LEFT OUTER JOIN表示表之間通過左連接方式相互連接,也可簡寫成LEFT JOIN,它是以左側的表為基準故稱左連接,左側表中所有信息將被全部輸出,而右側表信息則只會輸出符合條件的信息,對不符合條件的信息則返回NULL

e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

(2)RIGHT OUTER JOIN表示表之間通過右連接方式相互連接,也可簡寫成RIGHT JOIN,它是以右側的表為基準故稱右連接,右側表中所有信息將被全部輸出,而左側表信息則只會輸出符合條件的信息,對不符合條件的信息則返回NULL

E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

十六利用IN或NOTIN關鍵字限定範圍

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN ‘$_POST[text1]’ AND ‘$_POST[text2]’)

利用IN可指定在範圍內查詢,若要求在某範圍外查詢可以用NOT IN代替它

十七由IN引入的關聯子查詢

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = ‘$_POST[text]’)

十八利用HAVING語句過濾分組數據

HAVING子句用於指定組或聚合的搜索條件,HAVING通常與GROUP BY 語句一起使用,如果SQL語句中不含GROUP BY子句,則HAVING的行為與WHERE子句一樣.

e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math ’95’

求mysql多表查詢的語句

最下面有代碼 ,改後的.拿去吧.

—————————————–

如下:看着修改吧.

id sid course result

1 2005001 語文 80.0

2 2005001 數學 90.0

3 2005001 英語 80.0

4 2005002 語文 56.0

5 2005002 數學 69.0

6 2005002 英語 89.0

declare @sql varchar(8000)

set @sql=’select sid’

select @sql=@sql+’,’+course.name+’=isnull(sum(case course when ”’+course.name+”’ then result end),0)’

from course order by id

set @sql=@sql+’ from result group by sid order by sid’

print @sql

exec(@sql)

得出結果

sid 語文 數學 英語

2005001 80.0 90.0 80.0

2005002 56.0 69.0 89.0

===============================================

CREATE TABLE [dbo].[stu](

[sid] [int] NULL,

[sname] [nvarchar](10) NULL,

[sex] [nvarchar](2) NULL

) ON [PRIMARY]

go

insert into stu values(1,’張三’,’男’)

insert into stu values(2,’李四’,’男’)

GO

CREATE TABLE [dbo].[km](

[kid] [int] NULL,

[kname] [varchar](50) NULL

) ON [PRIMARY]

go

insert into km values(1,’語文’)

insert into km values(1,’數學’)

insert into km values(1,’英語’)

go

CREATE TABLE [dbo].[cj](

[sid] [int] NULL,

[sname] [varchar](50) NULL,

[score] [int] NULL,

[kid] [int] NULL

) ON [PRIMARY]

go

insert into cj values(1,1,60,1)

insert into cj values(2,1,70,2)

insert into cj values(3,1,80,3)

insert into cj values(1,2,65,1)

insert into cj values(2,2,69,2)

insert into cj values(3,2,80,3)

go

select stu.sid,stu.sname,

sum(case km.kname when ‘語文’ then score else 0 end) ‘語文’,

sum(case km.kname when ‘數學’ then score else 0 end) ‘數學’,

sum(case km.kname when ‘英語’ then score else 0 end) ‘英語’

from cj left join stu on cj.sname=stu.sid

left join km on km.kid=cj.kid

group by stu.sid,stu.sname

/*

sid sname 語文 數學 英語

2 李四 60 68 77

1 張三 60 70 80

*/

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239433.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:16
下一篇 2024-12-12 12:16

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • 使用SQL實現select 聚合查詢結果前加序號

    select語句是數據庫中最基礎的命令之一,用於從一個或多個表中檢索數據。常見的聚合函數有:count、sum、avg等。有時候我們需要在查詢結果的前面加上序號,可以使用以下兩種方…

    編程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29

發表回復

登錄後才能評論