提醒:设定下面的语句是在数据库名为 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. 查询所有字段
- SELECT 字段1,字段2,字段3.FROM 表名;
- 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]
- 单独使用;
- 与 GROUP_CONCATO函数一起使用;
- 与聚合函数一起使用;
- 与HAVING 一起使用(限制!输出的结果);
- 与 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;
推荐
欢迎关注我的公众号,不定期推送优质的文章,
微信扫一扫下方二维码即可关注。