DQL:数据库查询语句

目录

 一.常用DQL语句:数据库查询语句

1.最基本的通用查询:查询全表数据

2.查询指定列

3.通过起别名进行查询

1)对列起别名

AS可以省略

2)对表起别名(表的名字比较长),同时给列起别名

 4.带条件查询

1)where后面跟单个条件,可以使用赋值运算符=,比较运算符<,>,<=,>=,!=

2)where后面跟多个条件,并列条件或者或关系的条件

3)where条件后面可以跟某个字段为null的格式

 5.模糊查询

1 )匹配任意字符:%

 2 )一个下划线代表一个任意字符值:_

 6.聚合函数查询

1)常见的聚合函数

7.复杂查询和聚合查询一起使用

8.排序查询

1)单个字段排序

 2)多个字段排序

9.homework

 1)查询表中所有学生的信息。

 2)查询表中所有学生的姓名和英语成绩

 3)过滤表中重复数据。(去重的关键字 distinct)

 4)统计每个学生的总分

 5)在所有学生总分数上加10分特长分。

 6)使用别名表示学生分数。

 7)查询姓名为行哥的学生成绩

  8)查询英语成绩大于90分的同学

  9)查询总分大于200分的所有同学

 10)查询英语分数在 80~90之间的同学。

 11)查询数学分数为89,90,91的同学。

 12)查询所有姓白的学生英语成绩。

 13) 查询数学分>80并且语文分>80的同学

 14)查询英语>80或者总分>200的同学

 15)对数学成绩升序排序

 16)对总分降序排序,然后再按数学从高到低的顺序输出

 17)对姓白的学生成绩排序输出(排序规则自己定义)总分升序

 18)查询数学成绩大于等于平均分的所有学生信息

  19)查询出英语成绩最高分的学生信息

 20)模糊查询出学生姓名中第二个字是金的学生信息

 21)查询出英语成绩平均分是多少

22)查询出数学总分是多少

23)查询学生表中有多少记录


创建库

-- 创建库
CREATE DATABASE mysql_01;

选择库mysql_01

-- 选择库
USE mysql_01;

创建表

-- 创建表
CREATE TABLE student (
  id INT,
  -- 编号
  NAME VARCHAR (20),
  -- 姓名
  age INT,
  -- 年龄 
  sex VARCHAR (5),
  -- 性别 
  address VARCHAR (100),
  -- 地址 
  math INT,
  -- 数学
  english INT-- 英语 
);

查看全表数据

-- 查看全表数据
SELECT * FROM student;

插入数据

-- 插入数据
INSERT INTO student (
  id,
  NAME,
  age,
  sex,
  address,
  math,
  english
) 
VALUES
  (1, '唐僧', 55, '男', ' 杭州', 66, 78),
  (2,'孙悟空',45,'男','深圳',98,87),
  (3,'猪八戒',55,'男','香港',56,77),
  (4, '沙僧', 20, '男', '湖南', 76, 65),
  (5,'柳青',20,'男','湖南',86,NULL),
  (6, '柳红', 19, '女', '香港 ', 99, 99),
  (7,'小燕子',22,'女','香港',99,99),
  (8,'德玛西亚',18,'男','南京',56,65) ;

 一.常用DQL语句:数据库查询语句

查询不会对数据库中的数据进行修改.只是一种显示数据的方式

1.最基本的通用查询:查询全表数据

使用*表示所有列

SELECT * FROM 表名;

-- 查询全表数据
-- SELECT * FROM 表名;
-- 查询所有学生
SELECT * FROM student;

注:实际开发中,写sql的时候,不能书写*,书写具体的字段名称

SELECT 
  id,
  NAME,
  age,
  sex,
  address,
  math,
  english 
FROM
  student ;

2.查询指定列

SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;

SELECT 
  address
FROM
  student ;

上述运算结果为

地址字段出现数据冗余,也就是重复性太多了

 通过关键字distinct,将地址字段冗余数据去重

SELECT DISTINCT 
  address 
FROM
  student ;

运算结果为

3.通过起别名进行查询

使用别名的好处: 显示的时候使用自己需要的名字,并不修改表的结构

1)对列起别名

SELECT `字段名 1` AS 别名, `字段名 2` AS 别名... FROM 表名;

