数据库——DQL单表查询

DQL单表查询

id name gender age score
111111 刘一 20 NULL
186222 陈二 30 90
275933 张三 24 92
266055 李十四 20 92
134444 王五 18 92
225573 赵十六 22 94

一、简单查询(SELECT...FROM...)

1.查询所有字段(*

--SELECT * FROM 表名;
SELECT * FROM class1;

--SELECT 表中所有的字段 FROM 表名;
SELECT id,name,gender,age,score FROM class1;

image

2.查询指定字段

--SELECT 字段1,字段2... FROM 表名;
SELECT name,id FROM class1;

image

3.查询去重数据(DISTINCT

--当关键字DISTINCT应用于一个字段,该关键字会对表中相同成绩的同学进行除去
--SELECT DISTINCT 字段 FROM 表名;
SELECT DISTINCT score FROM class1;
--当关键字DISTINCT应用于多个字段,该关键字会对表中性别和成绩都相同的同学进行除去
--SELECT 字段1,字段2... FROM 表名;
SELECT DISTINCT gender,score FROM class1;

image

二、条件查询(SELECT * FROM ... WHERE... 运算符...)

1.带比较运算符的查询

image

--SELECT * FROM 表名 WHERE 字段 IS NULL;
SELECT * FROM class1 WHERE score IS NULL;

注意:

  • =和NULL不可一起使用

=为比较运算符,不可以与NULL一起使用
image

--SELECT * FROM 表名 WHERE 字段 LIKE '_ _ _';
--找到name是三个字的数据
SELECT * FROM class1 WHERE name LIKE '___';

--#SELECT * FROM 表名 WHERE 字段 LIKE '1%';
--找到id是1开头的数据
SELECT * FROM class1 WHERE id LIKE '1%';

注意:

  • 字符 % 和 _ 的转义

当通配符在字符串中有特殊含义的时候用到 \ 进行转义。
image

--SELECT * FROM 表名 WHERE 字段 BETWEEN 值 AND 值;
--找到年龄18-22的数据(包含18和22)
SELECT * FROM class1 WHERE age BETWEEN 18 AND 22;

image

--SELECT * FROM 表名 WHERE 字段 IN(20,30);
--找到年龄20和30的数据
SELECT * FROM class1 WHERE age IN(20,30);

image

--SELECT * FROM 表名 WHERE 字段 = 值;(其他运算符类似)
--若值为字符串则需要用''对数据进行包裹
SELECT * FROM class1 WHERE name = '刘一';
SELECT * FROM class1 WHERE age = 20;
SELECT * FROM class1 WHERE age < 20;
SELECT * FROM class1 WHERE age <= 20;
SELECT * FROM class1 WHERE age => 20;
SELECT * FROM class1 WHERE age <> 20;
SELECT * FROM class1 WHERE age != 20;

注意:

  • <>和 != 的区别

<>和!=都用来比较操作数是否不相等,<>运算符适用于所有的数据类型,!=不适用于BLOB和TEXT数据类型。

NULL不能使用二者进行比较。

  • 字符 % 和 _ 的转义

当通配符在字符串中有特殊含义的时候用到\进行转义。

image

2.带逻辑运算符的查询

image

--SELECT * FROM 表名 WHERE 字段 表达式1 AND(&&) 表达式2;
--找到年龄20和id为4的数据
SELECT * FROM class1 WHERE age = 20 AND id =111111;
SELECT * FROM class1 WHERE age = 20 && id =111111;

注意:

  • 当AND和OR一起使用

AND的优先级比OR要高。
image

--SELECT * FROM 表名 WHERE 字段 表达式1 OR(||) 表达式2;
--找到年龄20,id为4的数据
SELECT * FROM class1 WHERE age = 20 OR id =111111;
SELECT * FROM class1 WHERE age = 20 || id =111111;

image

--SELECT * FROM 表名 WHERE 字段 NOT IN(20,30);
--找到年龄不是20和30的数据
SELECT * FROM class1 WHERE age NOT IN(20,30);

--找到年龄不是20的数据
SELECT * FROM class1 WHERE age !=20;

image

三、聚合查询(SELECT 函数(...) FROM ...)

image

1.COUNT函数

--SELECT COUNT(*) FROM 表名,使用该语句会计算为NULL的语句
--查询表中的总行数
SELECT COUNT(*) FROM class1;

--SELECT COUNT(字段) FROM 表名,使用该语句不会计算为NULL的语句
--查询score除了NULL的行数
SELECT COUNT(score) FROM class1;

image

2.SUM函数

--SELECT SUM(字段) FROM 表名,使用该语句不会计算为NULL的语句
--字段中值的总和
SELECT SUM(score) FROM class1;

image

3.AVG函数

--SELECT AVG(字段) FROM 表名,使用该语句不会计算为NULL的语句
--字段中值的平均数
SELECT AVG(score) FROM class1;

image

4.MAX函数

--SELECT MAX(字段) FROM 表名
--字段中值的最大值
SELECT MAX(age) FROM class1;

image

5.MIN函数

--SELECT MIN(字段) FROM 表名
--字段中值的最大值
SELECT MIN(age) FROM class1;

image

四、分组查询(SELECT ... FROM ...GROUP BY...)

1.单独使用

--SELECT 字段 FROM 表名 GROUP BY 字段
SELECT age FROM class1 GROUP BY age;

image

2.与聚合函数一起使用

--SELECT 字段1,函数1(字段2),函数2(字段3) FROM 表名 GROUP BY 字段
SELECT age,AVG(score),SUM(age) FROM class1 GROUP BY age;

image

3.与HAVING关键字一起使用

--SELECT 字段1,函数1(字段2) FROM 表名 GROUP BY 字段 HAVING表达式
SELECT age,SUM(age) FROM class1 GROUP BY age HAVING SUM(age)<30;

image

注意:当使用 GROUP BY时 WHERE 和 HAVING的区别

WHERE是在GROUP BY分组之前进行的条件判断,HAVING是在GROUP BY分组之后进行的。

SELECT age,AVG(score) FROM class1 WHERE age<24 GROUP BY age;
SELECT age,AVG(score)FROM class1 WHERE age<24 GROUP BY age HAVING AVG(score)=92;

image

五、排序查询(SELECT ... FROM ...ORDER BY...)

1.ASC(默认)

--SELECT 字段 FROM 表名 ORDER BY 字段 [参数];
SELECT score FROM class1 ORDER BY score ;
SELECT score FROM class1 ORDER BY score ASC;

--SELECT 字段1,字段2 FROM 表名 ORDER BY 字段1 [参数],字段2 [参数];
SELECT score,age FROM class1 ORDER BY score,age;
SELECT score,age FROM class1 ORDER BY score ASC,age ASC;

image

2.DESC

--SELECT 字段 FROM 表名 ORDER BY 字段 [参数];
SELECT score FROM class1 ORDER BY score DESC;

image

六、限量查询(SELECT * FROM ... LIMIT...)

--SELECT * FROM 表名 LIMIT [OFFSET偏移量],每一页多少条记录;
SELECT * FROM class1 LIMIT 2;
SELECT * FROM class1 LIMIT 0,2;
SELECT * FROM class1 LIMIT 2,2;
SELECT * FROM class1 LIMIT 4,2;

image

七、内置查询(SELECT 函数(...) FROM ...)

1.数学函数

image

2.字符串函数

image

3.CONCAT函数

--SELECT CONCAT(字段1,连接符,字段2) FROM 表名,若连接符为字符,需要用''将连接符进行一个包裹。
#对输入的字段进行连接
SELECT CONCAT(name,666,score,666,id) FROM class1;
SELECT CONCAT(name,'_',score,'_',id) FROM class1;

image

4.IF()函数

--SELECT 字段1,IF(表达式,返回值1,返回值2) FROM 表名,类似于三目表达式,表达式成立返回返回值1,不成立返回返回值2。
SELECT name,IF(ISNULL(score),'缺考',score) FROM class1;

image

八、设置别名(AS

1.为数据表取别名

--SELECT * FROM 表名 [AS] '别名';
SELECT * FROM class1 c1;
SELECT * FROM class1 AS c1;

#使用别名的方法
SELECT * FROM class1 c1 WHERE cl.score = 92;

image

2.为字段取别名

--SELECT 字段1 [AS] 别名,字段2[AS] FROM 表名;
SELECT name '名字' FROM class1;
SELECT name AS '名字' FROM class1;

SELECT id '学号',name'名字',gender '性别',age '年龄',score '成绩' FROM class1;

image

posted @ 2024-10-03 22:24  luxiaolim  阅读(34)  评论(0)    收藏  举报