溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL語(yǔ)言的查詢方法有哪些

發(fā)布時(shí)間:2021-12-22 15:12:29 來(lái)源:億速云 閱讀:289 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“SQL語(yǔ)言的查詢方法有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“SQL語(yǔ)言的查詢方法有哪些”吧!

外鍵約束

MySQL屬于關(guān)系型的數(shù)據(jù)庫(kù),表之間可以建立關(guān)系,如:學(xué)生表和成績(jī)表,在成績(jī)表中添加學(xué)生編號(hào)引用學(xué)生表中的學(xué)生編號(hào),這樣在成績(jī)表中就不用添加重復(fù)的學(xué)生信息了,這種關(guān)系也叫主外鍵關(guān)系,可以通過(guò)設(shè)置外鍵約束實(shí)現(xiàn)。

可以在創(chuàng)建表時(shí),添加外鍵約束來(lái)保證表和表之間引用完整性,添加外鍵后:

在插入外鍵表數(shù)據(jù)前,必須先插入主表數(shù)據(jù)

在刪除主表數(shù)據(jù)前,必須先刪除外鍵表數(shù)據(jù)

語(yǔ)法:

create table 表名

(

字段名 類型 約束,

... ,

constraint 外鍵名稱 foreign key (外鍵列) references 主表(主鍵)

);

代碼示例:

use mysql_db;

-- 創(chuàng)建成績(jī)表

drop table if exists tb_score;

create table tb_score

(

score_id int primary key auto_increment,

score_stu_id int,

score int,

score_course varchar(20),

constraint fk_score_stu_id foreign key(score_stu_id) references tb_student(stu_id)

);

內(nèi)連接查詢

在查詢時(shí)我們經(jīng)常要把相關(guān)的多張表的字段,一起查詢出來(lái),如查詢學(xué)生成績(jī)時(shí),要顯示分?jǐn)?shù)和學(xué)生姓名。這個(gè)時(shí)候我們就需要連接查詢了,連接查詢分為內(nèi)連接和外連接,我們先學(xué)習(xí)內(nèi)連接查詢。

內(nèi)連接查詢的特點(diǎn)是:會(huì)查詢出相關(guān)表中都存在的數(shù)據(jù)。

語(yǔ)法有兩種實(shí)現(xiàn)方法:

1)select 字段..... from 表1 inner join 表2

on 表1.主鍵 = 表2.外鍵;

注意:這里假設(shè)表1是主表,內(nèi)連接表的前后順序無(wú)關(guān)

2)select 字段..... from 表1 , 表2

where 表1.主鍵 = 表2.外鍵;

代碼示例:

-- 查詢學(xué)生姓名和成績(jī) 方式1

select s.stu_id ,s.stu_name,c.score_course,c.score from tb_score c inner join tb_student s on s.stu_id = c.score_stu_id;

-- 方式2

select s.stu_id ,s.stu_name,c.score_course,c.score from tb_score c , tb_student s where s.stu_id = c.score_stu_id;

效果相同:

SQL語(yǔ)言的查詢方法有哪些cdn.xitu.io/2019/6/5/16b265444d53bca3?w=300&h=196&f=png&s=35605">

外連接查詢

外連接分為左外連接和右外連接:

1) 左外連接

連接查詢多張表的數(shù)據(jù),顯示所有左表的數(shù)據(jù),右表存在不相符的數(shù)據(jù)補(bǔ)null。

語(yǔ)法:

select 字段... from 左表 left join 右表

on 主表.主鍵 = 子表.外鍵;

代碼示例:

-- 左外連接,查詢學(xué)生姓名和成績(jī)

select s.stu_id,s.stu_name,c.score_course,c.score from tb_student s left join tb_score c on s.stu_id = c.score_stu_id;

SQL語(yǔ)言的查詢方法有哪些

-- 查詢所有參加過(guò)考試的同學(xué)

select s.stu_id,s.stu_name,c.score_course,c.score from tb_student s left join tb_score c on s.stu_id = c.score_stu_id where c.score is not null;

SQL語(yǔ)言的查詢方法有哪些

-- 查詢所有沒(méi)參加過(guò)考試的同學(xué)

select s.stu_id,s.stu_name,c.score_course,c.score from tb_student s left join tb_score c on s.stu_id = c.score_stu_id where c.score is null;

