//AND和OR可以混用,AND比OR具有更高的优先级,但尽量使用圆括号区分
//自动过滤重复的数据owner,关键字distinct
SELECT DISTINCT owner FROM pet;
//按照生日升序排列,关键字order by
SELECT name, birth FROM pet ORDER BY birth;
//降序排列,末尾加desc
SELECT name, birth FROM pet ORDER BY birth DESC;
//对种类升序,对生日降序,desc只对它前面的birth起作用
SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
//管理日期的函数,select curdate()/now(),
//计算宠物年龄,right(curdate(),5)<right(birth,5) 小于返回1 否则0
//RIGHT(**,5)提取日期的MM-DD (日历年)部分的最右面5个字符
//YEAR()提取年,同理MONTH()
SELECT name, birth, CURDATE(), ( YEAR(CURDATE())- YEAR(birth) ) - ( RIGHT(CURDATE(),5) < RIGHT(birth,5) ) AS age FROM pet;http://www.bianshayao.com
http://bianshayao.com
http://www.zhaoshashou.com
http://zhaoshashou.com
http://www.zhaoshashou.com
http://zhaoshashou.com
http://www.tanhuanyao.com
http://tanhuanyao.com
http://www.bianshayao.com
http://bianshayao.com
http://www.goumiyao.com
http://goumiyao.com
//mysql 中对于null的比较不能使用 !=<>等,应该使用 is null 或者is not null;
//SQL模式匹配允许使用"_"匹配任何单个字符,
//而"%"匹配任意数目字符(包括零字符)。
//在 MySQL中,SQL的模式默认是忽略大小写的。
//不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
//模式匹配,寻找以 b 开头的名字
SELECT * FROM pet WHERE name LIKE 'b%';
//要想找出以“fy”结尾的名字:
SELECT * FROM pet WHERE name LIKE '%fy';
//要想找出包含“w”的名字:
SELECT * FROM pet WHERE name LIKE '%w%';
//要想找出正好包含5个字符的名字,使用"_"模式字符:(用5个"下划线"表示)
SELECT * FROM pet WHERE name LIKE '_____';
//扩展正则表达式的一些字符是:
· '.'匹配任何单个的字符。
· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。
· 为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
· "*" 匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,
· “.*”匹配任何数量的任何字符。
如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:
//使用正则表达式查询---------------------------//
//查询以b开头的(不区分大小写)
SELECT * FROM pet WHERE name REGEXP '^b';
//只查以小b开头的
SELECT * FROM pet WHERE name REGEXP BINARY '^b';
//查询以fy结尾的
SELECT * FROM pet WHERE name REGEXP 'fy$';
//为了找出包含一个“w”的名字,使用以下查询:
SELECT * FROM pet WHERE name REGEXP 'w';
//为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:
SELECT * FROM pet WHERE name REGEXP '^.....$';
//你也可以使用“{n}”“重复n次”操作符重写前面的查询:
SELECT * FROM pet WHERE name REGEXP '^.{5}$';
//计数行count(*)
SELECT COUNT(*) FROM pet;
//查询每个owner有几个pet,(必须有group by)
SELECT owner, COUNT(*) FROM pet GROUP BY owner;
//查询那些产仔的宠物的年龄,从pet表和event表中读取
SELECT pet.name,(YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age, remark
FROM pet, event WHERE pet.name = event.name AND event.type = 'litter';
//可以针对同一表 进行联结操作,如选出 pet表中能进行配对的动物的名字(species相同,sex不同)
SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species FROM pet AS p1, pet AS p2
WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
//批处理模式下使用mysql...从略
//拥有某个列的最大值的行
//任务:找出最贵物品的编号、销售商和价格。
SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
//另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:
SELECT article, dealer, priceFROM shop ORDER BY price DESC LIMIT 1;
//选出每种商品的最高价格
SELECT article, MAX(price) AS price FROM shop GROUP BY article
//选出每种商品价格最高的dealer
SELECT * FROM shop s1 WHERE s1.price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);