1、非ASCII码:SELECT * FROM nobel WHERE SOUNDEX(winner)=SOUNDEX('PETER GRUNBERG'); (注:SQLZOO的答案,例为“找到nobel表中获奖者名字是PETER GRÜNBERG的全部信息。”)SOUNDEX考虑了类似于发音字符和字节,能够对文本发音进行比较而不是字母比较。
2、BETWEEN …… AND …… 包括边界数据。
3、当匹配的字符串中有“'”单引号时,只需再在前面加一个“'”就可以了。例:查询获奖者为“EUGENE O'NEILL”的所有细节:SELECT * FROM nobel WHERE winner='EUGENE O''NEILL';
4、concat('…',name)用于拼接
5、ROUND(除法过程,2) 注:2代表两位小数。-3代表四舍五入至千位,即精确度位1000.
6、case语句:计算条件并返回多个可能的结果。例:SELECT name, CASE WHEN continent='A' THEN 'B' ELSE continent END AS newcontinent FROM world WHERE name='C'; 即CASE WHEN 条件 THEN 结果1 ELSE 结果2 END AS 重命名 FROM 表 WHERE 条件。
7、判断条件也可以作为ORDER BY的一种排序依据。例:SELECT * FROM nobel WHERE yr=1984 ORDER BY subject IN ('Physics','Chemistry'),subject,winner; 加粗部分的语句代表代表一个排序条件,因为IN会返回0(false)或者1(true),此时返回0的排在前面,返回1的排在后面,作为首要排序关键字,subject是次要,winner再次。总体语句含义为“找到1984年获奖的所有信息,按照subject和winner的顺序排序,同时,获得Physics和Chemistry奖项的要排在最后”。
8、如果某个int型数据有可能为NULL,为了排除这种情况,可以简单的设置条件>0即可。
9、SQLZOO中例:在每一个州中找出最大面积的国家,列出洲份continent,国家名字名及面积区。(有些国家的记录中,AREA是NULL,没有填入资料的。)SELECT continent,name,area FROM world w1 WHERE area>=ALL(SELECT area FROM world w2 WHERE w2.area>0 AND w1.continent=w2.continent); 注:是大于等于号不是大于号!!!否则找不到答案。
10、返回数据的条数限制 LIMIT n。注:也可以限制子查询的返回条数。
11、反向思考。例:查找所有国家/地区人口<= 25000000的大陆。然后查找与这些大洲相关联的国家/地区的名称。 显示名称,大陆和人口。SELECT name,continent,population FROM world WHERE NOT continent IN (SELECT DISTINCT continent FROM world WHERE population>25000000);
12、WHERE和HAVING的区别:HAVING的筛选条件是以GROUP BY之后的,就是成组之后的筛选使用HAVING语句。即WHERE不能使用聚合函数,但HAVING和SELECT可以。
13、可以COUNT(*)
14、UNION得到的记录如果有多条也只显示一次,UNION ALL能够显示全部内容(可能不止一次)。
15、JOIN中使用USING子句可以合并连接字段,当连接表的列采用了相同的命名样式时,可以代替ON。MYSQL语句:a JOIN b USING(列名)。
16、自然连接 a NATURAL JOIN b,能够自动识别和比较相同的列和值,并且合并,只显示一次,类似于USING子句。
17、笛卡尔积:a NATURA join b或者a NATURE JOIN b或者a CROSS JOIN b或者a,b。
18、NULL: IS NULL。用法类似于“=”。
19、COALESCE函数:返回第一个不是NULL的值,如果都为NULL,则返回NULL。可以用来替换列中空元素。如:想要返回mobile,如果是空则返回11111,解:SELECT COALESCE(mobile, '11111') FROM table;
20、转小写字母LOWER(列);转大写UPPER()
21、转义字符,如 列 LIKE '字符串' (ESCAPE '\')
网友评论