[JavaWeb]SQL介绍-DQL查询数据

SQL介绍-DQL查询数据

  • 一.基础查询
  • 二.条件查询
  • 三.排序查询
    • 1.聚合函数
    • 2.分组查询
  • 四.分页查询

DQL查询基础的语法结构如下:

SELECT
  字段列表
FROM
  表名列表
WHERE
  条件列表
GROUP BY
  分组字段
HAVING
  分组后条件
ORDER BY
  排序字段
LIMIT
  分页限定

一.基础查询

说明 语法
查询多个字段 SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;
起别名 列名 AS 别名(AS也可以省略)
-- 先建立新的表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int,-- 编号
name varchar(20),-- 姓名
age int,-- 年龄
sex varchar(5),-- 性别
address varchar(100),-- 地址,
math double(5,2),-- 数学成绩,
english double(5,2),-- 英语成绩
hire_date date -- 入学时间
);

-- 添加数据
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马运',55,'男','杭州',66,78,'1995-09-01'), 
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
SELECT * FROM stu;
-- 基础查询
-- 查询name age两列
SELECT name,age FROM stu;

-- 查询所有列的数据,用*指代所有列的数据,但是不推荐使用
SELECT * FROM stu;

-- 查询地址信息,这时候查询出来的信息有重复记录
SELECT address FROM stu;

-- 去除重复可以通过DISTINCT关键字
SELECT DISTINCT address FROM stu;

-- 查询姓名,数学成绩,英语成绩,并用别名代替原有列名
-- 可以通过AS关键字来起别名,也可以省略
SELECT name AS 姓名,math 数学成绩,english 英语成绩 FROM stu;

二.条件查询

  • 条件查询的语法很简单但是要结合不同的条件表达式去使用
    SELECT 字段列表 FROM 表名 WHERE 条件列表;
符号 功能
\>, \< 大于, 小于
\>=, \<= 大于等于, 小于等于
= 等于
\<\> 或 != 不等于
BETWEEN ... AND ... 在某个范围内(都包含)
IN(...) 多选一
LIKE 占位符 模糊查询 _单个任意字符 %多个任意字符
IS NULL 是NULL
IS NOT NULL 不是NULL
AND 或 && 并且
OR 或|| 或者
NOT 或 !

解下来通过实际的需求来体验这些语句的作用

SELECT * FROM stu;
-- 查询年龄大于20岁的学院的信息
SELECT * FROM stu WHERE age > 20;

-- 查询年龄大于等于20的学员的信息
SELECT * FROM stu WHERE age >= 20;

-- 查询年龄大于等于20岁但是小于等于30岁的学员信息
SELECT id,name 姓名,age 年龄 FROM stu WHERE age>=20 AND age<=30;
SELECT * FROM stu WHERE age BETWEEN 20 AND 30;

-- 查询入学日期在1998-09-01到1999-09-01之间的学员信息
SELECT * FROM stu WHERE hire_date BETWEEN '1998-09-01' and '1999-09-01';

-- 查询年龄等于18岁的信息
SELECT * FROM stu WHERE age=18;

-- 查询年龄不等于18的学员信息
SELECT * FROM stu WHERE age != 18;
SELECT * FROM stu WHERE age <> 18;

-- 查询年龄等于18,20,22的信息
SELECT * FROM stu WHERE age=18 OR age=20 OR age=22;
SELECT * FROM stu WHERE age IN(18,20,22);

-- 查询英语成绩为NULL的信息(NULL值的比较不能使用=或!=)
SELECT * FROM stu WHERE english IS NULL;

-- 查询英语成绩不为NULL的信息
SELECT * FROM stu WHERE english IS NOT NULL;
  • 模糊查询LIKE 占位符
-- 模糊查询LIKE
-- 通配符 _ 代表单个任意字符
-- 通配符 % 代表多个任意字符

-- 查询姓马的学员信息
SELECT * FROM stu WHERE name LIKE '马%';

-- 查询名字第二个字是花的学员信息
SELECT * FROM stu WHERE name LIKE '_花%';

-- 查询名字中包含 德 的学员信息
SELECT * FROM stu WHERE name LIKE '%德%';