SQL語(yǔ)言的查詢方法有哪些

2)右外連接

與左連接相反,顯示所有右表數(shù)據(jù),左表中不相符的數(shù)據(jù)補(bǔ)null。

語(yǔ)法:

select 字段... from 左表 right join 右表

on 主表.主鍵 = 子表.外鍵;

代碼示例:

select s.stu_id,s.stu_name,c.score_course,c.score from tb_score c right join tb_student s 
on s.stu_id = c.score_stu_id;

SQL語(yǔ)言的查詢方法有哪些

子查詢

在查詢語(yǔ)句中還可以嵌入查詢語(yǔ)句,嵌入的查詢也叫子查詢,子查詢將先執(zhí)行,查詢到結(jié)果后,父查詢可以將此結(jié)果作為查詢條件再進(jìn)行一次查詢,這樣可以解決比較復(fù)雜的查詢問(wèn)題。

語(yǔ)法:

select ... from 表 where 字段 比較運(yùn)算符 (select ... from 表 where 條件);

代碼示例:

-- 查詢年齡比李四大的學(xué)生

select * from tb_student where stu_age > (select stu_age from tb_student where stu_name = '李四');

SQL語(yǔ)言的查詢方法有哪些

-- 查詢李四的老鄉(xiāng)

select * from tb_student where stu_address = (select stu_address from tb_student where stu_name = '李四');

SQL語(yǔ)言的查詢方法有哪些

子查詢之IN

有時(shí)候當(dāng)子查詢中查詢結(jié)果不止一個(gè)的情況下,使用比較運(yùn)算符會(huì)出現(xiàn)錯(cuò)誤,這時(shí)候我們就需要使用一些關(guān)鍵字來(lái)幫助篩選結(jié)果。

in關(guān)鍵字的作用是在字段和數(shù)據(jù)列表中任意一個(gè)相等,條件就成立。

代碼示例:

-- 查詢語(yǔ)文分?jǐn)?shù)考相同的學(xué)生,先用子查詢查語(yǔ)文的成績(jī),在用內(nèi)連接查考過(guò)語(yǔ)文的學(xué)生姓名和成績(jī),把成績(jī)進(jìn)行比較

select stu_name,score_course,score from tb_student inner join tb_score on tb_student.stu_id = tb_score.score_stu_id where score_course='語(yǔ)文' and score in(select score from tb_score where score_course = '語(yǔ)文');

SQL語(yǔ)言的查詢方法有哪些

子查詢之ALL

all和比較運(yùn)算符配合使用,如果字段和所有的查詢結(jié)果都比較成立,結(jié)果才成立。

語(yǔ)法:

字段 比較運(yùn)算 all(查詢結(jié)果)

代碼示例:

-- 查詢比所有男學(xué)生小的女學(xué)生,先查所有男學(xué)生的年齡,如果女學(xué)生年齡比所有這些年齡大,就查出來(lái)

select stu_name,stu_age,stu_gender from tb_student where stu_gender = '女' and stu_age < all(select stu_age from tb_student where stu_gender = '男');

SQL語(yǔ)言的查詢方法有哪些

子查詢之ANY

any和比較運(yùn)算符配合使用,如果字段和任意一個(gè)查詢結(jié)果比較成立,則結(jié)果成立。

語(yǔ)法:

字段 比較運(yùn)算 any(查詢結(jié)果)

代碼示例:

-- 查詢只要比一個(gè)南京學(xué)生大的武漢學(xué)生

select stu_name,stu_address from tb_student where stu_address = '武漢'

and stu_age > any(select stu_age from tb_student where stu_address='南京');

SQL語(yǔ)言的查詢方法有哪些

子查詢之Exists

exists表示是否有查詢結(jié)果,如果沒(méi)有結(jié)果,返回false,有結(jié)果則返回true

語(yǔ)法:

exists(查詢結(jié)果)

-- 查詢考過(guò)英語(yǔ)的同學(xué),在子查詢中需要判斷父查詢中的學(xué)生id是否在子查詢中存在

select * from tb_student where

exists(select score_stu_id from tb_score where tb_student.stu_id = tb_score.score_stu_id and score_course = '英語(yǔ)');

感謝各位的閱讀,以上就是“SQL語(yǔ)言的查詢方法有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)SQL語(yǔ)言的查詢方法有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sql
AI