子查詢與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’)