三.排序查询

  • 具体语法
    SELECT 字段列表 FROM 表名 ORDER BY 排序字段1 [排序方式1],排序字段2 [排序方式2] ...;
  • 排序方式
    ASC: 升序排列(默认值)
    DESC: 降序排列
  • 当有多个条件时,只有前边的条件一样的时候,才会根据后边的条件进行排序
-- 查询学员信息,按年龄进行升序排列
SELECT * FROM stu ORDER BY age ASC;
SELECT * FROM stu ORDER BY age; -- ASC是默认的,不进行指定也可以打到效果

-- 查询信息,按照数学成绩降序排列
SELECT * FROM stu ORDER BY math DESC;

-- 查询信息,按数学成绩降序排列,如果成绩一样,按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC,english ASC;

1.聚合函数

  • 聚合函数是把一列作为一个整体,进行纵向计算的.
    SELECT 函数名(列名) FROM 表;
函数名 作用
count(列名) 统计数量(一般选用不为NULL的列)
max(列名) 统计最大值
min(列名) 统计最小值
sum(列名) 求和
avg(列名) 求平均
-- 聚合函数
-- 查班上一共有多少个学生  COUNT(expr)统计的列名不能为NULL
/*
 count推荐的取值:
   1.主键
   2.*(新版MySQL中会计算效率最高的一列)
*/
SELECT COUNT(id) FROM stu;
SELECT COUNT(name) FROM stu;
-- COUNT(expr)统计的列名不能为NULL,空值是统计不到的会出错!!!
SELECT COUNT(english) FROM stu;


-- 查询数学成绩的最高分
SELECT MAX(math) FROM stu;
-- 查询数学成绩的最低分
SELECT MIN(math) FROM stu;
-- 查询数学成绩的平均分
SELECT AVG(math) FROM stu;

-- 查询英语成绩的最低分  注意NULL值不参与聚合函数的运算
SELECT MIN(english) FROM stu;

2.分组查询

  • 基本语法
    SELECT 字段列表 FROM 表名 [WHERE 分组前限定条件] GROUP BY 分组字段名 [HAVING 分组后条件过滤]
    注意分组之后,查询的字段为聚合函数和分组字段,查询其他的字段无任何意义
  • WHEREHAVING的区别
    – 执行时机不一样:WHERE是分组之前进行限定,不满足WHERE条件则不参与分组,HAVING是分组之后对结果进行过滤
    – 可判断的条件不一样: WHERE不能对聚合函数进行判断, HAVING可以
    – 执行顺序:WHERE> 聚合函数 > HAVING
-- 查询男同学和女同学各自的数学平均分
SELECT sex 性别,AVG(math) 平均分 FROM stu GROUP BY sex;

-- 查询男女各自的平均分以及各自的人数
SELECT sex 性别,AVG(math) 平均分,COUNT(*) 人数 FROM stu GROUP BY sex;

-- 查询男女各自的数学平均分,统计人数. 要求分数低于70分的人不参与分组
SELECT sex 性别,AVG(math) 数学均分,COUNT(*) 人数 FROM stu WHERE math>70 GROUP BY sex;

-- 查询男女各自的数学平均分,统计人数. 要求分数低于70分的人不参与分组,分组后人数大于2人的数据
SELECT sex 性别,AVG(math) 平均分,COUNT(*) 人数 FROM stu WHERE math>70 GROUP BY sex HAVING COUNT(*)>2;

四.分页查询

  • 语法 SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
  • 起始索引: 从零开始
    计算公式:起始索引=(当前页码-1) * 每页显示的条数
  • 分页查询是MySQL的方言
    Oracle分页查询使用rownumber
    SQL Server分页查询使用top
-- 从0开始查询3条数据
SELECT * FROM stu LIMIT 0,3;

-- 每页显示3条数据,查询第一页
SELECT * FROM stu LIMIT 0,3;

-- 每页显示3条数据,查询第二页
SELECT * FROM stu LIMIT 3,3;

-- 每页显示3条数据,查询第三页
SELECT * FROM stu LIMIT 6,6;

B站视频课程
笔记与源码文件

你可能感兴趣的:(JavaWeb笔记,sql,数据库,大数据)