子查詢

      在〈子查詢〉中尚無留言

子查詢與where

將查詢結果, 放入另一個SQL中
比如先查詢美國的人口, 然後再查詢其人口數大於美國的國家
select population from contry where code=’USA’

select code, population from country where population > 278357000

以上可以簡化為
select code, population
from country
where population > (select population  from country where code=’usa’)

子查詢大部份使用在提供判斷條件用的資料,在「WHERE」和「HAVING」子句中,都可能出現子查詢. 所以子查詢不可以傳回超過一個欄位的資料, 也不可以傳回超過一筆以上的資料.

IN

選取城市人口數大於九百萬的國家名
select countrycode from city where population>9000000;此時會傳回’bra’, ‘idn’, ‘ind’,’chn’, ‘kor’, ‘pak’
select Name from country where code in(‘bra’, ‘idn’, ‘ind’,’chn’, ‘kor’, ‘pak’);

以上簡化為如下

use world;
select Name from country
where code in(
select countrycode from city
where population>9000000);

此時的子查詢就可以傳回多筆資料了

多欄位子查詢

select Name, GNP  from country
where Continent=’Asia’ and GovernmentForm=’Republic’

可簡化為如下
select Name, GNP from country
where (Continent, GovernmentForm) = (‘Asia’,’Republic’)

上述後面的值,也可以使用子查詢
select Name, GNP from country
where (Continent, GovernmentForm) = (select region, GovernmentForm from cuntry where name=”Iraq’)

子查詢與select

select concat(
‘the GNP of Japan is’ ,( select GNP from country where name = ‘Japn’)
)

子查詢與from

查詢每個國家的人口數, 要顯示的欄位是國家名, 國家別, 人口

select Name, a.Code, b.Population from country as a, 
(select CountryCode,sum(population) as Population from world.city
group by countryCode) as b
where a.Code=b.countrycode;

子查詢放在From, 則是把子查詢當成是一個表格, 所以需給子查詢一個表格名稱

select Name, GNP
from (select * from county where Continent =’Asia’) asisCountry
order by GNP desc
Limit 10

子查詢與新增

insert into mycountry
(select Code, Name, Continent, Region, Population, GNP
from country where Continent=’Asia’)

子查詢所取得的欄位, 需與mycountry的欄位相同

複製資料表

create table mycity like world.country;
insert into mycity select * from world.country;

MSSQL 複制資料表

複製結構 : select * into new_table from old_table where 1=0
複製結構及資料 : select * into new_table from old_table

備份還原資料庫

備份 : mysqldump -u root table > table.sql
還原 : mysql -u root < table.sql

子查詢與修改

比如某些部門的薪資全部加5%
update employee set salary=salary*1.05
where deptno in (select depno from dept where dname in(‘sales’,’rd,));

子查詢與刪除

比如要裁掉Sales的部門
delete from employee
where depno=(select deptno from dept where dname=’Sales’)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *