玖叶教程网

前端编程开发入门

工欲善其事必先利其器——MySQL数据库(2),查询操作

  • 一般查询
  • 查询所有字段
select * from 表名;
  • 查询指定字段
select 列1,列2,... from 表名;
  • 使用 as 给字段起别名
select 字段 as 别名 ... from 表名;
  • 使用 as 给表起别名
select 别名.字段 .... from 表名 as 别名;
在当前的sql 语句中 临时的给students 起了一个别名叫做s
错误: select students.name, students.gender, students.age from students as s;
select s.name, s.gender, s.age from students as s; # 临时的给students 起了一个别名叫做s
  • sql语句完全的形式

只有正在使用当前数据库, 并且查找的数据表就在当前数据库中,才可以省略数据库名

数据表名什么时候不可以省略: 当一个sql语句中出现了多个数据表, 并且查询的字段在多个表中并且字段名相同, 此时表名不能够省略

例如查询 classes 表和 students 表中的name:
错误: select name,name from classes,students;
select students.name,classes.name from classes,students;
  • 消除重复行
distinct 字段, 修饰所有需要查询的字段
select distinct 字段 from 表名;
  • 条件查询
  • 比较运算符
 ">" : 查询年龄大于 18 的信息
 select * from 表名 where age > 18;
 "<"
 ">="
 "<="
 "=":注意 SQL 中等于就是 "=",不是 "=="
 "!=" 或 "<>"
  • 逻辑运算符
 "and":18 岁以上的女性
 select * from 表名 where age > 18 and gender = "女";
 "or":18 岁以上或者为女性
 select * from 表名 where age > 18 or gender = "女";
 "not":年龄不是 18 岁的信息
 select * from students where age != 18;
 select * from students where not age = 18;
  • 模糊查询
 "like"
 % 表示任意字符可有可无
 查询姓名中有'黄'的名字
 select * from students where name like "%黄%";
 _ 表示任意一个字符
 查询有2个字的名字
 select * from students where name like "__";
 "rlike":正则
 查询以黄开始的姓名
 select * from students where name rlike "^黄.*";
  • 范围查询
 "in":表示在一个非连续的范围内
 查询年龄为 18 和 34 的学生
 select * from students where age = 18 or age = 34;
 select * from students where age in (18,18,34);
 "not in":表示不再连续的范围内
 查询年龄不是 18 和 34 的学生
 select * from students where age not in (18,34);
 "between ... and ...":表示在一个连续的范围内,两边都会包含,是闭区间.
 查询年龄在 18 到 34 之间的信息
 select * from students where age between 18 and 34;
 "not between ... and ...":表示不再一个连续的范围内
 ```
 - 空判断 null, 不能使用比较运算符
 ```
 select * from 表名 where 字段 is NULL;
 select * from 表名 where 字段 is not NULL;
 注意不能使用 not is
  • 排序
order by 字段 asc(升序)|desc(降序) 默认就是升序排序 asc 可以省略
  • 降序 desc
查询年龄在18到34岁之间的女性,身高从高到矮排序
select * from students where age between 18 and 34 and gender = 2 order by height desc;
order by 多个字段 order by age asc, height desc
查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
select * from students where age between 18 and 34 and gender = 2 order by height desc, age desc;
  • 聚合函数
 count(*) 以行单位来进行统计个数
 count(*) 效率更高, 效率略差:count(height)--> 获取对应的行--> 获取该行对应字段是否为NULL
 select count(*) from students; # 以行为统计单位
 select count(height) from students; # 以不为空的height字段对应的值作为统计单位
 ```
 - 最大值
 ```
 max()
 ```
 - 最小值
 ```
 min()
 ```
 - 求和
 ```
 sum()
 ```
 - 平均值
 ```
 avg()
 ```
 - 四舍五入
 ```
 round()
 计算所有人的平均年龄,保留2位小数
 select round(avg(age),2) from students;
  • 分组
分组的目的就是为了更加精细的做聚合统计操作
group by 字段1,字段2
查看有哪几种性别
select distinct gender from students;
select gender from students group by gender; # 将分组之后的标签查询出来
查询分组数据中的人的姓名
select gender, group_concat(name) from students group by gender;
查询同种性别中的姓名和身高
select gender,group_concat(name,":",height) from students group by gender;
查询平均年龄超过30岁的性别,以及姓名 
select gender,group_concat(name) from students group by gender having avg(age) > 30;
having 和 where 的区别
where: 对源数据做条件筛选
having: 是对分组之后的数据做进一步的筛选操作, 有having就一定有group by, 有 group by 不一定有having
  • 分页
limit start, count
start: 表示从哪里开始查询, start 默认值为0, 可以省略, 跳过多少条数据
count: 查询多少条
第1页
select * from students limit 0,4;
第2页
select * from students limit 4,4;
第3页
select * from students limit 8,4;
每页显示5个,显示第3页的信息, 按照年龄从小到大排序 start = (pagenum - 1) * count
错误: select * from students limit 10,5 order by age asc;
正确: select * from students order by age asc limit 10,5;
  • 连接查询
-- 连接查询 将两个表中的数据按照设置的连接条件进行筛选, 符合连接条件的数据才能够被筛选出来
table1 inner join table2 on 设置内连接条件 --> 内连接查询
select * from students inner join classes on students.cls_id = classes.id;
-- 按照分组的方式显示班级的学生
select classes.name,group_concat(students.name) from students inner join classes on students.cls_id = classes.id group by classes.name;
select c.name,group_concat(s.name) from students as s inner join classes as c on s.cls_id = c.id group by c.name;
-- 外连接查询: left join + right join
left join 左外连接查询
-- 查询每位学生对应的班级信息,不满足连接条件的数据会以NULL填充
select * from students left join classes on students.cls_id = classes.id;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言