数据库查询语句总结(全网最详细,用的是MySQL和SQLyog)
首先创建两个表(用作测试):tb_student、tb_classCREATE TABLE tb_class(cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(20) NOT NULL);CREATE TABLE tb_student(sid INT PRIMARY KEY AUTO_INCREMENT,sname...
首先创建两个表(用作测试):tb_student、tb_class
CREATE TABLE tb_class(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20) NOT NULL
);
CREATE TABLE tb_student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
gender CHAR(1),
age INT,
cid INT,
FOREIGN KEY(cid) REFERENCES tb_class(cid)
);
一.DQL基础查询
关键字:select from
1、查询学生表中所有的数据
SELECT * FROM tb_student WHERE gender='男';
2.查询所有年龄在18到20岁的学生信息
SELECT * FROM tb_student WHERE age>=18 AND age<=20;
或者
SELECT * FROM tb_student WHERE age BETWEEN 18 AND 20;
3.查询出所有没有录入年龄的学生的信息
SELECT * FROM tb_student WHERE age IS NULL;
模糊查询关键字:like
通配符:
%: 代表任意个字符
_:代表一个字符
1.查询所有姓王的学生信息
SELECT * FROM tb_student WHERE sname LIKE '王%';
2.查询所有名字第二个字是杰的学生信息
SELECT * FROM tb_student WHERE sname LIKE '_杰%';
3.查询名字中有明的学生信息
SELECT * FROM tb_student WHERE sname LIKE '%明%';
二.DQL排序
排序关键字:order by
升序:默认/asc
降序:desc
1、查询所有学生的信息,要求按照学生的年龄从小到大的显示
SELECT * FROM tb_student ORDER BY age (ASC);
2. 查询所有学生的信息,要求按照学生的年龄从大到小的显示
SELECT * FROM tb_student ORDER BY age DESC;
3.查询年龄最大的三个学生信息
SELECT * FROM tb_student ORDER BY age DESC LIMIT 3;
前几个:limit 3;
函数:
聚合函数
主要对数据进行统计计算,返回单个值。
最大值:max()
最小值:min()
求和:sum()
数据条数:count()
平均值:avg()
1.查询学生平均年龄
SELECT AVG (age) FROM tb_student;
三.DQL分组查询
将表数据按照指定条件进行分组,再对分组后的数据进行汇总。分组查询通常会使用聚合函数,对分组后的数据进行统计计算。
关键字:group by [having]
语法:select 要查询的内容 from 表名 group by 分组列 [having 筛选条件];
1、查询出每个班的学生人数
分析:cid相同的学生是同班同学,所以以cid来进行分组。统计每个组的数据条数。
SELECT cid,COUNT(*) FROM tb_student GROUP BY cid;
having和where的区别:
1、having是对分组后的数据进行筛选,where是对分组前的数据进行筛选
2、SQL语句中有having必定有group by,有group by不一定having
3、如果一个SQL语句中,既有where又有having,先执行where后执行having
4、where后面不能使用聚合函数,having只能使用聚合函数和分组列
四.DQL分页查询
关键字:limit
用法:
limit n:代表前n条数据
limit m,n:代表从第m条数据开始取n条数据,m是数据的索引
1、查询出学生表前三条数据
SELECT * FROM tb_student LIMIT 3;
2、如果每页显示3条数据,请查询出第二页的数据
SELECT * FROM tb_student LIMIT 3,3;
分页:现有条件,每页显示条数count,第几页page
计算:
page:1 2 3 4 5 ……
m: 0 3 6 9 12 ……
m = (page-1)*count
五.DQL连接查询
定义:通过连接条件同时查询出多张表的数据。
隐式内链接:把连接条件放到where关键字后面。
语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];
显式内连接:使用inner join来连接,将连接条件放到on后面。
语法:select 要查询的内容 from 表1 inner join 表2 on 连接条件 [where 筛选条件];
外连接
两张表中一张表作为基表,查询出该表所有的数据,另外一张表作为连接表,查询出该表与基表能够匹配的数据。如果基表数据匹配不上,就用null来填充。
语法:select 要查询的内容 from 基表 left join 连接表 on 连接条件 [where 筛选条件];
右外连接:
语法:select 要查询的内容 from 连接表 right join 基表 on 连接条件 [where 筛选条件];
六.子查询
当一个查询的结果是另一个查询需要的条件时,就需要使用子查询。
例如:
查询出年龄比张三大的学生的信息
方式一:
SELECT age FROM tb_student WHERE age >(SELECT age FROM tb_student WHERE sname='张三' );
方式二:
SELECT age FROM tb_student WHERE age>ANY(SELECT age FROM tb_student WHERE sname='张三');
更多推荐
所有评论(0)