MySQL:单表查询SQL语句

本文详细介绍了如何在MySQL数据库的t_student表中进行SQL操作,包括创建表、插入数据,以及各种查询语句如选择指定字段、范围查询、模糊查询、多条件查询、去重复、排序和分组等,还提到了性能优化和分页查询技巧。
摘要由CSDN通过智能技术生成

提醒:设定下面的语句是在数据库名为 db_student里执行的。
创建t_student表

CREATE TABLE t_student(
	id INT NOT NULL AUTO_INCREMENT,
	stuName VARCHAR(30) DEFAULT NULL,
	age INT,
	sex VARCHAR(4) DEFAULT NULL,
	gradeName VARCHAR(30) DEFAULT NULL,
	PRIMARY KEY(id)
);

为t_student表里添加一条数据

INSERT INTO t_student(stuName,age,sex,gradeName)VALUE('测试01',20,NULL,'大三');

1. 查询所有字段

  1. SELECT 字段1,字段2,字段3.FROM 表名;
  2. SELECT*FROM 表名;
SELECT id,stuName,age,sex,gradeName FROM t_student;

SELECT stuName,id,age,sex,gradeName FROM t_student;/*改变查询表结果的字段顺序*/

SELECT * FROM t_student;

2. 查询指定字段

SELECT 字段1,字段2,字段3._FROM 表名;

SELECT stuName,gradeName FROM t_student;/*查询指定字段*/

3. Where 条件查询

SELECT 字段1,字段2,字段3.FROM 表名 WHERE 条件表达式;

SELECT * FROM t_student WHERE id = 1;

SELECT * FROM t_student WHERE age>21;

4. 带IN 关键字查询

SELECT 字段1,,字段2,字段3…FROM 表名 WHERE 字段INOT] IN 元素1,元素2,元素3);

SELECT * FROM t_student WHERE age IN(20,23);

SELECT * FROM t_student WHERE age NOT IN(20,23);

sql 查询语句使用 in注意事项

在SQL查询中使用IN关键字时,要注意IN列表中的值数量不应过多,通常建议列表中的项数不要超过1000个项,因为超过这个数目可能会导致查询性能下降,甚至超出数据库的限制。

如果需要匹配的值非常多,可以考虑以下替代方案:

  • 使用临时表:将需要匹配的值先插入到一个临时表中,然后使用连接(JOIN)来代替IN。
  • 使用EXISTS:如果是子查询,可以考虑使用EXISTS代替IN。
  • 使用JOIN:如果可能,将需要匹配的值放入另一张表,然后使用JOIN来进行关联查询。

5. 带BETWEEN AND 的范围查询

SELECT 字段1,字段2,字段3.-FROM 表名 WHERE 字段 INOTI BETWEEN 取值 1 AND 取值2;


SELECT * FROM t_student WHERE age BETWEEN 20 AND 23;/*范围查询*/

SELECT * FROM t_student WHERE age NOT BETWEEN 20 AND 23;

6. 带LIKE 的模糊查询

, SELECT 字段1,字段2,字段3…FRONI 表名 WHERE 字段[NOT] LIKE “字符串”;
“%”代表任意字符;
“”代表单个字符;

SELECT * FROM t_student WHERE stuName LIKE'小强';/*模糊查询*/

SELECT * FROM t_student WHERE stuName LIKE'小强%';/*带有小强的*/

SELECT * FROM t_student WHERE stuName LIKE'小_';/*带有小的两个字段*/

SELECT * FROM t_student WHERE stuName LIKE'小__';/*带有小的三个字段*/

SELECT * FROM t_student WHERE stuName LIKE'%莉%';/*只要有莉的全部查询*/

7. 空值查询

SELECT 字段1,字段2,字段3.FROM 表名 WHERE 字段 IS [NOT] NULL,

SELECT * FROM t_student WHERE sex IS NULL;
SELECT * FROM t_student WHERE sex IS NOT NULL;

8. 带AND 的多条件查询

SELECT 字段1,字段 2.FROM 表名 WHERE 条件表达式 1 AND 条件表达式2[.AND 条件表达式口]

SELECT * FROM t_student WHERE gradeName ='大二' AND age = 20;

9. 带OR 的多条件查询

SELECT 字段1,字段2.FROM 表名 WHERE 条件表达式 1OR 条件表达式2[.OR 条件表达式 ]

SELECT * FROM t_student WHERE gradeName ='大二' OR age = 21;

10. DISTINCT 去重复查询

SELECT DISTINCT 字段名 FROM 表名;

SELECT gradeName FROM t_student;/*先查询gradeName全部的,方便对比去重效果*/
SELECT DISTINCT gradeName FROM t_student;/*去重复*/

11. 对查询结果排序

SELECT 字段1,字段 2.FROM 表名 ORDER BY 属性名[ASCDESC]

SELECT * FROM t_student ORDER BY age ASC;/*升序*/
SELECT * FROM t_student ORDER BY age DESC;/*降序*/

12. GROUPBY分组查询

GROUP BY 属性名[HAVING 条件表达式][WITH ROLLUP]

  1. 单独使用;
  2. 与 GROUP_CONCATO函数一起使用;
  3. 与聚合函数一起使用;
  4. 与HAVING 一起使用(限制!输出的结果);
  5. 与 WITH ROLLUP 一起使用(最后加入一个总和行);
SELECT * FROM t_student GROUP BY gradeName;/*单个使用毫无意义*/
SELECT gradeName ,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;/*聚合函数*/

SELECT gradeName ,COUNT(stuName)FROM t_student GROUP BY gradeName;/*聚合函数*/
SELECT gradeName ,COUNT(stuName)FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;/*聚合函数 对查询的结果筛选*/

SELECT gradeName ,COUNT(stuName)FROM t_student GROUP BY gradeName WITH ROLLUP;/*对查询的结果数量总计*/
SELECT gradeName ,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;

13. LIMIT 分页查询

SELECT 字段1,字段 2.FROM 表名 LINIT 初始位置,记录数;

SELECT * FROM t_student LIMIT 0,5;/*分页查询*/
SELECT * FROM t_student LIMIT 5,10;
SELECT * FROM t_student LIMIT 10,15;

推荐

欢迎关注我的公众号,不定期推送优质的文章,
微信扫一扫下方二维码即可关注。
在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值