2.1 指定使用中的资料库

一个资料库伺服器可以建立许多需要的资料库,所以在你执行任何资料库的操作前,通常要先指定使用的资料库。下列是指定资料库的指令:

如果你使用「MySQL Workbench」这类的工具软体,画面上看起来会像这样:

2.2 只有SELECT

一个SQL查询叙述一定要以「SELECT」子句开始,再搭配其它的子句完成查询资料的工作。你可以单独使用「SELECT」子句,只不过这样的用法跟资料库一点关系都没有,它只不过把你输入的内容显示出来而已:

例如下列的查询叙述,只是简单的显示字串和计算结果,并不会查询资料库中的资料:

  1. SELECT 'My name is Simon Johnson', 35 * 12

2.3 指定栏位与表格

一般所谓的查询叙述,通常是查询资料库中的资料,所以「SELECT」子句会搭配「FROM」子句来使用,而「SELECT」后面可以指定「*」表示要查询指定表格的所有栏位:

如果目前使用中的资料库为「world」,下列的叙述可以查询「world」资料库中,「city」表格的所有资料:

  1. SELECT * FROM city

一个资料库伺服器可以建立许多需要的资料库,所以在你执行任何资料库的操作前,都要使用「USE」叙述指定一个使用中的资料库。不过你也可以在SQL叙述中使用下列的语法来指定资料库:

如果目前使用中的资料库是「world」,你不用先使用「USE cmdev」叙述切换使用中的资料库,可以使用下列的语法查询「cmdev」资料库中的「emp」表格:

  1. SELECT * FROM cmdev.emp

2.4 指定需要的栏位

有时候你并不需要查询一个表格中所有的栏位,所以你可以在「SELECT」子句后面自己指定需要的栏位:

如果你在「SELECT」后面使用「*」的话:

你可以依照自己的需要决定要查询哪些栏位和顺序:

2.5 数学运算

除了查询表格中的栏位外,你可以加入任何需要的运算,这里先讨论一般常见的数学运算。下列是很常用来执行数学运算的运算子:

优先顺序 运算子 说明 范例 运算结果
1 % 余数 7 % 3 1
1 MOD 余数 7 MOD 3 1
1 * 7 * 3 21
1 / 7 / 3 2.333
1 DIV 除(整数) 7 DIV 3 2
2 + 7 + 3 10
2 - 7 – 3 4

注:优先顺序的数字从1开始,1表示优先权比较高,2比较低,以此类推。就跟一般数学运算的先乘除后加减一样:在一个运算式中,优先权高的先算完,再换低优先权继续算;同样优先权的就由左到右计算。你也可以在运算式中使用左右括号,括号中的运算会先执行。

以「cmdev」资料库中的员工表格(emp)来说,想要计算员工的年薪,就可以使用这些运算子来完成你的查询工作:

2.6 别名

你可以另外为「SELECT」后面查询的资料取一个自己想要的名称,这个作法称为「别名(alias 
name)」:

取栏位别名会让执行查询后的结果,使用你自己取的名称为栏位名称:

注:帮一般栏位取一个栏位别名是比较没有必要的,如果是运算式的话,通常就要帮它取一个栏位别名来取代原来一大串的运算式。

在取栏位别名的时候要特别注意下列的状况:

另外如果你「坚持」要使用SQL语法中的保留字来当作栏位别名的话:

如果违反上列两个规定,执行叙述以后会发生错误。

3 条件查询

使用「SELECT」和「FROM」执行的查询叙述,是把你在「FROM」子句指定表格里所有的纪录传回来。资料库最大的好处就是可以随时依照需要查询部份纪录资料,你可以搭配「WHERE」子句执行查询条件的设定:

3.1 比较运算子

要使用「WHERE」执行查询条件的设定,你会使用下列基础的比较运算子:

|优先顺序 |运算子| 说明| 
|1| =| 等于| 
|1|  `| 等于| |1| !=| 不等于| |1| ``| 大于| |1| >=`| 大于等于|

注:``运算子在后面「NULL值的判断」会讨论。

使用这些基础的比较运算子就可以完成一些简单的条件设定:

设定日期资料型态的条件也是很常见的:

3.2 逻辑运算子

查询条件的设定,有时候会像前面讨论的单一条件一样,并不会太复杂;不过也很常遇到在一个查询的需求中,需要设定一个以上的条件,那你就会用到下列的运算子:

优先顺序 运算子 说明
1 NOT
2 && 而且
2 AND 而且
3 |  |
3 OR
3 XOR 互斥

「NOT」运算子比较特殊一些,在一般的需求中,比较不会用到它。以下列的需求来说:(强调下,台湾不是个国家,本人不支持台独,但是貌似这本书的作者是个台独分子)

如果想要查询省份代码是「TWN」,而且人口数量小于十万的城市,就必须设定两个条件,而两个条件之间,依照「而且」的需求,使用「AND」来结合两个条件:

