Loading

单表查询

查询数据表中指定字段的内容
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;
posted @ 2020-04-28 12:13  Hel10  阅读(266)  评论(0编辑  收藏  举报