单表查询
Posted helloctf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单表查询相关的知识,希望对你有一定的参考价值。
查询数据表中指定字段的内容
select 字段名1, 字段名2 from 表名;
查询数据表中的所有内容
SELECT * FROM 表名;
带 IN 关键字的查询
SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...);
使用IN关键字检索出所有国家代码为1、86和39的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IN (1,87,39);
带NOT IN关键字的查询
SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...); 。
查询除了国家代码为86的所有国家的产品内容。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country NOT IN (86);
带BETWEEN AND关键字的查询
SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN n1 AND n2; 。
使用BETWEEN AND关键字检索出所有国家代码为1~50的商品的信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country BETWEEN 1 AND 50;
带NOT BETWEEN AND关键字的查询
查询除了国家代码为1~50的所有国家的产品内容。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country NOT BETWEEN 1 AND 50;
使用通配符%模糊匹配数据内容
百分号通配符%可以匹配任意长度的字符,甚至包括零字符。
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE ‘字符%‘; //其中 % 的位置可以根据需要在字符间变化。
使用LIKE关键字和通配符%检索出所有商品名称带ir的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE ‘%ir%‘;
使用通配符_模糊匹配数据内容
下划线通配符_只能模糊匹配1个字符
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE ‘字符_‘; //其中`_`的位置可以根据需要在字符间变化。
使用LIKE关键字和通配符_检索出所有商品名称以r结尾,且前边有9个字母的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE ‘_________r‘;
查询空值
NULL既不代表0,也不代表空字符,而是代表一种未知的状态
SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;
使用IS NULL关键字检索出所有prod_country字段为NULL的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IS NULL;
与关键字IS NULL查询结果相反的是关键字IS NOT NULL,我们来看看实际操作的效果。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IS NOT NULL;
去除重复结果
SELECT DISTINCT 字段名 FROM 表名; 。
带AND关键字的多条件查询
使用AND操作符限制只有满足所有条件的查询才会被返回。
SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2; 。
想要查询表中哪些商品不仅商品名中带有toy字符,单价又同时大于5,并列出他们的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE ‘%toy%‘ AND prod_price > 5;
带OR关键字的多条件查询
在WHERE声明中使用OR关键字表示只需满足两个条件中的其中一个条件即可返回结果。
SELECT 字段名 FROM 表名 WHERE 表达式1 OR 表达式2;
查询表中商品ID为BNBG01或BR01的名称和单价。
查询代码如下:
SELECT ID, prod_name, prod_price
FROM Mall_products
WHERE ID = ‘BNBG01‘ OR ID = ‘BR01‘;
对查询结果排序
如果我们需要对读取的语句进行排序,我们就可以使用Order By子句来设定你想要按照的字段进行排序并返回结果。
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
id name age
1 Tom 32
2 Nancy 18
3 Allen 24
4 Jason 23
我们需要查询表中信息,要求按照年龄的升序进行排序
指定排序方向
在默认情况下,它是按升序排列的。
ASC: 升序关键字
DESC: 降序关键字
分组查询的单独使用
分组查询的关键字是Group By,查询的是每个分组中首次出现的一条记录。
SELECT 字段名 FROM 表名 GROUP BY 字段名;
例如:
现有user表数据:
id name sex
1 Tom 男
2 Nancy 女
3 Allen Null
4 Jason 男
我们对表中数据的性别进行分组查询:
可以看出,返回了3条记录,分别是sex字段值为Null、女、男的记录,查询结果按照sex字段中不同的值进行了分类,只显示每个分组中的一条记录,意义不大,一般情况下,GROUP BY都和聚合函数一起使用。
使用 LIMIT 限制查询结果的数量
在mysql中,提供了LIMIT关键字,用来限制查询结果的数量。
语法:
SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;
参数说明:
第一个参数,OFFSET,可选参数,表示偏移量,如果不指定默认值为0,表示从查询结果的第一条记录开始,若偏移量为1,则从查询结果中的第二条记录开始,以此类推。
第二个参数,记录数,表示返回查询结果的条数。
查询班级中第2名到第5名的学生信息,并根据学生成绩进行降序排序。
select * from tb_score order by score desc limit 1,4;
以上是关于单表查询的主要内容,如果未能解决你的问题,请参考以下文章