SELECT 
  student.id AS '编号',
  -- 编号
  student.`name` AS '姓名',
  -- 姓名
  student.`age` AS '年龄',
  -- 年龄
  student.`sex` AS '性别',
  -- 性别
  student.`address` AS '地址',
  -- 地址
  student.`math` AS '数学成绩',
  -- 数学成绩
  student.`english` AS '英语成绩' -- 英语成绩
FROM
  student ;

AS可以省略

SELECT 
  student.id '编号',
  -- 编号
  student.`name` '姓名',
  -- 姓名
  student.`age` '年龄',
  -- 年龄
  student.`sex` '性别',
  -- 性别
  student.`address` '地址',
  -- 地址
  student.`math` '数学成绩',
  -- 数学成绩
  student.`english` '英语成绩' -- 英语成绩
FROM
  student ;

2)对表起别名(表的名字比较长),同时给列起别名

1)查询全表:SELECT  字段名1  AS 别名, 字段名2 AS 别名... FROM 表名 AS 别名;

SELECT 
  s.id AS '编号',
  -- 编号
  s.name AS '姓名',
  -- 姓名
  s.age AS '年龄',
  -- 年龄
  s.sex AS '性别',
  -- 性别
  s.address AS '地址',
  -- 地址
  s.math AS '数学成绩',
  -- 数学成绩
  s.english AS '英语成绩' -- 英语成绩
FROM
  student AS s ;

可以给字段名带上`符号,如下述的代码,也可以不带上`

as可以省略

SELECT 
  s.id '编号',
  -- 编号
  s.`name` '姓名',
  -- 姓名
  s.`age` '年龄',
  -- 年龄
  s.`sex` '性别',
  -- 性别
  s.`address` '地址',
  -- 地址
  s.`math` '数学成绩',
  -- 数学成绩
  s.`english` '英语成绩' -- 英语成绩
FROM
  student s ;

2)查询的时候可以将字段为整数类型的数据进行求和

需求:查询学院的id,name,age,sex以及数据和英语成绩的总分

-- 需求:查询学院的id,name,age,sex以及数据和英语成绩的总分
SELECT 
  id '学生编号',
  NAME '学生姓名',
  age '学生年龄',
  sex '学生性别',
  (math + english) '总分' 
FROM
  student ;

 根据运算结果可以发现学生编号为5的柳青总分为null空值

注意事项:两个整数类型求和,如果其中一个字段是null值,求和结果为null(没意义)空值

在mysql中有函数ifnull(字段名称,给期望值);

如果当前字段名称为null值,可以给它一个期望值

SELECT 
  id '学生编号',
  NAME '学生姓名',
  age '学生年龄',
  sex '学生性别',
  (math + IFNULL(english, 0)) '总分' -- 当英语成绩是null空值,给一个期望值0
FROM
  student ;

 4.带条件查询

select 指定的字段名称 from 表名 where 条件;

1)where后面跟单个条件,可以使用赋值运算符=,比较运算符<,>,<=,>=,!=

赋值运算符

需求:查询年龄是20岁的学生的所有信息

SELECT 
  * 
FROM
  student 
WHERE age = 20 ;

比较运算符

 需求:查询学生的年龄大于等于20 的学生

SELECT 
	NAME '学生姓名',
	age '学生年龄',
	sex '学生性别',
	(math + IFNULL(english, 0)) '总分' 
FROM
	student 
WHERE 
	age <= 20 ;

 需求:查询学生年龄不为20岁的学生所有信息!=

语法1:

SELECT 
  * 
FROM
	student 
WHERE 
	age != 20 ;

语法2: 针对上述语法,在mysql中判断某个条件不等于用<>

SELECT 
  * 
FROM
	student 
WHERE 
	age <> 20 ;

2)where后面跟多个条件,并列条件或者或关系的条件

a.并列条件

语法1:可以使用逻辑运算符&&

需求:查询学生年龄在20岁到30岁的学生所以信息

SELECT
    *
FROM
	student
WHERE
	age>=20 && age<=30;

语法2:在mysql中多个并列条件,推荐使用关键字and

where 字段名称1 条件1 and 字段名称2 条件2

SELECT
   *
FROM
	student
