MySQL基礎攻難2 子查詢(SELECT)

2021-10-12 10:20:55 字數 2098 閱讀 4347

本機環境 win10 ,mysql8,圖形操作工具mysql workbench。

crud中都可以出現子查詢的語句,下面主要說select中的子查詢。而子查詢中,子查詢出現的地方有下面地方(可能不全)。

2後面的子查詢充當臨時結果集,3後面的結果集充當篩選條件。這些都比較好理解。其實不好理解的是select後面出現的子查詢。所以下面僅重點講解select後面的子查詢。

建立乙個角色表,裡面含id,name,book_id欄位。建立乙個書表,裡面含id,book_name,author_name欄位。

詳情建立資訊見下面

# 建庫

create database mysql_basis_view;

use mysql_basis_view;

# 建立角色表

create table `role` (

id int primary key,

`name` varchar(20) not null,

book_id int not null

); # 建立書表

create table book (

id int primary key,

book_name varchar(50) not null,

author_name varchar(20) not null

);insert into book values

(1,'射鵰英雄傳','金庸'),

(2,'天龍八部','金庸'),

(3,'飛狐外傳','金庸');

insert into `role` values

(1,'黃蓉',1),

(2,'郭靖',1),

(3,'段譽',2),

(4,'蕭峰',2),

(5,'虛竹',2),

(6,'胡斐',3),

(7,'程靈素',3),

(8,'袁紫衣',3);

結果book表

role表

假設我現在想讓role表中的人都以如下形式輸出:

其實不難想到,讓兩個表做連線查詢就行了。但現在要求是,from 後面僅能出現 role表。而select子查詢的作用就是在已有表的基礎上,建立出新的資訊。對應的這個需求就是,僅在role表基礎上查詢出role表未曾出現的bookname資訊。

sql

select 

t1.`name`,

(select

t2.book_name

from

book as t2

where

t1.book_id = t2.id) as bookname

from

`role` as t1;

sql執行流程

每掃瞄1中的一條資料,就進行2的子查詢,然後以3的形式儲存一條查詢結果。

簡單總結如下:

1.select子查詢的作用就是在已有表的基礎上,建立出新的資訊。

2.具體流程解析見上圖。

3.select子查詢只能是標量子查詢,也就是說查詢出來的結果僅能是一條。否則會報這樣的錯error code: 1242. subquery returns more than 1 row

完結散花!

MySQL基礎學習(2)查詢

基礎查詢 語法 select 查詢列表 from 表名 特點 1 查詢列表可以是 表中的字段 常量值 表示式 函式 2 查詢結果是乙個虛擬的 1.查詢表中的單個字段 select last name from employees 2.查詢表中的多個字段 select last name,salary...

2 MySQL基礎 基礎查詢介紹

基礎查詢 語法 select 查詢列表 from 表名 1 查詢列表可以是 表中的字段 常量值 表示式 函式 2 查詢的結果是乙個虛擬的 查詢單個字段 select error code from error log 查詢多個字段 select error name thread id from e...

mysql基礎系列之九 子查詢

什麼是子查詢語句?指在一條select語句中,嵌入了另一條select語句,那麼被嵌入的select語句就稱之為子查詢語句。什麼是子查詢?當乙個查詢是另乙個查詢的條件時,該查詢稱之為子查詢。在計算機中語言select sql語句中,子查詢就是巢狀查詢下層的程式模組。標量子查詢 返回乙個資料 一行一列...