如果想要查询国家代码是「TWN」或是「USA」的城市,在两个条件之间依照「或」的需求,使用「OR」来结合两个条件:

在逻辑运算子的介绍中,它们也同样有「优先顺序」的。如果你想要查询在欧洲(Europe)或非洲(Aftica)国家,而且人口数要小于一万。使用下列的查询条件所得到的资料,跟你想要的却不一样:

如果有多个查询条件的设定,全部都是「AND」或全部都是「OR」的话,就没有这类问题;如果查询条件中,有「AND」和「OR」同时出现的话,就要依照你的需要,视情况加上左右刮号来控制条件的设定:

3.3 其它条件运算子

一般的条件和逻辑运算子,已经可以应付大部份的查询条件需求。下列还有一些可以用在特殊用途或是提供替代写法的条件设定:

  • BETWEEN … AND …:范围比较
  • IN (…):成员比较
  • IS:是…
  • IS NOT:不是…
  • LIKE:像…

「BETWEEN … AND …」用来执行一个指定范围条件的设定:

如果要查询人口数量在八万到九万之间的城市资料,可以有下列两种条件的写法,它们执行以后的结果是完全一样的:

使用「BETWEEN … AND …」的条件设定会包含指定的资料,所以下列两个查询条件所得到的结果就不一样了:

「BETWEEN … AND …」使用在日期资料时,也可以完成某一个日期范围的判断:

「IN (…)」使用在一组成员资料的比对条件设定:

下列两个查询叙述,都可以得到国家代码是「TWN、USA、JPN、ITA和KOR」的城市资料,可是使用「IN (…)」来设定条件的话,看起来会简洁很多:

3.4 NULL值的判断

在国家表格中,有一个储存平均寿命的栏位「LifeExpectancy」,不过资料库中的资料并没有很完整,所以有一些国家是没有这个资料的,所以会使用「NULL」值来表示:

如果想要查询没有平均寿命资料的国家,也就是平均寿命的栏位值是「NULL」,你可能会使用下列的叙述:

  1. SELECT Name, LifeExpectancy
  2. FROM country
  3. WHERE LifeExpectancy = NULL

上列的叙述执行以后,并没有传回任何纪录,这表示并没有资料符合你设定的查询条件。

所以「NULL」值的判断,不可以使用判断一般资料的条件设定:

注:``在判断一般资料的时候,跟「=」完全一样;不过它用在判断「NULL」资料的时候,效果跟「IS」一样。

如果换成要查询「有」平均寿命资料的国家,也就是平均寿命的栏位值不是「NULL」:

3.5 字串样式

在使用字串资料的条件判断时,会有一种很常见、也比较特殊的需求,像是「想要查询名称以w字元开始的城市」,如果你使用下列的查询叙述:

  1. SELECT Name FROM city WHERE Name = 'w'

这样的查询条件,当然不是「名称以w字元开始的城市」,而是名称只有一个「w」字元的城市。所以这类的查询就会使用下列这个特殊的条件设定:

上列语法中,在「LIKE」后面的「样版」字串中,会使用到下列两种「样版字元」:

  • %:0到多个任何字元
  • _ :一个任何字元

所以要查询「名称以w字元开始的城市」的话:

参考上列的作法,就可以延伸出其它的查询条件设定了:

上列的查询条件中,「w%」表示第一个字元是「w」就符合条件;「%w」表示最后一个字元是「w」就符合条件;最后一个「%w%」表示不论在什么位置有「w」字元,都符合条件。

另外一种样版字元「_」表示一个任何字元:

把这些样版中的底线换到后面的话:

你也可以搭配两种样版字元完成条件的设定:

甚至像查询「名称是三十(包含)个字元以上的城市」:

注:其实完成上列的查询条件的需求是不用这么麻烦的,在后面的章节会讨论比较简单的方式。

4 排序

在你执行任何一个查询以后,MySQL传回的资料是依照「自然」的顺序排列的。所谓的自然顺序,通常是资料新增到表格中的顺序,可是在资料库运作一段时间后,陆续会有各种不同的操作,所以这个「自然」顺序对你来说,通常是没什么意义的。

一般的查询通常会有资料排序上的需求,所以你会使用「ORDER BY」子句:

如果你希望在查询城市资料的时候,资料库会依照国家代码帮你排序的话:

你也可以指定资料排列的顺序为由大到小:

「ORDER BY」子句后面可以依照需求指定多个排序的资料:

「ORDER BY」子句后面指定多个排序资料的时候,都可以依照需求,各自指定资料排列的方式:

「ORDER BY」子句指定的资料可以是栏位名称、编号、运算式或是栏位别名:

虽然比较不会有下列这样的需求,不过你还是可以这样作:

