MySQL高级语法---完整的select查询语句

目录

  • 1.完整的查询语法组成
    • 2.select [选项 all|distinct]
    • 3.字段表达式: 表示从数据源中查询哪些字段
    • 3.from字句
    • 4.where 子句
    • 5.group by 分组查询:
    • 6.having 子句
    • 7.order by 子句: 排序, 对数据源进行排序
    • 8.limit 子句

1.完整的查询语法组成

  1. select[选项 all(默认值:全部) | distinct(去重)]
  2. 字段表达式
  3. from 子句
  4. where 子句
  5. group by 子句
  6. having 子句
  7. order by 子句
  8. limit 子句;

sql完整的查询分为8个部分, 每个部分要么不写,要么必须写在正确的顺序上.

2.select [选项 all|distinct]

选项:
all : (默认值)全部
distinct :去重

3.字段表达式: 表示从数据源中查询哪些字段

写法:

  1. 单独列举字段名
    MySQL高级语法---完整的select查询语句_第1张图片
    MySQL高级语法---完整的select查询语句_第2张图片
select name,sex from student;
    • : 通配符,匹配所有的字段名
select * from student;
  1. 聚合函数
    count(),sum(),avg(),max(),min(),
    group_concat()—>将查询的内容生成 用 逗号 分隔的字符串
# 查询学生人数
	select count(*) from student;
  1. 为字段取别名: 字段名 as 别名 as可以省略
select count(*) as count from student;
select count(*)  count from student;

3.from字句

from 后面接的是数据源, 表示查询数据的来源.
数据源: 通常由 一张表,或多张表(指连表查询), 或子查询 组成.

连表查询:查询学生的姓名及其班级名和教室
SELECT `学生表`.name,`班级表`.class_name,`班级表`.class_room from `学生表`
join `班级表` on `学生表`.class_id= `班级表`.class_id;

4.where 子句

  • 语法: where 条件表达式

  • 作用: 使用用于对数据源进行过滤和筛选.

  • 过滤和筛选原理: 根据 “条件表达式” 的结果, 如果结果为True,数据被保留;如果结果为False结果被过滤调用;

select * FROM `学生表` where sex='女';
select * FROM `学生表` where 2;#查询所有数据

条件表达式的写法:

  1. 比较运算
    **> >= < <= **
    特殊: = != <> (也是不等于)
查询学生表中的男生
select * from `学生表` WHERE sex<>'女';
  1. 集合判断 in 和 not in
查询学生id为 2 5 7 的学生的信息
SELECT * FROM `学生表` WHERE id in (2,5,7);
  1. 模糊查询 : like
    语法: 字段名 like “%_关键字”
查询班级中名字有乔字的同学信息
SELECT * FROM `学生表` WHERE name like '%乔';
  1. 范围查询: between … and …
    语法: 字段名 between 小值 and 大值 , 包含边界值
    语法: 字段名 not between 小值 and 大值 , 不包含边界值
查询学生中年龄在18-19之间的学生信息
SELECT * FROM `学生表` WHERE age BETWEEN 18 and 19;
  1. is null 和 is not null : 判断字段值是否为null
    在MYSQL中,null与任意值进行比对,结果为False,甚至与自己比较都是False.
    只能通过: is null 和 is not null 判断字段值是否为 null;
查询学生中年龄在18-19之间的并且班级信息不为空的学生信息
SELECT * FROM `学生表` WHERE age BETWEEN 18 and 19 and class_id is not null;
  1. 逻辑运算
    与: and
    或: or
    非: not
查询学生中年龄大于18的并且班级信息不为空的学生信息
SELECT * FROM `学生表` WHERE age>18 and class_id is not null;

5.group by 分组查询:

语法: group by 字段
分组的目的: 为了统计结果
结合统计函数:
count()
sum()
avg()
max()
min()
group_concat() : 将组内字段的值通过,拼接成一个字符串
总计: 分组查询只能查找聚合函数以及分组的字段

例子: 求每个班级的人数, 每个班平均年龄,统计每个班的名单
SELECT class_id,COUNT(class_id) 班级人数,avg(age) 平均年龄,GROUP_CONCAT(name) 班级名单
FROM `学生表` where class_id is not null GROUP BY class_id;

6.having 子句

用于分组后的再过滤(用法和where一样,只是位置不同)
语法: having 条件表达式

案例:查询班级人数大于2的班级id
SELECT class_id,COUNT(class_id) as 班级人数
FROM `学生表` where class_id is not null GROUP BY class_id
HAVING 班级人数>2;

7.order by 子句: 排序, 对数据源进行排序

语法:

  • order by 字段 [规则 asc|desc], 字段2 [规则];
    说明:
  1. asc 默认 升序|desc 降序
  2. 按照多个字段排序,先排好第一个,在此基础上的分组的部再按第二个字段排序.
查询学生信息,要求按照年龄降序排列
SELECT * from `学生表` where class_id is not null ORDER BY age desc ;

8.limit 子句

限制查询结果的条数,作用是减轻数据库服务器的压力.
语法: limit start,length;
表示 从开始索引start(默认0)位置查起,总共查length条记录
应用:处理分页
查询学生信息: 每页显4条

第一页
SELECT * from `学生表` limit 0,4;
第二页
SELECT * from `学生表` limit 4,4;
第n页
SELECT * from `学生表` limit (n-1)*4,4;

MySQL高级语法---完整的select查询语句_第3张图片
基础传送—>MySQL基础

你可能感兴趣的:(MySQL,笔记)