全部博文(930)
分类: LINUX
2009-08-27 16:28:39
1. 关于NULL的问题
为了测试NULL,你不能使用算术比较 操作符例如=、<或!=。
Select * from per where name is NULL;
Select * from per where name is not NULL;
2.随机取数问题(order by birth DESC, order by默认是升序的)
Select * from pet order by rand() limit 3;
Order by问题:
默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )关键字:
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name | birth |
+----------+------------+
| Puffball |
| Chirpy |
| Whistler |
| Slim |
| Claws |
| Fluffy |
| Fang |
| Bowser |
| Buffy |
+----------+------------+
可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:
mysql> SELECT name, species, birth FROM pet
-> ORDER BY species, birth DESC;
+----------+---------+------------+
| name | species | birth |
+----------+---------+------------+
| Chirpy | bird |
| Whistler | bird |
| Claws | cat |
| Fluffy | cat |
| Fang | dog |
| Bowser | dog |
| Buffy | dog |
| Puffball | hamster |
| Slim | snake |
+----------+---------+------------+
注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。
3.取数去重问题
Select distinct owner from pet;
4.日期函数使用
Select name, birth, CURDATE(), YEAR(CURDATE())-YEAR(birth) AS AGE from pet order by age;
5.MySQL模式匹配
5.1 SQL模式匹配允许你使用“_”匹配任何单个字符(是下划线而不是中划线),而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
Select * from pet where owner like ‘B%’;(以B开头)
Select * from pet where owner like ‘%B’;( 以B结尾)
Select * from pet where owner like ‘_B’;(任意一个字符+B)
5.2 like和 not like的正则是俺不熟悉的,下面看看熟悉的, REGEXP和NOT REGEXP
. 单个字符
[…] 括号内的任何字符
* 匹配零个or多个前面的字符
^,$这些都是俺熟悉的,一句话使用REGEXP和NOT REGEXP时就和俺平时使用的正则一个意思^_^
6.primary关键字问题
可以使用两个字段or多个字段结合起来作为关键字,也就是不能重复的…
mysql> CREATE TABLE shop (
-> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
-> dealer CHAR(20) DEFAULT '' NOT NULL,
-> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
-> PRIMARY KEY(article, dealer));
Insert into shop values(1,’A’,3.45);
Insert into shop values(1,’B’,3.45);这是ok得
Insert into shop values(1,’A’,3.45); 1-A就不ok了
7.单元素索引的范围访问
SELECT * FROM t1 WHERE key_col > 1 AND key_col < 10;
SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,20);
SELECT * FROM t1 WHERE key_col LIKE 'ab%' OR key_col BETWEEN 'bar' AND 'foo';