判断字段长度函数length
SELECT name,capital
FROM world
WHERE LENGTH(name)=LENGTH(capital)
求字串,注意分左字串和右字串
LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)
LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。
SELECT name,capital
FROM world
WHERE LEFT(name,1)=LEFT(capital,1) and name!=capital
保留小数点ROUND() 语法
SELECT ROUND(column_name,count)
FROM table_name
column_name字段,保留count个小数个数
1、表 nobel(yr,subject,winner)
显示1984年获奖者和主题按主题和获胜者名称排序; 但最后列出化学和物理
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'),subject,winner
2、表 world(name,continent,area,population,gdp)
PS:下面的四个例子的子查询可以看出是group by continent,子查询where后面的and条件就是对分组里的内容进行筛选。(目前是这么理解,对不对不知道)
(1)在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y //子查询相当于查找每一个州的所有area
WHERE y.continent=x.continent
AND area>0)
(2)列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)
SELECT continent,name FROM world x
WHERE x.name=(SELECT y.name FROM world y WHERE y.continent=x.continent ORDER BY name LIMIT 1);//找出每一个州的排在最前面的国家名称
/* 其中LIMIT用于SELECT语句中,可以强制返回指定的记录数.如果写作
LIMIT n(补全为 LIMIT 0,n),则表示显示前n条记录
*/
(3)找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent 洲份和population人口。
SELECT name,continent,population FROM world x
WHERE 25000000>=ALL(SELECT population FROM world y WHERE //子查询相当于找到每个州的所有population
y.continent=x.continent AND population>0
);
(4)有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。
SELECT name,continent FROM world x
WHERE x.population / 3 >= ALL(SELECT population FROM world y //子查询相当于找到每一个州的所有population,但是所找的population符合and后面的条件
WHERE y.continent = x.continent AND population >0 AND y.name != x.name
);