WHERE
	age>=20 AND age<=30;

语法3:还可以使用between  and

where 字段名称 between 值1 and 值2; 等价于 字段名称>=值1 and 字段名称<=值2;

SELECT
   *
FROM
	student
WHERE
	age
	BETWEEN 20 AND 30;

结果都是

b.或的关系

语法1:可以使用逻辑运算符||

需求:查询学生年龄是18岁或者20岁或者45岁的学生所有信息

SELECT
  *
FROM
	student
WHERE
	age=18 || age=20 || age=45;

语法2:在mysql中多个或的关系哦,推荐使用关键字or

SELECT
   *
FROM
	student
WHERE
	age=18
	OR 
	age=20
	OR 
	age=45;

语法3:还可以使用in集合语句

where 字段名称 in(值1,值2,值3,...);
 

SELECT
   *
FROM
	student
WHERE
	age IN(18,20,45);

结果都为

 3)where条件后面可以跟某个字段为null的格式

语法1:where 字段名称 is null

SELECT
	id '编号',
	NAME '学生姓名',
	sex '学生性别',
	address '地址',
	math '数学成绩',
	english '英语成绩'
FROM
	student
WHERE
	english IS NULL;

 语法2:where 字段名称 is not null

SELECT
	id '编号',
	NAME '学生姓名',
	sex '学生性别',
	address '地址',
	math '数学成绩',
	english '英语成绩'
FROM
	student
WHERE
	english IS NOT NULL;

 5.模糊查询

关键字:like

1 )匹配任意字符:%

语法:select 指定字段列表 from 表名 where like '%字符%'

需求:模糊查询姓柳的学生所有信息
 

SELECT
   *
FROM
	student
WHERE
	NAME
	LIKE '%柳%';

 2 )一个下划线代表一个任意字符值:_

需求:查询姓名是两个字符的学生的信息

语法:where 字段名称 like '_几个字符就是几个下划线_';

SELECT
    *
FROM
	student
WHERE
	NAME
	LIKE '__';

%和_ 两个可以结合使用

需求:模糊查询学生姓名第二个字为悟的学生信息

SELECT
   *
FROM
	student
WHERE
	NAME LIKE '%_悟%';

  

 6.聚合函数查询

针对单行单列的函数

语法:select 聚合函数(字段名称) from 表名;

1)常见的聚合函数

a.查询当前表的记录:count(字段名称)

SELECT
	COUNT(english) AS '总记录数'
FROM
	student;

 

由于english中含有null所以总的记录为7,但实际上应该是8,需要使用ifnull(字段名称,期望值);

SELECT
	COUNT(IFNULL(english,0)) AS '总记录数'
FROM
	student;

 

 通用的方法是用非业务字段id进行查询

SELECT
	COUNT(id) AS '总记录数'
FROM
	student;

 

b.针对某列字段值求和(整数):sum(字段名称)

需求:查询数学成绩总和

SELECT
	SUM(math) AS '数学总成绩'
FROM
	student;

  

 c.平均分:avg(字段名称)

需求:查询数学成绩平均分

SELECT
	AVG(math) AS '数学成绩平均分'
FROM
	student;

 

d.最高分:max(字段名称)

   最低分:min(字段名称)

SELECT
	MAX(math) AS '数学最高分',
	MIN(math) AS '数学最低分'
FROM
	student;

  

7.复杂查询和聚合查询一起使用

语法:where 字段名称 比较运算符(select 复合函数查询)

 需求:查询出数学成绩大于平均分的学生信息

SELECT
	*
FROM
	student
WHERE
	math>(SELECT AVG(math) FROM student);

8.排序查询

关键字:order by

1)单个字段排序

语法:语法:select 字段列表 from 表名 order by 字段名称 排序规则

 排序规则:

        升序(默认值):asc

        降序;desc

需求:数学成绩升序排序,查询所有信息

SELECT 
    *
FROM 
    student
ORDER BY 
math  ASC; -- math后面如果没有带排序条件,默认就是升序

 需求:将英语成绩降序排序查询所有信息

SELECT
	*
FROM
	student
