[mysql]子查詢與串連

來源:互聯網
上載者:User

標籤:

1,子查詢(Subquery)是指出現在其他 SQL 陳述式內的select子句

例如:

select * from t1 where col1 = (select col2 from t2);

其中 select * from t1, 稱為Outer Query/Outer Statement

select col2 from t2 ,稱為 SubQuery.

2,子查詢指嵌套在查詢內部,並且始終出現在圓括弧內

子查詢有多個關鍵字或條件,如 distinct , group by, order by, limit, 函數等

子查詢的外層查詢可以是 : select, insert, update, set 或 do。

3,子查詢可以返回標量、一行、一列或子查詢4,由比較子(=,>,<,>=,<=,<>,!=,<=>)引發的子查詢

文法結構 : operand comparison_operator subquery

子查詢執行個體

求所有商品的平均價格

select round(avg(goods_price), 2) from tdb_goods;

列出所有商品價格在平均價格之上的商品

select goods_id,goods_name,goods_price from tdb_goods

where goods_price >= (select round(avg(goods_price),2) from tdb_goods);

用 SOME(任意一個),ANY(任意一個),ALL(所有的) 修飾比較子

5,由 [NOT] IN 、[NOT] EXISTS引發的查詢

= ANY運算子 與IN 等效,!=ALL或<>ALL與NOT IN 等效;

如果子查詢返回任何行,EXIST將返回TRUE,否則返回false;

6,使用 INSERT…SELECT 插入記錄(便於使用外鍵實現)

在一個資料表的分類中,可能存在大量重複的資料,這時候可以獎建立兩個資料表關聯,提高查詢效率。

執行個體

將查詢結果寫入資料表

Insert tdb_goods_cates(cate_name) select goods_cate from tdb_goods group by goods_cate;

7,多表更新

多表的更新基本上與單表更新相似。

連線類型

INNER JOIN(與JOIN,CROSS JOIN等價) 內串連,

LEFT[OUTER] JOIN 左外串連

RIGHT[OUTER] JOIN 右外串連

SQL語句執行個體

update tdb_goods inner join tdb_goods_cates on goods_cate = cate_name set goods_cate = cate_id;

8,多表更新之一步到位 – CREATE … SELECT

SQL語句執行個體

(1)

create table tdb_goods_brands(brand_id smallint unsigned primary key auto_increment,brand_name varchar(40) not null)

select brand_name from tdb_goods group by brand_name;

(2) 當兩個表的欄位名相同時,可以為兩個表分別起一個別名,例如下面的g和b:

update tdb_goods as g inner join tdb_goods_brands as b on g.brand_name = b.brand_name set g.brand_name = b.brand_id;

(3)修改表的結構

alter table tdb_goods change goods_cate cate_id smallint unsigned not null,change brand_name brand_id smallint unsigned not null;

9,串連的文法結構10,內串連 INNER JOIN

通常使用 ON 關鍵字來設定串連條件,使用WHERE關鍵字進行結果集記錄的過濾。

內串連:顯示左表及右表合格記錄(交集)。

SQL語句執行個體

select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id =tdb_goods_cates.cate_id;

11,外串連 OUTER JOIN

(1) 左外串連: 顯示左表中的全部和右表中合格部分。

select goods_id,goods_name,cate_name from tdb_goods left join tdb_goods_cates on tdb_goods.cate_id = tdb_goods_cates.cate_id;

(2) 右外串連: 顯示右表中的全部和左表中合格部分。

select goods_id,goods_name,cate_name from tdb_goods right join tdb_goods_cates on tdb_goods.cate_id =tdb_goods_cates.cate_id;

12,多表串連

select goods_id,goods_name,cate_name,brand_name,goods_price from tdb_goods as g

inner join tdb_goods_cates as c on g.cate_id = c.cate_id

inner join tdb_goods_brands as b on g.brand_id = b.brand_id\G;

[mysql]子查詢與串連

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.