本機環境 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語句中,子查詢就是巢狀查詢下層的程式模組。標量子查詢 返回乙個資料 一行一列...