简单查询
①SELECT语句
SELECT【DISTINCT】*或{字段名1,字段名2,字段名3,……}
FROM 表名
【WHERE 条件表达式1】
【GROUP BY 字段名 【HAVING条件表达式2】】
【ORDER BY字段名【ASC或DESC】】
【LIMIT 【OFFSET】 记录数】
注意:【 】里为可选参数,可写可不写
DISTINCT:用于剔除查询结果中重复的数据。
WHERE:用于指定查询条件。
GROUP BY:用于将查询结果按照指定字段进行分组,HAVING用于对分组后的结果进行过滤。
ORDER BY:用于将查询结果按照指定字段进行排序。其中ASC表示按升序进行排列,DESC表示按降序进行排列。如果不指定参数,默认为升序排列。
LIMIT:用于限制查询结果的数量。LIMIT后面可以跟2个参数,第一个参数“OFFSET”表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1则从查询结果的中第二条记录开始…以此类推(如果不指定其默认值为0)第二个参数“记录数”表示返回查询记录的条数。
②查询所有字段
① 在SELECT语句中指定所有字段
首先在数据库chapter04中创建表student,然后使用INSERT语句向student表中插入8条记录
SELECT 字段名1,字段名2,…… FROM 表名;
【注意:字段的顺序是可以改变的,无需按照其表中定义的顺序进行排列】
②在SELECT语句中使用星号(“*”)通配符代替所有字段
SELECT * FROM 表名;
③查询指定字段
SELECT 字段名1,字段名2,…… FROM 表名;
【注意:改变查询字段的顺序,查询结果中字段显示的顺序也会做相应改变】
按条件查询
①带关系运算符的查询
SELECT 字段名1,字段名2,…… FROM 表名WHERE 条件表达式;
(查询student表中id为4的学生姓名)
(查询student表中grade大于80的学生姓名)
②带IN关键字的查询
IN关键字用于判断某个字段的值是否在指定集合中
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名【NOT】IN(元素1,元素2,……);
(查询student表中id值为1、2、3的记录)
【注意:加NOT表示查询不在IN关键字指定集合范围中的记录】
③带BETWEEN AND关键字的查询
BETWEEN AND用于判断某个字段的值是否在指定的范围之内
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名【NOT】BETWEEN 值1 AND值2;
【注意:值1为范围条件的起始值,值2为范围条件的结束值,值1小于值2,否则查询不到。NOT同理】
(查询student表中id值在2和5之间的学生姓名)
④空值查询
IS NULL关键字用于判断字段的值是否为空值
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名 IS【NOT】NULL;
(查询student表中gender为空值的记录)
⑤带DISTINCT关键字的查询
DISTINCT关键字用来去掉查询记录中重复的值
SELECT DISTINCT 字段名 FROM 表名;
(查询student表中gender字段的值,查询记录不能重复)
DISTINCT关键字作用多个字段
SELECT DISTINCT 字段名1,字段名2,……FROM 表名;
【注意:只有多个字段的值都相同才会被认为是重复的】
(查询student表中的gender和name字段)
⑥带LIKE关键字的查询
LIKE关键字用于对字符串进行模糊查询
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名【NOT】LIKE “匹配字符串”
“匹配字符串”指定用来匹配的字符串,其值可以是一个普通字符串,也可以是包含%和_的通配字符串。
1、使用百分号通配符查询
百分号通配符:一个百分号可以匹配任意多的字符,包括空字符
(查找student表中name字段值以字符“s”开头的学生id)
(查询student表中name字段值以字符“w”开始,以字符“g”结束的学生id)
(查询student表中name字段值包含字符“y”的学生id)
2、使用下划线通配符查询
下划线通配符:一个下划线匹配一个字符,包括空字符
(查询student表中name字段值以字符串“wu”开始,以字符串“ong”结束,并且两个字符串之间只有一个字符的记录)
(查询student表中name字段值包含7个字符,并且以字符串“ing”结束的记录)
使用百分号和下划线通配符进行查询
【注意:百分号和下划线在通配字符串中需要使用右斜线“”进行转义】
(查询student表中name字段值包括“%”的记录)(已添加一条有%的记录)
⑦带AND关键字的多条件查询
AND关键字用连接两个或者多个查询条件,只有满足所有条件的记录才会被返回
【注意:每两个条件之间用AND隔开】
(查询student表中id字段值小于5,并且gender字段值为“女”的记录)
SELECT *或{字段名1,字段名2,……}
FROM 表名
WHERE 条件1 AND 条件2……;
(查询student表中id字段值在1、2、3、4之中,name字段值以字符串“ng”结束,并且grade字段值小于80的记录)
⑧带OR关键字的多条件查询
OR关键字用于连接多个查询条件,只要记录满足任意一个条件就会被查询出来
SELECT *或{字段名1,字段名2,……}
FROM 表名
WHERE 条件1 OR 条件2……;
(查询student表中满足条件name字段值以字符“h”开始,或者gender字段值为“女”,或者grade字段值为100的记录)
OR和AND关键字一起使用的情况
【注意:AND的优先级高于OR】
(查询student表中gender字段值为“女”或者gender字段值为“男”,并且grade字段值为100的记录)
高级查询
①聚合函数
COUNT()用于统计记录的条数
SELECT COUNT(*) FROM 表名;
(查询student表中一共有多少条记录)
SUM()用于求出表中某个字段所有值的总和
SELECT SUM(字段名) FROM 表名;
(求出student表中grade字段的总和)
AVG()用于求出某个字段所有值的平均值
SELECT AVG(字段名) FROM student;
(求出student表中grade字段的平均值)
MAX()用于求出某个字段的最大值
SELECT MAX(字段名) FROM student;
(求出student表中所有学生grade字段的最大值)
MIN()用于求出某个字段的最小值
SELECT MIN(字段名) FROM student;
(求出student表中所有学生grade字段的最小值)
②对查询结果排序
SELECT 字段名1,字段名2,……
FROM 表名
ORDER BY 字段名1 [ASC或 DESC],字段名2 [ASC 或 DESC]……;
(查询student表中的所有记录,按照gender字段的升序和grade字段的降序进行排列)
③分组查询
GROUP BY用来按某个字段或者多个字段中的值进行分组,字段中值相同的为一组
SELECT 字段名1,字段名2,……
FROM 表名
GROUP BY 字段名1,字段名2……【HAVING 表达条件式】;
【注意:HAVING是用来对分组后的数据再次进行筛选】
1.单独使用GROUP BY分组查询的是每个分组中的一条记录
(查询student表中的记录,按照gender字段值进行分组)
2.GROUP BY和聚合函数一起使用可以统计出某个或者某些字段在一个分组中的最大值、最小值、平均值等等
(将student表按照gender字段值进行分组查询,计算出每个分组中各有多少名学生)
3、GROUP BY和HAVING关键字一起使用
(将student表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组)
④使用LIMIT限制查询结果的数量
LIMIT关键字用于指定查询结果从哪一条记录开始以及一共查询多少条信息
SELECT 字段名1,字段名2,……
FROM 表名
LIMIT 记录数;
(查询student表中的前4条记录)
(查询student表中grade字段值从第5位到第8位的学生(从高到低))
⑤函数
(查询student表中的id和gender字段值,如果gender字段的值为“男”则返回1,如果不为“男”则返回0)
为表和字段取别名
①为表取别名
SELECT * FROM 表名 [AS] 别名;
(为student表起一个别名s,并查询student表中gender字段值为“女”的记录)
②为字段取别名
SELECT 字段名 [AS] 别名,字段名 [AS] 别名…… FROM 表名;
(查询student表中的所有记录的name和gender字段值,并为这两个字段其别名stu_name和stu_gender)