对于数据库的查询语句,不像 增 删 改的语句比较少,故单独写一篇,(若有不正之处,还望大佬指正)
在知道了数据库的增删改的语句之后,接下来就是数据的查询,查询可简单的分为两大类:单表查询和多表查询。
对于单表查询大致可分为如下几种:
- 简单查询
// 查询表中的所有数据:
select * from 表名 // 比如查询student表中的所有数据 : select * form student
//查询表中的某列的数据:
select 列名 from 表名 //比如查询 student表中的sname列 :select sname from studnet
//查询表中的某列的数据,并去重:
select distinct 列名 from 表名 //比如查询student表中的sex列 :select distinct sex from student
//查询数据并给某列起别名:
select 列名 [as] '别名' ,... from 表名 // 比如 查询student表的sname列并起别名为:姓名 select sname '姓名' from student 显示信息就会以别名显示
// 查询结果并对列之间的数据做算术运算:
select 列名 运算符 列名 from 表名 // 计算student中的数学和英语总成绩 select math + english from student
- 条件查询
//语句为表名后加 where 条件
// 先介绍一下,条件语句中的SQL中的特别的语句: 1. between 数值1 and 数值2 :在数值1到数值2之间的数都满足条件,包括数值1和数值2 即:[数值1,数值2] 。2.in(值1,值2,值3,...)满足值1,或者是值2,或者是值3,...
//举几个例子吧;
// 查询student表中数学成绩在80-100之间的学生,包括 80和 100
select * from student where math between 80 and 100
//查询student表中数学成绩是 75,85,95 的同学
select * from student where math in(75,85,95)
//一些常见的运算符都是适合的 :>,<,>=,<= ,and,or,not (表示 && ,|| ,!) 等等...
select * from student where math > 80;
select * from student where math = 100 and english = 100 // 这是别人家的孩子
- 模糊查询
//关键字:like 语句 :字段 like ‘通配符’,其中 % 表示任意个字符,_ 表示单个字符
select * from student where ename = '张%' // 所有姓张的学生
select * from student where ename = '__' // 姓名为两个字的学生
- 聚合查询
//常见的有5种:统计指定列的记录数: count 记录不为null的总数:sum 计算数据中不为null的平均值:avg 找出数据中的最大值:max 找出最小值:min
select sid, max(math) from student // 找出学生中数学成绩最高的同学的sid
select count(*) from student //计算student表中有多少同学
select avg(english) from student //计算student中english的平均分
- 排序查询
// 分为两种 : 顺序和倒序
// 语法:order by 字段 desc /asc (降序/升序 ,若是asc 可省略不写 ,默认为升序)
select * from student order by math desc //student中,按照数学成绩降序排序。
select * from student order by english [asc] // 按照英语升序排序
- 分组查询
语法:group by 分组的字段
select sex count(*) from student group by sex //按照sex分组,并将分组之后的记录统计有多少个。
//若要对分组之后的数据再加以条件查询的话,要将where改为having再加条件。
- 分页查询
//语法: limit index,length
select * from studnet limit 0,5 // sid从0开始,只显示前5个记录
多表查询一般可分三种:
- 内连接(查询数据之间有关联的数据。)
//内连接分为隐式内连接和显式内连接
//隐式内连接:select 字段名 from 表1,表2,... where 条件
select * from employee e,department d where e.dept_id = d.id
//显式内连接:select 字段名 from 表1 inner join 表2 on 条件...
select * from employee e inner join department d on e.dept_id = d.id
- 外连接(先查询一个表的所有数据,再查询其他表的关联数据。可以查询出null数据)
//左外连接:select 字段名 from 表1 left join 表2 on 条件...(以表1为主)
select * from employee e left join department d on e.dept_id = d.id
//右外连接:select 字段名 from 表1 right join 表2 on 条件...(以表2为主)
select * from employee e right join department d on e.dept_id = d.id
- 子查询
/*一种查询技巧,没有固定语法,有些像查询嵌套,
子查询结果只要是 单列 ,肯定在 WHERE 后面作为 条件
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
子查询结果只要是 多列 ,肯定在 FROM 后面作为 表
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
*/
/因为数据需要准备的比较多,就不举例了。