版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录3.1. 连接与断开服务器23.2. 输入查询33.3. 创建并使用数据库63.3.1. 创建并选择数据库83.3.2. 创建表83.3.3. 将数据装入表中103.3.4. 从表检索信息113.4. 获得数据库和表的信息293.5. 在批处理模式下使用mysql303.6. 常用查询的例子323.6.1. 列的最大值333.6.2. 拥有某个列的最大值的行333.6.3. 列的最大值:按组343.6.4. 拥有某个字段的组间最大值的行343.6.5.
2、 使用用户变量343.6.6. 使用外键353.6.7. 根据两个键搜索373.6.8. 根据天计算访问量383.6.9. 使用AUTO_INCREMENT383.7. 孪生项目的查询413.7.1. 查找所有未分发的孪生项413.7.2. 显示孪生对状态的表443.8. 与Apache一起使用MySQL45本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程。mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行
3、查询并察看结果。mysql可以用于批模式:你预先把查询放在一个文件中,然后告诉mysql执行文件的内容。本章将介绍使用mysql的两个方法。要想查看由mysql提供的选择项目表,可以用-help选项来调用:shell> mysql -help本章假定mysql已经被安装在你的机器上,并且有一个MySQL服务器可以连接。否则,请联络MySQL管理员。(如果你是管理员,则需要查阅本手册的其它章节,例如第5章:数据库管理。)本章描述建立和使用一个数据库的全过程。如果你仅仅对访问一个已经存在的数据库感兴趣,可以跳过描述怎样创建数据库及它所包含的表的章节。由于本章是一个教程,省略了许多细节。关于这
4、里所涉及的主题的详细信息,请查阅本手册的相关章节。3.1. 连接与断开服务器为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个 密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管理员以找出进行连接所使用的参数 (即,连接的主机、用户名和使用的密码)。知道正确的参数后,可以按照以下方式进行连接:shell> mysql -h host -u user -pEnter password: *host和user分别代表MySQL服务器运行的主机名和MySQL账户用户名。设置时替换为正确的值。* 代表你的密码;当mysql显示
5、Enter password:提示时输入它。如果有效,你应该看见mysql>提示符后的一些介绍信息:shell> mysql -h host -u user -pEnter password: *Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 25338 to server version Type 'help;' or 'h' for help. Type 'c' to clear the bu
6、ffer. mysql>mysql> 提示符告诉你mysql准备为你输入命令。一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:shell> mysql成功地连接后,可以在mysql>提示下输入QUIT (或q)随时退出:mysql> QUITBye在Unix中,也可以按control-D键断开服务器。在下列章节的大多数例子都假设你连接到了服务器。由mysql>提示指明。3.2. 输入查询确保你连接上了服务器,如在先前的章节讨论的。连接上
7、服务器并布代表选择了任何数据库,但这样就可以了。知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。本节描述输入命令的基本原则,使用几个查询,你能尝试了解mysql是如何工作的。这是一个简单的命令,要求服务器告诉它的版本号和当前日期。在mysql>提示输入如下命令并按回车键:mysql> SELECT VERSION(), CURRENT_DATE;+-+-+| VERSION() | CURRENT_DATE |+-+-+| 5.1.2-alpha-log | 2005-10
8、-11 |+-+-+1 row in set (0.01 sec)mysql>这询问说明mysql的几个方面:· 一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。早先提到的QUIT是一个例子。后面我们将看到其它的例子。)· 当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql>显示它准备好接受其
9、它命令。· mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。· mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(不是 CPU 或机器时间),并且因为他们受到诸如服务器负
10、载和网络延时的影响,因此这些值是不精确的。(为了简洁,在本章其它例子中不再显示“集合中的行”。)能够以大小写输入关键词。下列查询是等价的:mysql> SELECT VERSION(), CURRENT_DATE;mysql> select version(), current_date;mysql> SeLeCt vErSiOn(), current_DATE;这是另外一个查询,它说明你能将mysql用作一个简单的计算器:mysql> SELECT SIN(PI()/4), (4+1)*5;+-+-+| SIN(PI()/4)
11、60; | (4+1)*5 |+-+-+-+-+1 row in set (0.02 sec)至此显示的命令是相当短的单行语句。你可以在一行上输入多条语句,只需要以一个分号间隔开各语句:mysql> SELECT VERSION(); SELECT NOW();+-+| VERSION() |+-+| 5.1.2-alpha-log |+-+1 row in set (0.00 sec) +-+| NOW()
12、160; |+-+| 2005-10-11 15:15:00 |+-+1 row in set (0.00 sec)不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)这里是一个简单的多行语句的例子:mysql> SELECT -> USER() -> ,
13、0; -> CURRENT_DATE;+-+-+| USER() | CURRENT_DATE |+-+-+| jonlocalhost | 2005-10-11 |+-+-+在这个例子中,在输入多行查询的第一行后,要注意提示符如何从mysql>变为->,这正是mysql如何指出它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果使用该反馈,将总是知道mysql正在等待什么。如果你决定不想执行正在输入过程中的一个命令,输入c取消它:m
14、ysql> SELECT -> USER() -> cmysql>这里也要注意提示符,在你输入c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态:提示符含义mysql>准备好接受新命令。->等待多行命令的下一行。'>等待下一行,等待以单引号(“'”)开始的字符串的结束。">等待下一行,等待以双引号(“"”)开始的字符串的结束。>等待下一行,
15、等待以反斜点()开始的识别符的结束。/*>等待下一行,等待以/*开始的注释的结束。当你打算在一个单行上发出一个命令时,通常会“偶然”出现多行语句,但是没有终止分号。在这种情况中,mysql等待进一步输入:mysql> SELECT USER() ->如果出现这种情况(你认为输完了语句,但是只有一个->提示符响应),很可能mysql正在等待分号。如果你没有注意到提示符的提示,在意识到你需要做什么之前,你可能会呆坐一会儿。输入一个分号完成语句,mysql将执行:mysql> SELECT USER()
16、0; -> ;+-+| USER() |+-+| jonlocalhost |+-+在字符串收集期间将出现 '> 和 "> 提示符(提示MySQL正等待字符串的结束)。在MySQL中,可以写由'或"字符括起来的字符串 (例如,'hello'或"goodbye"),并且mysql允许输入跨越多行的字符串。当看到一个 '> 或 "> 提示符时,这意味着已经输入了包含以'或"括号字
17、符开始的字符串的一行,但是还没有输入终止字符串的匹配引号。这显示你粗心地省掉了一个引号字符。例如:mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '>如果你输入SELECT语句,然后按Enter(回车)键并等待结果,什么都没有出现。不要惊讶,“为什么该查询这么长呢?”,注意">提示符提供的线索。它告诉你mysql期望见到一个未终止字符串的余下部分。(你看见语句中的错误吗?字符串"Smith丢掉了第二个引号。)走到这一步,
18、你该做什么?最简单的是取消命令。然而,在这种情况下,你不能只是输入c,因为mysql作为它正在收集的字符串的一部分来解释它!相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入c:mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; '> 'cmysql>提示符回到mysql>,显示mysql准备好接受一个新命令了。> 提示符类似于 '> 和"> 提示符,但表示你已经开始但没有
19、结束以> 开始的识别符。知道'>和">提示符的含义很重要,因为如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略-包括包含QUIT的行!这可能令人相当困惑,特别是如果取消当前命令前还不知道你需要提供终止引号。3.3. 创建并使用数据库3.3.1. 创建并选择数据库3.3.2. 创建表3.3.3. 将数据装入表中3.3.4. 从表检索信息知道怎样输入命令,便可以访问数据库了。假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检
20、索数据来回答关于动物不同种类的问题。本节显示如何做到所有这些事情:· 创建数据库· 创建数据库表· 装载数据到数据库表· 以各种方法从表中检索数据·
21、60; 使用多个表动物园数据库很简单(特意的),但是不难把它想象成可能用到类似数据库的真实世界情况。例如,农夫可以使用这样的一个数据库来追踪家畜,或者兽医可以用它跟踪病畜记录。从MySQL网址上可以获得后面章节中将用到的含有部分查询和样例数据的动物园分发。有tar压缩格式 ()和Zip压缩格式 ()。使用SHOW语句找出服务器上当前存在什么数据库:mysql> SHOW DATABASES;+-+| Database |+-+| mysql | test
22、160; | tmp |+-+可能你的机器上的数据库列表是不同的,但是很可能有mysql和test数据库。mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。请注意如果没有SHOW DATABASES权限,则不能看见所有数据库。参见13.5.1.3节,“GRANT和REVOKE语法”。如果test数据库存在,尝试访问它:mysql> USE testDatabase changed注意,USE,类似QUIT,不需要一个分号。(如果你喜欢,你可以用一个分号终止这样的语句;这无碍)USE
23、语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。你可列在后面的例子中使用test数据库(如果你能访问它),但是你在该数据库创建的任何东西可以被访问它的其它人删除,因此,你应该询问MySQL管理员许可你使用自己的一个数据库。假定你想要调用你的menagerie,管理员需要执行这样一条命令:mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name''your_client_host'这里your_mysql_name是分配给你的MySQL用户名,your_client_host是所连接的服务器所在的主机
24、。3.3.1. 创建并选择数据库如果管理员在设置权限时为你创建了数据库,你可以开始使用它。否则,你需要自己创建数据库:mysql> CREATE DATABASE menagerie;在Unix下,数据库名称是区分大小写的(不像SQL关键字),因此你必须总是以menagerie访问数据库,而不能用Menagerie、MENAGERIE或其它一些变量。对表名也是这样的。(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来引用数据库和表。但是,由于多种原因,作为最好的惯例,一定要使用与数据库创建时的同样的大小写。)创建数据库并不表示选定并使用它,你必须
25、明确地操作。为了使menagerie成为当前的数据库,使用这个命令:mysql> USE menagerieDatabase changed数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。你可以根据上面的例子执行一个USE语句来实现。还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。例如:shell> mysql -h host -u user -p menagerieEnter password: *注意,刚才显示的命令行中的menagerie不是你的 密码。如果你想要在命令行上在-p选项后提供 密码,则不能插入空格
26、(例如,如-pmypassword,不是-p mypassword)。但是,不建议在命令行输入密码,因为这样会暴露 密码,能被在机器上登录的其它用户窥探到。3.3.2. 创建表创建数据库是很容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你的:mysql> SHOW TABLES;Empty set (0.00 sec)较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。你将需要一个包含你每个宠物的记录的表。它可称为pet表,并且它应该包含,最少,每个动物的名字。因为名字本身不是很有趣,表应该包含另外的信息。例如,如果在你豢养
27、宠物的家庭有超过一个人,你可能想要列出每个动物的主人。你可能也想要记录例如种类和性别的一些基本的描述信息。年龄呢?那可能有趣,但是存储到一个数据库中不是一件好事情。年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。相反, 存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不困难。存储出生日期而非年龄还有其它优点:· 你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。(如果你认为这类
28、查询有点蠢,注意,这与从商务数据库来识别出不久要发给生日祝贺的客户是同一个问题,因为计算机帮助私人联络。)· 你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。你可能想到pet表中其它有用的其它类型信息,但是到目前为止这些已经足够了:名字、主人、种类,性别、出生和死亡日期。使用一个CREATE TABLE语句指定你的数据库表的布局:mysql> CREATE TABLE pet (name VARCHAR(20), o
29、wner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);VARCHAR适合于name、owner和species列,因为列值是变长的。这些列的长度不必都相同,而且不必是20。你可以挑选从1到65535的任何长度,从中选择一个最合理的值。(如果选择得不合适,后来证明你需要一个更长的字段,MySQL提供一个ALTER TABLE语句。)可以用多种类型的值来表示动物记录中的性别,例如,"m"和"f",或"ma
30、le"和"female"。使用单字符"m"和"f"是最简单的方法。很显然,birth和death列应选用DATE数据类。创建了数据库表后,SHOW TABLES应该产生一些输出:mysql> SHOW TABLES;+-+| Tables in menagerie |+-+| pet |+-+为了验证你的表是按你期望的方式创建,使
31、用一个DESCRIBE语句:mysql> DESCRIBE pet;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| name | varchar(20) | YES | | NULL |
32、60; | owner | varchar(20) | YES | | NULL | | species | varchar(20) | YES | | NULL | | sex | char
33、(1) | YES | | NULL | | birth | date | YES | | NULL | |
34、 death | date | YES | | NULL | |+-+-+-+-+-+-+你可以随时使用DESCRIBE,例如,如果你忘记表中的列的名称或类型时。3.3.3. 将数据装入表中创建表后,需要填入内容。通过LOAD DATA和INSERT语句可以完成该任务。假定你的宠物纪录描述如下。(假定在MySQL
35、中期望的日期格式是YYYY-MM-DD;这可能与你习惯的不同。)nameownerspeciessexbirthdeathFluffyHaroldcatf1993-02-04 ClawsGwencatm1994-03-17 BuffyHarolddogf1989-05-13 FangBennydogm1990-08-27 BowserDianedogm1979-08-311995-07-29ChirpyGwenbirdf1998-09-11 WhistlerGwenbird 1997-12-09 SlimBennysnake
36、m1996-04-29 因为你是从一个空表开始的,填充它的一个简易方法是创建一个文本文件,每个动物各一行,然后用一个语句将文件的内容装载到表中。你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,使用N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符):nameownerspeciessexbirthdeathWhistlerGwenbirdN1
37、997-12-09N要想将文本文件“pet.txt”装载到pet表中,使用这个命令:mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;请注意如果用Windows中的编辑器(使用rn做为行的结束符)创建文件,应使用:mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet -> LINES TERMINATED BY 'rn'(在运行OS X的Apple机上,应
38、使用行结束符'r'。)如果你愿意,你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。这对读入文件“pet.txt”的语句已经足够。如果该语句失败,可能是你安装的MySQL不与使用默认值的本地文件兼容。关于如何更改请参见5.6.4节,“LOAD DATA LOCAL安全问题”。如果想要一次增加一个新记录,可以使用INSERT语句。最简单的形式是,提供每一列的值,其顺序与CREATE TABLE语句中列的顺序相同。假定Diane把一只新仓鼠命名为Puffball,你可以使用下面的INSERT语句添加一条新记录:mysql> INSE
39、RT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插入NULL代表不存在的值。不能使用LOAD DATA中所示的的N。从这个例子,你应该能看到涉及很多的键入用多个INSERT语句而非单个LOAD DATA语句装载你的初始记录。3.3.4. 从表检索信息3.3.4.1. 选择所有数据3.3
40、.4.2. 选择特殊行3.3.4.3. 选择特殊列3.3.4.4. 分类行3.3.4.5. 日期计算3.3.4.6. NULL值操作3.3.4.7. 模式匹配3.3.4.8. 计数行3.3.4.9. 使用1个以上的表 SELECT语句用来从数据表中检索信息。语句的一般格式是:SELECT what_to_selectFROM which_tableWHERE conditions_to_satisfy;what_to_select指出你想要看到的内容,可以是列的一个表,或*表示“所有的列”。which_table指出你想要从其检索数据的表。WHERE子句是可选项,如果选择该项,con
41、ditions_to_satisfy指定行必须满足的检索条件。3.3.4.1. 选择所有数据SELECT最简单的形式是从一个表中检索所有记录:mysql> SELECT * FROM pet;+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Fluffy | Har
42、old | cat | f | 1993-02-04 | NULL | Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold
43、| dog | f | 1989-05-13 | NULL | Fang | Benny | dog | m | 1990-08-27 | NULL | Bowser | Diane | do
44、g | m | 1979-08-31 | 1995-07-29 | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL &
45、#160; | Slim | Benny | snake | m | 1996-04-29 | NULL | Puffball | Diane | hamster | f | 1999-03-30 | NULL |+-+-+-+-
46、+-+-+如果你想要浏览整个表,可以使用这种形式的SELECT,例如,刚刚装载了初始数据集以后。也有可能你想到Bowser的生日看起来不很对。查阅你原来的家谱,你发现正确的出生年是1989,而不是1979。至少有两种修正方法:· 编辑文件“pet.txt”改正错误,然后使用DELETE和LOAD DATA清空并重新装载表:· &
47、#160; mysql> DELETE FROM pet;· mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;然而, 如果这样操做,必须重新输入Puffball记录。· 用一个UPDATE语句仅修正错误
48、记录:· mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser'UPDATE只更改有问题的记录,不需要重新装载数据库表。3.3.4.2. 选择特殊行如上所示,检索整个表是容易的。只需要从SELECT语句中删掉WHERE子句。但是一般你不想看到整个表,特别地当表变得很大时。相反,你通常对回
49、答一个具体的问题更感兴趣,在这种情况下在你想要的信息上进行一些限制。让我们看一些他们回答的有关你宠物的问题的选择查询。可以从表中只选择特定的行。例如,如果你想要验证你对Bowser的生日所做的更改,按下述方法选择Bowser的记录:mysql> SELECT * FROM pet WHERE name = 'Bowser'+-+-+-+-+-+-+| name | owner | species | sex | birth | death
50、160; |+-+-+-+-+-+-+| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |+-+-+-+-+-+-+输出证实正确的年份记录为1989,而不是1979。字符串比较时通常对大小些不敏感,因此你可以将名字指定为"bowser"、"BOWSER"等,查询结果相同。你可以在任何列上指定条件,不只仅仅是name。例如,如果你想要知道哪个动物在1998以后出生的,测试birth列:mysql> S
51、ELECT * FROM pet WHERE birth > '1998-1-1'+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Chirpy | Gwen | bird | f | 1998-09-11 | NULL | Puffb
52、all | Diane | hamster | f | 1999-03-30 | NULL |+-+-+-+-+-+-+可以组合条件,例如,找出雌性的狗:mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f'+-+-+-+-+-+-+| name | owner | species | sex | birth | death |+-+-+-+-+-+
53、-+| Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+上面的查询使用AND逻辑操作符,也有一个OR操作符:mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird'+-+-+-+-+-+-+| name | owner | species | sex |
54、birth | death |+-+-+-+-+-+-+| Chirpy | Gwen | bird | f | 1998-09-11 | NULL | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | Slim | Benny | snake &
55、#160; | m | 1996-04-29 | NULL |+-+-+-+-+-+-+AND和OR可以混用,但AND比OR具有更高的优先级。如果你使用两个操作符,使用圆括号指明如何对条件进行分组是一个好主意:mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm') -> OR (species = 'dog' AND sex = 'f');+-+-+-+-+-+-+|
56、 name | owner | species | sex | birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NUL
57、L |+-+-+-+-+-+-+3.3.4.3. 选择特殊列如果你不想看到表中的所有行,就命名你感兴趣的列,用逗号分开。例如,如果你想要知道你的动物什么时候出生的,选择name和birth列:mysql> SELECT name, birth FROM pet;+-+-+| name | birth |+-+-+| Fluffy | 1993-02-04 | Claws | 1994-03-17 |
58、Buffy | 1989-05-13 | Fang | 1990-08-27 | Bowser | 1989-08-31 | Chirpy | 1998-09-11 | Whistler | 1997-12-09 | Slim | 1996-04-29 | Puffball | 1999-03-30 |+-+-+找出谁拥有宠物,使用这个查询:mysql> SELECT owner FROM pet;+-+| o
59、wner |+-+| Harold | Gwen | Harold | Benny | Diane | Gwen | Gwen | Benny | Diane |+-+请注意该查询只是简单地检索每个记录的owner列,并且他们中的一些出现多次。为了使输出减到最少,增加关键字DISTINCT检索出每个唯一的输出记录:mysql> SELECT DISTINCT owner FROM pet;+-+| owner |+-+| Benny
60、| Diane | Gwen | Harold |+-+可以使用一个WHERE子句结合行选择与列选择。例如,要想查询狗和猫的出生日期,使用这个查询:mysql> SELECT name, species, birth FROM pet -> WHERE species = 'dog' OR species = 'cat'+-+-+-+| name | species | birth |+-+-+-
61、+| Fluffy | cat | 1993-02-04 | Claws | cat | 1994-03-17 | Buffy | dog | 1989-05-13 | Fang | dog | 1990-08-27 | Bowser | dog | 1989-08-31 |+-+-+-+3.3.4.4.
62、60;分类行你可能已经注意到前面的例子中结果行没有以特定的顺序显示。然而,当行按某种方式排序时,检查查询输出通常更容易。为了排序结果,使用ORDER BY子句。这里是动物生日,按日期排序:mysql> SELECT name, birth FROM pet ORDER BY birth;+-+-+| name | birth |+-+-+| Buffy | 1989-05-13 | Bowser | 1989-08-31
63、| Fang | 1990-08-27 | Fluffy | 1993-02-04 | Claws | 1994-03-17 | Slim | 1996-04-29 | Whistler | 1997-12-09 | Chirpy | 1998-09-11 | Puffball | 1999-03-30 |+-+-+在字符类型列上,与所有其他比较操作类似,分类功能正常情况下是以区分大小写的方式执行的。这意味着,对于等
64、同但大小写不同的列,并未定义其顺序。对于某一列,可以使用BINARY强制执行区分大小写的分类功能,如:ORDER BY BINARY col_name. 默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )关键字:mysql> SELECT name, birth FROM pet ORDER BY birth DESC;+-+-+| name | birth |+-+-+| Puffball | 1999-03-30 | Chirpy
65、0; | 1998-09-11 | Whistler | 1997-12-09 | Slim | 1996-04-29 | Claws | 1994-03-17 | Fluffy | 1993-02-04 | Fang | 1990-08-27 | Bowser | 1989-08-31 | Buffy | 1989-05-13 |+-+-+可以对多个列进行排序,并且可
66、以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:mysql> SELECT name, species, birth FROM pet -> ORDER BY species, birth DESC;+-+-+-+| name | species | birth |+-+-+-+| Chirpy | bird
67、 | 1998-09-11 | Whistler | bird | 1997-12-09 | Claws | cat | 1994-03-17 | Fluffy | cat | 1993-02-04 | Fang | dog | 1990-08-27 | Bowser
68、0; | dog | 1989-08-31 | Buffy | dog | 1989-05-13 | Puffball | hamster | 1999-03-30 | Slim | snake | 1996-04-29 |+-+-+-+注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。3.3.4.5. 日期计算MySQL提供了几个函数,可以用来计算日期,例如,计算年龄或提取日期部分。要想确定每个宠
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理医院岗前培训考试及答案解析
- 2025-2030绿色建材认证体系对免漆门行业发展影响评估
- 2025-2030绿色信贷政策对漂洗助剂企业融资成本影响量化分析
- 2025-2030绘本阅读推广生态构建与数字化阅读产品开发趋势报告
- 2025-2030线粒体功能优化剂在唐氏综合征儿童认知改善中的临床转化障碍分析
- 2025-2030纳米药物递送系统专利布局与技术壁垒分析报告
- 2025-2030纳米材料应用领域拓展分析与科技投资战略研究报告
- 2025-2030纳米材料产业市场前景及经济效益预测分析报告
- 2025-2030红外热成像器件非制冷技术突破与安防应用渗透率分析
- 2025-2030精酿啤酒行业市场调查及消费升级与竞争格局分析报告
- 干眼科普健康宣教
- 粮库安全生产培训
- 肝脾破裂护理课件
- 口腔护理并发症的预防及处理
- 汽车4s店生产设备管理制度
- 中国邮政集团有限公司贵州省分公司招聘笔试真题2024
- Java EE-形考任务一-国开(LN)-参考资料
- 商品育肥猪饲料原料生产基地可行性研究报告
- 中国石油大学(北京)《习概》2023-2024学年第二学期期末试卷
- TSG Z7002-2022特种设备检测机构核准规则
- 设备试验合作协议书范本
评论
0/150
提交评论