数据库知识点(2)

目录

客户端图形化工具:SQLYog

DML:增删改表中数据

1. 添加数据

2.删除数据

3.修改数据

DQL:查询表中的记录

1.语法:

2. 基础查询

1. 多个字段的查询

2. 去除重复:

扫描二维码关注公众号,回复: 15171746 查看本文章

3. 计算列

4. 起别名

3. 条件查询

1. where子句后跟条件

2. 运算符

DQL:查询语句

1. 排序查询

2. 聚合函数

3. 分组查询

4. 分页查询


客户端图形化工具:SQLYog

DML:增删改表中数据

1. 添加数据

语法:

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

注意:

1. 列名和值要一一对应

2. 如果表名后不定义列名,则默认给所有列添加值

insert into 表名 values(值1,值2,...值n);

3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

2.删除数据

语法:

delete from 表名 [where 条件]

注意:

1. 如果不加条件,则删除表中所有记录。

2. 如果要删除所有记录

(1)delete from 表名;-- 不推荐使用。有多少条记录就会执行多少次删除操作
(2)truncate table 表名; -- 先删除表,然后再创建一张一样的表

3.修改数据

语法:

update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
例如:
UPDATE student SET age = 28,score = 100 WHERE id = 3;

注意:

如果不加任何条件,则会将表中全部记录全部修改。 

DQL:查询表中的记录

select * from 表名;

1.语法:

select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组之后的条件
order by
    排序
limit
    分页限定

2. 基础查询

1. 多个字段的查询

select 字段名1,字段名2... from 表名

注意: 

        1. 如果不加条件,则删除表中所有记录。
        2. 如果要删除所有记录
            delete from 表名; -- 不推荐使用。

2. 去除重复:

distinct
例如:
-- 去除重复的结果集
SELECT DISTINCT address FROM student2;

3. 计算列

        一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

ifnull(表达式1,表达式2)  --null参与的运算,计算结果都为null
 表达式1:哪个字段需要判断是否为null

表达式2:如果该字段为null后的替换值
例如:
-- 如果有null参与的运算,计算结果都为null
SELECT NAME,math,english,math + IFNULL(english,0) FROM student2;

4. 起别名

as:as也可以省略

例如:

SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student2;
或
SELECT NAME,math 数学,english 英语,math + IFNULL(english,0) 总分 FROM student2;
CREATE TABLE student2 (
id INT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(5),
address VARCHAR(100),
math INT,
english INT
);
INSERT INTO student2(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);

SELECT * FROM student2;

-- 查询 姓名 和 年龄
-- select name,age from student2;
SELECT 
	NAME, -- 姓名
	age     -- 年龄
FROM 
	student2;  -- 学生表2
	
SELECT address FROM student2;

-- 去除重复的结果集
SELECT DISTINCT address FROM student2;


-- 计算 math和english 分数之和
SELECT NAME ,math,english,math + english FROM student2;
-- 如果有null参与的运算,计算结果都为null
SELECT NAME,math,english,math + IFNULL(english,0) FROM student2;


-- 起别名
SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student2;
SELECT NAME,math 数学,english 英语,math + IFNULL(english,0) 总分 FROM student2;

3. 条件查询

1. where子句后跟条件

2. 运算符

> 、< 、<= 、>= 、= 、<>


BETWEEN...AND  
IN( 集合) 
LIKE:模糊查询
    占位符:
	    _:单个任意字符
	    %:多个任意字符
IS NULL  
and  或 &&
or  或 || 
not  或 !

例: 

			-- 查询年龄大于20岁

			SELECT * FROM student WHERE age > 20;
			
			SELECT * FROM student WHERE age >= 20;
			
			-- 查询年龄等于20岁
			SELECT * FROM student WHERE age = 20;
			
			-- 查询年龄不等于20岁
			SELECT * FROM student WHERE age != 20;
			SELECT * FROM student WHERE age <> 20;
			
			-- 查询年龄大于等于20 小于等于30
			
			SELECT * FROM student WHERE age >= 20 &&  age <=30;
			SELECT * FROM student WHERE age >= 20 AND  age <=30;
			SELECT * FROM student WHERE age BETWEEN 20 AND 30;
			
			-- 查询年龄22岁,18岁,25岁的信息
			SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
			SELECT * FROM student WHERE age IN (22,18,25);
			
			-- 查询英语成绩为null
			SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=)判断
			
			SELECT * FROM student WHERE english IS NULL;
			
			-- 查询英语成绩不为null
			SELECT * FROM student WHERE english  IS NOT NULL;
			-- 查询姓马的有哪些? like
			SELECT * FROM student WHERE NAME LIKE '马%';
			-- 查询姓名第二个字是化的人
			
			SELECT * FROM student WHERE NAME LIKE "_化%";
			
			-- 查询姓名是3个字的人
			SELECT * FROM student WHERE NAME LIKE '___';
			-- 查询姓名中包含德的人
			SELECT * FROM student WHERE NAME LIKE '%德%';

DQL:查询语句

1. 排序查询

语法:order by 子句

order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...

排序方式:
        ASC:升序,默认的。
        DESC:降序 

注意:
        如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

例:

SELECT * FROM student2 ORDER BY math ASC;
SELECT * FROM student2 ORDER BY math DESC;


-- 按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名
SELECT * FROM student2 ORDER BY math ASC, english ASC;

2. 聚合函数

聚合函数:将一列数据作为一个整体,进行纵向的计算。

	1. count:计算个数
		1. 一般选择非空的列:主键
		2. count(*)
	2. max:计算最大值
	3. min:计算最小值
	4. sum:计算和
	5. avg:计算平均值

     注意:聚合函数的计算,排除null值。
      解决方案:
            1. 选择不包含非空的列进行计算
            2. IFNULL 函数

例:

SELECT COUNT(NAME) FROM student2;

SELECT COUNT(IFNULL(english,0)) FROM student2;

SELECT COUNT(id) FROM student2;

SELECT MAX(math) FROM student2;

SELECT SUM(math) FROM student2;

SELECT AVG(math) FROM student2;

3. 分组查询

语法:

group by 分组字段

 注意:

1. 分组之后查询的字段:分组字段、聚合函数

2. where 和 having 的区别?

            (1)where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
            (2)where 后不可以跟聚合函数,having可以进行聚合函数的判断。

例:

		-- 按照性别分组。分别查询男、女同学的平均分

		SELECT sex , AVG(math) FROM student GROUP BY sex;
		
		-- 按照性别分组。分别查询男、女同学的平均分,人数
		
		SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
		
		--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
		
		--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
		
		SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

4. 分页查询

1. 语法:

limit 开始的索引,每页查询的条数;

    2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
        -- 每页显示3条记录 

        SELECT * FROM student LIMIT 0,3; -- 第1页
        
        SELECT * FROM student LIMIT 3,3; -- 第2页
        
        SELECT * FROM student LIMIT 6,3; -- 第3页

3. limit 是一个MySQL"方言"

猜你喜欢

转载自blog.csdn.net/woai_mihoutao/article/details/124760089