Day6(2010-08-28)(函数、外部加载和导出-批处理)

MySQL中的函数与C和Perl等其他编程语言中的函数相似。函数接受零个或者多个参数,并返回某个值。 例如SQRT(16)返回的结果为4。在MySQL的SELECT语句中,函数可以用于两种方式: 测试表单(events): +-------+------------+ | name | date | +-------+------------+ | call | 2010-08-28 | | learn | 2010-08-27 | +-------+------------+ 1作为被检索的值 这种形式是将某函数置于被检索的某一列位置上。该函数对所选择的每一行进行求职。其返回值要作为 结果集的一部分,就如同是数据库中的一列。 例如: SELECT name, FROM_UnixTIME(date) FROM events WHERE time > 90534323; 这个查询选择了所有比给定时间更近的的各个事件名,并将事件发生的日期格式化为可读形式。FromUnixTIME() 函数将标准的Unix时间值转换为可读的形式。 #LENGTH()函数返回指定字符串的字符长度 SELECT name,date,LENGTH(name) FROM events WHERE date = '2010-08-28'; 这个查询查询日期为2010-08-28的事件名、日期以及名字的长度: +------+------------+--------------+ | name | date | LENGTH(name) | +------+------------+--------------+ | call | 2010-08-28 | 4 | +------+------------+--------------+ 2、作为WHERE子句的一部分: SELECT name,date FROM events WHERE LENGTH(name)>4; 这条查询语句选取name长度大于4个字符的事件名和日期: +-------+------------+ | name | date | +-------+------------+ | learn | 2010-08-27 | +-------+------------+ 日期函数: 这是MySQL中最常用的函数,MySQl提供了很多关于日期的函数,例如计算当期日期到某个日期的时间: SELECT TO_DAYS(NOW()) - TO_DAYS('2010-08-27'); 结果为1天(当天为2010年8月28日): +----------------------------------------+ | TO_DAYS(NOW()) - TO_DAYS('2010-08-27') | +----------------------------------------+ | 1 | +----------------------------------------+ NOW()函数返回当期的DATETIME,TO_DAYS函数则返回由DATE或者DATETIME表示的日期。MySQL可以使用 DATE_FORMAT函数将日期格式自定义。它接受DATE或DATETIME以及一个格式字符串作为参数,此字符将 表示如何格式化日期: SELECT DATE_FORMAT('2008-08-08','%W,%M %D,%Y'); 这个语句将日期转换为'星期,月 日期, 年'的格式,结果为: +-----------------------------------------+ | DATE_FORMAT('2008-08-08','%W,%M %D,%Y') | +-----------------------------------------+ | Friday,August 8th,2008 | +-----------------------------------------+ 字符串函数: 上面的LENGTH()函数就是求字符串长度的函数。 SOUNDEX()函数给出了一个单词的发音形式。这可以用来比较两个字符串是否有拼写错误。不过SOUNDEX对同音异义 词不能分辨: SELECT SOUNDEX('too');和SELECT SOUNDEX('two');的结果是一样的: +----------------+ | SOUNDEX('too') | +----------------+ | T000 | +----------------+ 外连接 除了简单的内连接功能外,MySQL支持左外连接(left outer join,简称为外连接)。它使用关键字LEFT JOIN来指定。 这种连接与内连接相似,只不过在第一列。 对于book和author表单: book: +----+-----------------+--------+-------+ | ID | title | author | pages | +----+-----------------+--------+-------+ | 1 | The Green Mile | 4 | 894 | | 2 | Guards, Guards! | 2 | 302 | | 3 | Imazdi | 3 | 354 | | 4 | Gold | 1 | 405 | | 5 | Howling Mad | 3 | 294 | | 6 | Freedom | NULL | 230 | +----+-----------------+--------+-------+ author: +----+-----------------+----------+ | ID | name | national | +----+-----------------+----------+ | 1 | Isaac Asimov | US | | 2 | Terry Pratchett | UK | | 3 | Peter David | US | | 4 | Stephen King | US | | 5 | Neil Gaiman | UK | +----+-----------------+----------+ 使用下面的语句将书名和作者的名字关联起来: SELECT book.title,author.name FROM author LEFT JOIN book ON book.author = author.ID; 结果为: +-----------------+-----------------+ | title | name | +-----------------+-----------------+ | Gold | Isaac Asimov | | Guards, Guards! | Terry Pratchett | | Imazdi | Peter David | | Howling Mad | Peter David | | The Green Mile | Stephen King | | NULL | Neil Gaiman | +-----------------+-----------------+ 这与之前的连接不同: SELECT book.title,author.name FROM author,book WHERE book.author = author.ID; 结果: +-----------------+-----------------+ | title | name | +-----------------+-----------------+ | Gold | Isaac Asimov | | Guards, Guards! | Terry Pratchett | | Imazdi | Peter David | | Howling Mad | Peter David | | The Green Mile | Stephen King | +-----------------+-----------------+ 首先关键字不再是WHERE,而是ON,结果中的差别在于外连接包括了像Neil Gaiman这样的作者。他们不是数据库 所列图书的任何作者。 而自然外连接则扩展了连接的方式,自然外连接将联合两个表中具有相同列名,相同类型和相同值的行: SELECT my_prod.name FROM my_prod NATURAL LEFT JOIN their_prod; 这个自然外连接将列出在my_prod和their_prod表中具有相同项的所有产品名称。 联合: MySQL 4.0以后的特性之一是对SQL联合的支持。联合(Union)只是一个将多个选择结果组合成一个结果集的工具。 SELECT First_name,last_name FROM Author Union SELECT fname,lname FROM Editor; 这个查询将提供数据库中所有作者和编辑的列表。例如: SELECT name FROM Author Union SELECT title FROM book; 结果将作者名字和书名联合到一列中去了: +-----------------+ | name | +-----------------+ | Isaac Asimov | | Terry Pratchett | | Peter David | | Stephen King | | Neil Gaiman | | The Green Mile | | Guards, Guards! | | Imazdi | | Gold | | Howling Mad | | Freedom | +-----------------+ 批处理 批量装载是一次向MySQL装载全部数据或从MySQL取出全部数据的操作。MySQL支持两种类型的装载。 命令行装载: mysql -h somehost -u uid -p < filename; 可以使用命令行将SQL命令传送到mysql命令行的实用程序中。 LOAD命令 LOAD命令允许从只包含数据(没有SQL命令)的文件中装载数据。例如,对于你所收藏的所有图书。如果有一个 包含这些书名的文件。其中每本书占一行,书名和作者通过制表符隔开,就可以使用下面的命令将这些数据装载的书籍表中: LOAD DATA LOCAL INFILE 'books.dat' INTO TABLE bookInfo; 创建bookInfo表: CREATE TABLE bookInfo(title VARCHAR(100) NOT NULL PRIMARY KEY, author VARCHAR(50) NOT NULL); 撰写一个测试文件(boos.dat,两行): The Green Miles A.S.Mov Great Victory Save.M.K 然后执行上面的LOAD语句,结果: +-----------------+----------+ | title | author | +-----------------+----------+ | Great Victory | Save.M.K | | he Green Miles | A.S.Mov +-----------------+----------+ (不知道为啥The显示不全,使用SELECT title FROM bookInfo;可以显示出来?) 也可以改变LOAD命令的分隔符: LOAD DATA LOCAL INFILE 'books.dat' INTO TABLE bookInfo FIELDS TERMINATED BY ','; 这条语句表示分隔符为逗号。 从MySQL语句中取出数据复制到文件(这个文件不能存在): SELECT * INTO OUTFILE 'books.dat' FIELDS TERMINATED BY ',' FROM bookInfo; 这个语句把bookInfo中所有内容复制到books.dat中,分隔符为逗号。还可以添加更复杂的形式,例如为字段加上引号: SELECT * INTO OUTFILE 'books.dat' FIELDS ENCLOSED BY '"' TERMINATED BY ',' FROM bookInfo; 也可以选择将某些字符串字段(CHAR,VARCHAR等等)用引号封装起来,这需要使用OPTINALLY关键字: SELECT * INTO OUTFILE 'books.dat' FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ',' FROM bookInfo;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值