mysql> USE test
很有意思,切换数据库即使键入;也能成功执行
VARCHAR适合于name、owner和species列,因为这些列值的长度是可以变化的,这些列的长度不必都相同,而且不必是20。你可以选从1到65535选择一个最合理的值作为列属性值的长度。如果选择得不合适,MySQL提供一个ALTER TABLE语句来修改表格(后来证明你需要一个更长的字段)。
动物性别可以由多个名称表示,例如,"m"和"f",或"male"和"female"。使用单字符"m"和"f"是最简单的方法。
很显然,birth和death列应选用DATE(日期)数据类型。
mysql> DESCRIBE pet; #查看表结构
mysql> LOAD DATA INFILE '/path/pet.txt' INTO TABLE pet;
实际实验中,要去掉课程中的LOCAL,否则会提示版本不支持。
mysql> INSERT INTO pet
-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
插入单条数据
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
修改数据
字符串比较时通常对大小写不敏感,因此你可以将名字指定为"bowser"、"BOWSER"等,查询结果相同。
AND和OR可以混用,但AND比OR具有更高的优先级。如果你使用两个操作符,最好是使用圆括号指明如何按条件分组:
由于字符串类型的数据对大小写并不敏感。这意味着,对于大小写不同其他都一样的列,排序后的结果都不会更改。这种情况下,可以使用BINARY强制执行区分大小写的排序功能,如:ORDER BY BINARY col_name。
默认排序是升序,也就是最小的值排在第一。要想以降序排序,在你正在排序的列名旁边增加DESC(降序 )关键字:
可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:
mysql> SELECT name, species, birth FROM pet
-> ORDER BY species, birth DESC;
注意DESC关键字仅适用于在它前面的列名(birth);不影响pecies列的排序顺序。
计算年纪:
mysql> SELECT name, birth, CURDATE(),
-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
-> FROM pet;
比较这两个查询语句的结果
mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5)
-> FROM pet;
执行结果相同。
mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)
-> AS age
-> FROM pet WHERE death IS NOT NULL ORDER BY age;
查询使用death IS NOT NULL而非death != NULL,因为NULL是特殊的值,不能使用普通比较符来比较。
在GROUP BY中,两个NULL值被视为相同等价的。
执行ORDER BY语句排序时,如果运行ORDER BY ... ASC,则NULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在最后面。
REGEXP扩展的正则表达式:
‘.’匹配任何单个的字符。
字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
“ ”匹配零个或多个在它前面的字符。例如,“x”匹配任何数量的“x”字符,“[0-9]”匹配任何数量的数字,而“.”匹配任何数量的任何字符。
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
注意,使用GROUP BY对每个owner的所有记录分组,没有它,你会得到错误消息:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
可按两列分组显示
为了在你的宠物之中选择繁殖中的配偶,你可以用pet表联结自身来进行相同种类的雄雌配对:
mysql> 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';