ORDER BY
	english DESC;

 2)多个字段排序

 语法:select 字段列表 from 表名 order by 字段名称1 排序规则1 ,字段名称2 排序规则2 ;

 需求:查询数学成绩降序,英语成绩是升序的所有学生信息

 如果数学成绩相同,按照英语成绩排序规则进行操作

 如果英语成绩有null,按照数学排序规则进行操作

SELECT
    *
FROM 
   student3
ORDER BY math DESC ,english ASC ;

9.homework

创建库

-- 创建库
CREATE DATABASE mysql_01;

选择库

-- 选择库
USE mysql_01;

创建表

-- 创建表
CREATE TABLE student(
	id INT,   -- id编号
	NAME VARCHAR(20), -- 姓名
	chinese INT,  -- 语文
	english INT, -- 英语
	math INT -- 数学
);

插入数据

INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金莲',67,53,95);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'凤姐',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺财',88,98,92);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黄',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30);

1)查询表中所有学生的信息。

SELECT
    *
FROM
	student;

 

 2)查询表中所有学生的姓名和英语成绩

SELECT
	NAME,
	english '英语成绩'
FROM
	student;

 

  3)过滤表中重复数据。(去重的关键字 distinct)

SELECT
	DISTINCT chinese,english,math
FROM
	student;

 

 4)统计每个学生的总分

SELECT
	id '学生编号',
	NAME '学生姓名',
	(chinese+english+math) '总分'
FROM
	student;

 

 5)在所有学生总分数上加10分特长分。

SELECT
	id '学生编号',
	NAME '学生姓名',
	(chinese+english+math+10) '总分+10分特长分'
FROM
	student;

 

 6)使用别名表示学生分数。

SELECT
	id '学生编号',
	NAME '学生姓名',
	chinese '语文成绩',
	english '英语成绩',
	math '数学成绩'
FROM
	student;

 

 7)查询姓名为行哥的学生成绩

SELECT
	*
FROM
	student
WHERE
	NAME='行哥';

 

  8)查询英语成绩大于90分的同学

SELECT
	*
FROM
	student
WHERE
	english>90;

 

  9)查询总分大于200分的所有同学

SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) '总分'
FROM
	student
WHERE
	(chinese+english+math)>200;

 

 10)查询英语分数在 80~90之间的同学。

SELECT
	*
FROM
	student
WHERE
	english
	BETWEEN 80
	AND 90;

 

 11)查询数学分数为89,90,91的同学。

SELECT
	*
FROM
	student
WHERE
	math
	IN(89,90,91);

 

 12)查询所有姓白的学生英语成绩。

SELECT
	NAME,
	english
FROM
	student
WHERE
	NAME LIKE '%白%';

 

 13) 查询数学分>80并且语文分>80的同学

SELECT
	*
FROM
	student
WHERE
	math>80 AND chinese>80;

 

 14)查询英语>80或者总分>200的同学

SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) '总分'
FROM
	student
WHERE
	english>80
	OR
	(chinese+english+math)>200;

 

 15)对数学成绩升序排序

SELECT
	*
FROM
	student
ORDER BY
	math ASC;

 

 16)对总分降序排序,然后再按数学从高到低的顺序输出

SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) AS '总分'
FROM
	student
ORDER BY
	(chinese+english+math) DESC,math DESC;

 

 17)对姓白的学生成绩排序输出(排序规则自己定义)总分升序

SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) AS '总分'
FROM
	student
WHERE
	NAME LIKE '白%'
ORDER BY
	(chinese+english+math) ASC;

  

 18)查询数学成绩大于等于平均分的所有学生信息

SELECT
	*
FROM
	student
WHERE
	math>(SELECT AVG(math) FROM student);

  

  19)查询出英语成绩最高分的学生信息

SELECT
	*
FROM
	student
WHERE
	english=(SELECT MAX(english) FROM student);

  

 20)模糊查询出学生姓名中第二个字是金的学生信息

SELECT
	*
FROM
	student
WHERE 
	NAME LIKE '_金%';

  

 21)查询出英语成绩平均分是多少

SELECT
	AVG(english) '英语平均分'
FROM
	student;

  

22)查询出数学总分是多少

SELECT
	SUM(math) '数学总分'
FROM
	student;

  

23)查询学生表中有多少记录

SELECT
	COUNT(id) AS '学生表总记录'
FROM
	student;

  

全部代码:

