笔记对应书本的四五六章
「written by Talaxy on 2/22/20」
SELECT语句
最经常使用的SQL语句就是SELECT语句了,它的用途是从一个或多个表中检索信息。
为了使用SELECT检索数据,必须至少给出两条信息:
- 想检索什么
- 从什么地方检索
检索单个列
从表中获得一个列 select 列名 from 表名;
如果没有明确排序查询结果,则返回的数据的顺序没有特殊意义
多条SQL语句必须以分号间隔。
MySQL和多数DBMS一样,不需要在单条SQL语句后加分号。
但如果使用的是mysql命令行,必须加上分号来结束SQL语句。
SQL语句不区分大小写。但许多SQL开发人员喜欢对SQL关键字使用大写,对列和表名使用小写,使得提高阅读性。
(注意:标识符,即数据库名、表名、列名,在MySQL4.1之前是区分大小写的)
一行SQL语句可以拆分为几行来写
检索多个列
select
检索所有列
select
如果不是真的需要,最好不要用*通配符,检索不需要的列通常会降低检索和应用程序的性能
可以用*通配符来查询名字未知的列
检索不同的行(纪录)
如果不想要每个值每次都出现(去重):
select
distinct关键字必须放在所有列名之前
限制结果
如果只要返回前几行:
select
这里的行数是指最大行数
返回从第几行开始后的几行:
select
这里第一个数是开始位置,第一个位置是0,第二个数是要检索的行数。比如 "limit 1, 1" 会检索出第二行而不是第一行
MySQL5也可以这样写来提高阅读性:
select
使用完全限定的表名
select
这个语句和最开始的SELECT语句效果相同,但有些情况下需要这么写,以后章节会提到。
排序数据
子句(clause):
SQL语句由子句构成,有些子句是必需的,有的是可选的。一个子句通常由一个关键字
对指定列排序(字典排序)输出:
select
按多个列排序
select
ORDER BY后列的顺序为排序优先级顺序,由高到低
指定排序方向
select
[]包含的内容为可选项
若要对指定的列排序设为降序,在列的后面加desc即可。每个列后都可以加desc。
使用ORDER BY和LIMIT的组合,能找出第一个列中最高或最低的值:
select
使用WHERE子句
检索时可能会需要过滤出需要的信息。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)
select
条件可以是判等,比如 "列二 = 2.5"
尽量使用SQL过滤而非手动过滤,手动过滤会让服务器发送多余的数据,导致网络带宽的浪费。
在同时使用ORDER BY和WHERE子句时,应让WHERE在前,否则会产生错误
WHERE子句操作符
MySQL支持以下条件操作符:
MySQL在执行匹配时默认不区分大小写
范围检查:
select
空值检查:
select
NULL是无值,而非0、空字符串或仅仅包含空格
在过滤操作时,NULL无法进行匹配(除了空置检查),所以在匹配过滤或不匹配过滤时不返回它们。因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。