MYSQL学习笔记(1)

 1.数据导入:

你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,使用/N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符):

name

owner

species

sex

birth

death

Whistler

Gwen

bird

/N

1997-12-09

/N

要想将文本文件“pet.txt”装载到pet表中,使用这个命令:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

请注意如果用Windows中的编辑器(使用/r/n做为行的结束符)创建文件,应使用:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
    -> LINES TERMINATED BY '/r/n';

(在运行OS X的Apple机上,应使用行结束符'/r'。)

如果你愿意,你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。这对读入文件“pet.txt”的语句已经足够。

2.简单的查询:

2.1 排序:
可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:

mysql> SELECT name, species, birth FROM pet
    -> ORDER BY species, birth DESC;
注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。
2.2 日期计算
2.2.1要想确定每个宠物有多大,可以计算当前日期的年和出生日期之间的差。如果当前日期的日历年比出生日期早,则
减去一年。以下查询显示了每个宠物的出生日期、当前日期和年龄数值的年数字
   
   
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。整个表达式有些难懂,

使用alias (age)来使输出的列标记更有意义。

 

2.2.2可以使用一个类似的查询来确定已经死亡动物的死亡年龄。你通过检查death值是否是NULL来确定是哪些动物,

然后,对于那些非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;
查询使用death IS NOT NULL而非death != NULL,因为NULL是特殊的值,不能使用普通比较符来比较,以
后会给出解释。
2.2.3如果你想要知道哪个动物下个月过生日,怎么办?对于这类计算,年和天是无关的,你只需要提取birth列的月
份部分。MySQL提供几个日期部分的提取函数,例如YEAR( )、MONTH( )和DAYOFMONTH( )。在这里MONTH()
是适合的函数。
如果当前月份是12月,就有点复杂了。你不能只把1加到月份数(12)上并寻找在13月出生的动物,因为没有这
样的月份。相反,你应寻找在1月出生的动物(1月) 。
你甚至可以编写查询,不管当前月份是什么它都能工作。采用这种方法不必在查询中使用一个特定的月份,
DATE_ADD( )允许在一个给定的日期上加上时间间隔。如果在NOW( )值上加上一个月,然后用MONTH()提取月
份,结果产生生日所在月份: 
   
   
mysql >   SELECT  name, birth  FROM  pet
    
->   WHERE   MONTH (birth)  =   MONTH (DATE_ADD(CURDATE(),INTERVAL  1   MONTH ));


完成该任务的另一个方法是加1以得出当前月份的下一个月(在使用取模函数(MOD)后,如果月份当前值是12,则
“回滚”到值0):
mysql >   SELECT  name, birth  FROM  pet
    
->   WHERE   MONTH (birth)  =  MOD( MONTH (CURDATE()),  12 +   1 ;
注意, MONTH返回在 1和 12之间的一个数字,且 MOD(something,12)返回在 0和 11之间的一个数字,因此必须在 MOD( )以后加 1,否则我们将从 11月 ( 11 )跳到 1月 (1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值