送给新手---MySQL基础教程(中)

接下来我们该学习如何从一个表中检索数据信息了.

select语句用来从表中检索信息, 其一般各式为:

select what_to select from which_table

where conditions_to_satisfy;

what_to_select指出你想要看到的内容,可以是列的一个表,或*表示所有的列.
which_table指出你想要从其检索数据的表, where子句是可选项,若选择,conditions_to_satisfy指定须满足的检索条件.

最简单的形式就是检索表中所有数据:

mysql> select * from pet;

+----------+---------+-----+------------+-------+
|  name    | species | sex | birth      | death |
+----------+---------+-----+------------+-------+
  Puffball | hamster | f   | 2000-07-28 | NULL  |
+----------+---------+-----+------------+-------+
1 row in set <0.00 sec>

mysql>

可假如你现在发现你的记录有误,经查证,Puffball是1998年出生,而非2000年,则我们就需要使用update记录来修正错误:

mysql> update pet set birth='1998-07-28' where name='Puffball';

Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql>

现在再次查看表中记录:

mysql> select * from pet;

+----------+---------+-----+------------+-------+
|  name    | species | sex | birth      | death |
+----------+---------+-----+------------+-------+
  Puffball | hamster | f   | 1998-07-28 | NULL  |
+----------+---------+-----+------------+-------+
1 row in set <0.00 sec>

mysql>

发现记录已经更改,这样根本就不需要重新装载数据库表了.

由上可知,检索整个表是很简单的,但有时候表中的记录有成千上万行,而且你需要查看的记录就那么几行几十行,在这种情况下就要对查询语句进行一些条件筛选了.
我们可以查找特定的行,我们要查找名叫 Harren的动物:

mysql> select * from pet where name='Harren';

我们可以在任何列上指定条件,如我们想指定在1998年以后出生的动物信息:

mysql> select * from pet where birth>'1998-01-01';

还有组合条件的查询,例如找出雌性的狗:

mysql> select * from pet where species='dog' and sex='f';

还有其他的一些查询方式:

mysql> select * from pet where species='snake' or species='bird';

mysql> select * from pet where (species='cat' and sex='m')
    -> or (species='dog' and sex='f');

再有我们也可以只选择特定的列来显示:

mysql> select name, birth from pet;

mysql>select species from pet;

注意,上面的查询只是简单地检索符合条件的记录列, species中有一些重复的信息它会出现多次,为使输出减少,我们可以使用distinct检索输出每个唯一的输出记录(即相同的信息只会输出一次):

mysql>select distinct species from pet;

也可以这样查询:

mysql> select name,species,birth from pet
    -> where species='dog' or species='cat';

再一个就是按顺序显示,使用排序语句 order by,例如按日期排序:

mysql> select name, birth from pet order by birth;

默认的排序为升序,要想以降序排列的话,就需要再后面加上 desc(降序)关键字:

mysql> select name,birth from pet order by birth desc;

注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序.

接下来是日期计算,要想确定每个动物的年龄,可以用当前日期和出生日期之差来显示:

mysql> select name,birth,curdate(),
    -> (year(curdate())-year(birth))
    -> - (right(curdate(),5)<right(birth,5)
    -> as age from pet order by name;

在此处, year()提取日期的年的部分, right()提取日期的MM-DD(日历年)部分的右端5个字符.比较MM-DD值的表达式结果一般为1或0,若curdate()的年比birth的年早,则年份减1,使用 as age,把 age作为表达式的列名更有意义. 最后按照名字对输出进行排序,使结果容易查看.

我们可使用类似的查询来确定已死亡动物的死亡年龄. 通过检查death值是否为NULL来确定是那些动物,对于非空值,则计算出death和birth值间的差:

mysql> select name,birth, death,
    -> (year(death)-year(birth))-(right(death,5)<right(birth,5))
    -> as age
    -> from pet where death is not NULL order by age;

想知道下个月有哪些动物过生日,怎么办呢(它们还过生日?呵呵,过个吧,都挺不容易的,给咱当了这么久的陪练,^_^)?这种计算,只需提取birth月份部分.在这里我们使用month()比较合适.

假定当前是8月,我们找9月过生日的动物(怎么说这话这么别扭啊,呵呵):

mysql> select name,birth from pet where month(birth)=9;

可要是在12月份,查询一月份的生日怎么办呢,这时我们就要用到了取模函数(mod),若当前月份是12,则"回滚"到值(0):

mysql> select name,birth from pet
    -> where month(birth)=mod(month(curdate()),12)+1;

因为mond返回的值是在0到11之间,所以我们必须在后面加一个1.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值