-- 创建库
CREATE DATABASE mysql_01;
-- 选择库
USE mysql_01;
-- 创建表
CREATE TABLE student(
	id INT,   -- id编号
	NAME VARCHAR(20), -- 姓名
	chinese INT,  -- 语文
	english INT, -- 英语
	math INT -- 数学
);
-- 查看表数据
SELECT
    *
FROM
	student;
-- 插入数据
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金莲',67,53,95);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'凤姐',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺财',88,98,92);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黄',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30);
-- 1.查询表中所有学生的信息。
SELECT
    *
FROM
	student;
-- 2.查询表中所有学生的姓名和英语成绩。
SELECT
	NAME,
	english '英语成绩'
FROM
	student;
-- 3.过滤表中重复数据。(去重的关键字 distinct)
-- 过滤语文重复数据
SELECT
	DISTINCT chinese,english,math
FROM
	student;
-- 过滤英语重复数据
SELECT
	DISTINCT english
FROM
	student;
-- 过滤数学重复数据
SELECT
	DISTINCT math
FROM
	student;
-- 4.统计每个学生的总分

SELECT
	id '学生编号',
	NAME '学生姓名',
	(chinese+english+math) '总分'
FROM
	student;
-- 5..在所有学生总分数上加10分特长分。

SELECT
	id '学生编号',
	NAME '学生姓名',
	(chinese+english+math+10) '总分+10分特长分'
FROM
	student;
-- 6.使用别名表示学生分数。
SELECT
	id '学生编号',
	NAME '学生姓名',
	chinese '语文成绩',
	english '英语成绩',
	math '数学成绩'
FROM
	student;
-- 7.查询姓名为行哥的学生成绩
SELECT
	*
FROM
	student
WHERE
	NAME='行哥';
-- 8.查询英语成绩大于90分的同学
SELECT
	*
FROM
	student
WHERE
	english>90;
-- 9.查询总分大于200分的所有同学
SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) '总分'
FROM
	student
WHERE
	(chinese+english+math)>200;
-- 10.查询英语分数在 80-90之间的同学。
SELECT
	*
FROM
	student
WHERE
	english
	BETWEEN 80
	AND 90;
-- 11.查询数学分数为89,90,91的同学。
SELECT
	*
FROM
	student
WHERE
	math
	IN(89,90,91);
-- 12.查询所有姓白的学生英语成绩。
SELECT
	NAME,
	english
FROM
	student
WHERE
	NAME LIKE '%白%';
-- 13. 查询数学分>80并且语文分>80的同学
SELECT
	*
FROM
	student
WHERE
	math>80 AND chinese>80;
-- 14.查询英语>80或者总分>200的同学
SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) '总分'
FROM
	student
WHERE
	english>80
	OR
	(chinese+english+math)>200;
-- 15.对数学成绩升序排序
SELECT
	*
FROM
	student
ORDER BY
	math ASC;
-- 16.对总分降序排序,然后再按数学从高到低的顺序输出
SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) AS '总分'
FROM
	student
ORDER BY
	(chinese+english+math) DESC,math DESC;
-- 17.对姓白的学生成绩排序输出(排序规则自己定义)总分升序
SELECT
	id,
	NAME,
	chinese,
	english,
	math,
	(chinese+english+math) AS '总分'
FROM
	student
WHERE
	NAME LIKE '白%'
ORDER BY
	(chinese+english+math) ASC;
-- 18.查询数学成绩大于等于平均分的所有学生信息
SELECT
	*
FROM
	student
WHERE
	math>(SELECT AVG(math) FROM student);
-- 19.查询出英语成绩最高分的学生信息
SELECT
	*
FROM
	student
WHERE
	english=(SELECT MAX(english) FROM student);
-- 20.模糊查询出学生姓名中第二个字是金的学生信息
SELECT
	*
FROM
	student
WHERE 
	NAME LIKE '_金%';
-- 21.查询出英语成绩平均分是多少
SELECT
	AVG(english) '英语平均分'
FROM
	student;
-- 22.查询出数学总分是多少
SELECT
	SUM(math) '数学总分'
FROM
	student;
-- 23.查询学生表中有多少记录
SELECT
	COUNT(id) AS '学生表总记录'
FROM
	student;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值