1.基本查询(SELECT)
SELECT语句基本格式:
SELECT
{*|<字段列表>}
[
FROM<表1>,<表2>..
[WHERE <表达式>
[GROUP BY<group by definition>]
[HAVING <expression>[{<operator><expression>}...]]
[ORDER BY <order by definition>]
[LIMIT [<offset>,]<row count>]
]
SELECT[字段1,字段2,...,字段n]
FROM[表或视图1]
WHERE[查询条件];其中,各条子句的含义如下:
 {*<字段列表>}包含星号通配符和字段列表,表示査询的字段,其中,字段列表至少包含一个字段名
 称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不加逗号
 FROM <表1>,<表2>..,表1和表2表示查询数据的来源,可以是单个或者多个
 WHERE 子句是可选项,如果选择该项,将限定查询行必须满足的查询条件,
 GROUP BY<字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组;
 HAVING过滤分组,GROUP BY可以和HAVING一起限定显示记录所满足的条件,只有满足条
 件的分组才会被显示.
 [ORDER BY<字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有
 升序(ASC),降序(DESC);
 [LIMIT[<offset>,]<row count>],该子句告诉MySQL每次显示查询出来的数据条数
2.单表查询
(1).查询所有字段:
在SELECT中使用*通配符查询所有字段
SELECT查询记录最简单的形式是从一个表中检索所有记录,实现的方法是使用星号(*)通配符指定查询所有列的名称.语法格式如下:
SELECT *FROM 表名;
(2).查询指定字段:
1)查询单个字段
 查询表中的某一个字段,语法格式为:
 SELECT 列名 FROM 表名:
 例2,查询fruits表中f name列所有的水果名称,SQL语句如下:
SELECT f_name FROM fruits;2)查询多个字段
 查询多个字段的语法如下:
 SELECT 字段1,字段2..字段名n FROM 表名:
 例3:从fruits表中获取f name和f price两列,SQL语句如下
SELECT f_name,f_price FROM fruits;(3).查询指定记录
在SELECT 语句中,通过WHERE字句可以对数据进行过滤,语法格式为:
SELECT 字段名1,字段名2...,字段名n
 FROM 表名
 WHERE 查询条件
 WHERE条件判断符

例如:
///查询价格为10.2元的水果的名称
SELECT f_name,f_price
FROM fruits
WHERE f_price=10.2;
//查找名称为"apple"的水果的价格
SELECT f_name,f_price
FROM fruits
WHERE f_name='apple';
//查询价格小于10的水果的名称
SELECT f_name,f_price
FROM fruits
WHERE f_price<10;(4).带in关键字的查询:
IN操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检
 索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项,
//查询s_id为101和102的记录,SQL语句如下:
SELECT s_id,f_name,f_price
FROM fruits
WHERE s_id IN(101,102)
ORDER BY fname;使用NOT来检索不在条件范围内的记录:
//查询所有s id不等于101也不等于102的记录,SQL语句如下
SELECT s_id,f_name,f_price
FROM fruits
WHERE s_id NOT IN(101,102)
ORDER BY f_name;(5).带BETWEEN AND的范围查询:
用来查询某个范围内的值:
//查询价格在2.00元到10.20元之间的水果名称和价格
SELECT f_name,f_price
FROM fruits
WHERE f_price BETWEEN 2.00 AND 10.20;BETWEEN AND匹配范围内的所有值,包括开始值和结束值
 BETWEEN AND 操作符前可以加关键字NOT,表示指定范围之外的值,
//查询价格在2.00元到10.20元之外的水果名称和价格:
SELECT f_name,f_price
FROM fruits
WHERE f_price NOT BETWEEN 2.00 AND 10.20;
(6)带LIKE的字符匹配查询
 我们如果要查找所有包含字符"ge”的水果的名称,需要使用通配符进行匹配查找;
 通配符是一种在SQL的WHERE条件字句中拥有特殊意思的字符.SQL语句中支持多种通配符,可以和LIKE一起使用的通配符有'%'和’_'
%通配符可以匹配任意长度的字符,甚至包括零字符
_通配符一次只能匹配一个长度的字符
//fruits表中,查询f name中包含字母'g'的记录
SELECT f_id,f_name
FROM fruits
WHERE f_name LIKE '%g%';
//在fruits表中,查询以字母'y'结尾,且'y'前面只有4个字母的记录
SELECT f_id,f_name 
FROM fruits
WHERE f_name LIKE '____y';(7).查询空值:
空值一般表示数据未知,不使用或将在以后添加数据
 在SELECT语句中使用IS NULL字句,可以查询某字段内容为空记录
 NULL相反的是NOT NULL,该关键字查找字段不为空的记录,
//查询customers表中c email为空的记录的cid,c name和c email字段值
SELECT c_id,c_name,c_email
FROM customers
WHERE c_email IS NULL;
//查询customers表中c email不为空的记录的cid,c name和c email字段值
SELECT c_id,c_name,c_email
FROM customers
WHERE c_email IS NOT NULL;(8).带AND和OR的多条件查询:
//在fruits表中查询s id=101并且f price大于等于5的水果id,价格和名称
SELECT f_id,f_name,f_price
FROM fruits
WHERE s_id='101' AND f_price >=5;
//查询s_id=101或者s_id=102的水果供应商的f_price和f_name,
SELECT s_id,f_name,f_price
FROM fruits
WHERE s_id=101 OR s_id=102;在这里可以看到,OR操作符和IN操作符使用后的结果是一样的,它们可以实现相同的功能,但是使用
 IN操作符使得检索语句更加简洁明了,并且IN执行的速度要快于OR.更重要的是,使用IN操作符可
 以执行更加复杂的嵌套查询(后面章节会讲述)
 OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先
 对AND两边的操作数进行操作,再与OR中的操作数结合
(9).查询结果不重复:
可以使用DISTINCT关键字指示MySQL消除重复的记录值.语法格式为:
SELECT DISTINCT 字段名 FROM 表名;(10).对查询结果排序:
1).单列排序:
//查询fruits表的f name字段值,并对其进行排序
SELECT f_name
FROM fruits
ORDER BY f_name;2).多列排序:
//查询fruits表的f_name字段和f_price字段,先按f_name排序,再按f_price排序
SELECT f_name,f_price
FROM fruits
ORDER BY f_name,f_price;在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序.如果第
 列数据中所有值都是唯一的,将不再对第二列进行排序.
3).指定排序方向:
默认情况下,查询数据按字母升序进行排序(A~Z),但数据的排序并不仅限于此,还可以使用ORDER
 BY对查询结果进行降序排序(Z~A).这可以通过关键字DESC实现.
与DESC相反的是ASC(升序),将字段列中的数据按字母表顺序升序排列,实际上,在排序的时候ASC
 是默认的排序方式,所以加与不加都可以;
//查询fruits表的f name字段和f price字段,对结果按f price降序方式排列;
SELECT f_name,f_price
FROM fruits
ORDER BY f_price DESC;
//查询fruits表,先按f_price降序排列,再按f_name升序排列;
SELECT f_price,f_name
FROM fruits 
ORDER BY f_price DESC,f_name;DESC排序方式只应用到直接位于其前面的字段上,由结果可以看出
 DESC关键字只对其前面的列进行降序排列,在这里只对fprice排序,而并没有对f name进行排序
 因此,fprice按降序排列,而f name列仍按升序排列.如果要对多列都进行降序排列,必须要在每
 列的列明后面加DESC关键字.



