注:资料排列的顺序在「第六章、字元集与资料库」与「第七章、储存引擎与资料型态」中进一步详细的讨论。

5 限制查询

5.1 指定回传纪录数量

在你执行一个查询叙述后,资料库会将你查询的资料传回来给你;如果你使用「WHERE」子句设定查询条件的话,资料库就只会传回符合条件的资料;除了上列的状况外,你也可以另外使用「LIMIT」子句指定回传纪录的数量:

如果你在「LIMIT」子句后面指定一个数字:

「LIMIT」子句后面也可以指定两个数字:

在查询叙述中,使用「ORDER BY」子句搭配「LIMIT」子句,就可以完成下列查询「排名」的工作:

注:如果出现类似「… LIMIT 1000000, 10」这样的查询叙述,虽然你只会得到十笔资料,资料库总共会查询一百万零一十笔资料,只不过资料库会帮你跳过前一百万笔;类似这样的需求,还是要使用「WHERE」子句先挑出想要的资料会比较好一些。

5.2 排除重复纪录

在一个查询叙述执行以后,资料库不会帮你检查回传的资料是否重复(回传的两笔纪录资料完全一样),在「SELECT」子句后面可以让你设定「回传的资料是否重复」:

没有使用「ALL」或「DISTINCT」的效果,跟你自己加上「ALL」的查询效果是一样的,资料库会依照你的查询传回所有的资料:

使用「DISTINCT」的话,资料库会特别执行回传纪录是否重复的检查:

sql基础查询的更多相关文章

  1. SQL基础--查询之三--嵌套查询

    SQL基础--查询之三--嵌套查询

  2. SQL基础--查询之五--查询语句一般格式

    SQL基础--查询之五--查询语句一般格式

  3. SQL基础--查询之四--集合查询

    SQL基础--查询之四--集合查询

  4. SQL基础--查询之一--单表查询

    SQL基础--查询之一--单表查询

  5. SQL基础--查询之二--连接查询

    SQL基础--查询之二--连接查询

  6. sql基础查询语句

    数据库文件百度云地址:www.pan.baidu.com 脚步:下载博客园文件:select_learn.rar 1.TOP限制返回行数[percent] * from book_info --显示前 ...

  7. SQL基础查询实战

    总结: 一.单表查询的情况: 1.where.....group by .. Having count(..) 2.Group by haing min(..)条件and max(..)条件(查询最低 ...

  8. MySQL学习(三) SQL基础查询

    其实在数据库最经常用的当属查询操作 基本语法 SELECT [ALL | DISTINCT | DISTINCTROW ] 字段列表 AS 字段别名 [FROM 表名 WHERE 条件表示式 GROU ...

  9. sql 基础查询集锦

    授权 GRANT All ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED ...

随机推荐

  1. 一个短小的JS函数,用来得到仅仅包含不重复元素的数组

    下面函数主要利用了数组的sort方法,之后的逻辑是看最后一个元素是否等于要添加的元素,如果不是就往尾后加. 这个做法的效率等于sort方法的效率,还过得去. 代码: <!DOCTYPE HTML ...

  2. 深入理解BootStrap之栅格系统(布局)

    1.栅格系统(布局) Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 我在这里是把Bootstrap中的栅 ...

  3. Linux就这个范儿 第13章 打通任督二脉

    Linux就这个范儿 第13章 打通任督二脉 0111010110……你有没有想过,数据从看得见或看不见的线缆上飞来飞去,是怎么实现的呢?数据传输业务的未来又在哪里?在前面两章中我们学习了Linux网 ...

  4. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  5. [RGeos]手簿

    1.屏幕坐标以像素为单位,地图坐标通常以米为单位,CAD制图默认以毫米为单位. DPI是“dot per inch”的缩写.顾名思义,就是指在每英寸长度内的点数.通常,我们都使用dpi来作为扫描器和打 ...

  6. Thinkphp关闭缓存方法总结(转)

    ThinkPHP在数据缓存方面包括文件方式.共享内存方式和数据库方式在内的多种方式进行缓存,通过插件方式还可以增加以后需要的缓存类,让应用开发可以选择更加适合自己的缓存方式,从而有效地提高应用执行效率 ...

  7. Silverlight/WPF绘制统计图Visifire.dll文件

    官网:http://www.visifire.com/ 一直没找到好的中文文档,希望有的这个的可以发个我! 效果图: 前台代码: <UserControl x:Class="Text_ ...

  8. ATS连接 https

    HTTPS协议是Http Over SSL,简单来说就是HTTP的安全版本,在HTTP的基础上增加SSL/TLS加密传输协议,通过HTTPS加密传输和身份认证保证了传输过程的安全性.在登录网银和电子邮 ...

  9. Lintcode: Rehashing

    The size of the hash table is not determinate at the very beginning. If the total size of keys is to ...

  10. hdu(1171)多重背包

    hdu(1171) Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...