数据库学习总结3

一、DML:增删改表中数据

1.添加数据

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

注意:

a.列名和值要一一对应;

b.如果表名后不定义列名,则默认给所有列添加值;【INSERT INTO 表名 VALUES(值1,值2,...,值n);】

c.除了数字类型,其他类型需要使用引号;

2.删除数据

delete from 表名 【where 条件】;

注意:

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

b.如果要删除所有记录

delete from 表名;--不推荐使用,有多少条记录就会执行多少次删除操作;

TRUNCATE TABLE 表名;--先删除表,然后再创建一个一模一样的表;

3.修改数据

updata 表名 set 列名1 = 值1,列名2 = 值2,... 【where 条件】;

注意:

如果不添加条件,则将会把表中所有记录进行修改

二、DQL语句:查询表中的记录

1.语法:

select

        字段列表

from

        表名列表

where

        条件列表

group by

        分组字段

having

        分组之后的条件

order by

        排序

limit

        分页限定;

2.基础查询

先创建一个表

CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(5),
address VARCHAR(100),
math INT,
english INT
);

INSERT INTO stu(id,NAME,age,sex,address,math,english) VALUES
(1,'李飞',55,'男','北京',66,88),
(2,'马嘉祺',19,'男','郑州',87,89),
(3,'丁程鑫',19,'男','重庆',78,89),
(4,'宋亚轩',18,'男','山东',98,99),
(5,'刘耀文',17,'男','重庆',95,94),
(6,'张真源',19,'男','重庆',88,89),
(7,'严浩翔',18,'男','北京',87,89),
(8,'贺峻霖',18,'男','四川',85,92);

SELECT * FROM stu;

  

(1)多个字段的查询

-- 查询姓名和年龄
SELECT 
	NAME,-- 姓名
	age -- 年龄
FROM 
	stu;-- 学生表
-- 查询所有字段
SELECT * FROM stu;

    

(2)去除重复

关键字:DISTINCT

SELECT DISTINCT 列名 FROM 表名;

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

  

(3)计算列

-- 如果有null参与的运算,计算结果都为null
SELECT 
    NAME, -- 姓名
    math, -- 数学
    english, -- 英语
    IFNULL(math,0) + IFNULL(english,0) -- 数学和英语总和,若为null将其值替换为0
FROM
    stu;

 

-- 计算math和english的总和
SELECT 
	NAME, -- 姓名
	math, -- 数学
	english, -- 英语
	math + english -- 数学和英语总和
FROM
	stu; 

(4)起别名

关键字:AS

SELECT 
    NAME, -- 姓名
    math, -- 数学
    english, -- 英语
    IFNULL(math,0) + IFNULL(english,0)  AS 别名 -- 数学和英语总和
FROM
    stu;

SELECT 
	NAME, -- 姓名
	math, -- 数学
	english, -- 英语
	IFNULL(math,0) + IFNULL(english,0) AS 总分 -- 数学和英语总和
FROM
	stu;

 3.条件查询

(1)where句子后边跟条件

(2)运算符

*比较运算符:

>、<、<=、>=、=、<>:在SQL中表示不等于,在mysql中也可以使用!=,没有==

-- 查询年龄大于等于18岁
SELECT * FROM stu WHERE age >= 18;

 

        等于就写 = ,没有 == 号;

 BETWEEN...AND:在一个范围之内,如:between 100 and 200,相当于条件在100到200之间,包头又包尾

-- 查询年龄大于18岁小于20岁
SELECT * FROM stu WHERE age BETWEEN 18 AND 20;
-- 或者
SELECT * FROM stu WHERE age >= 18 && age <= 20; -- 并不推荐

 

 LIKE'张%':模糊查询

占位符:

        _  :表示单个任意字符

        %  :表示多个任意字符

-- 查询姓马的人
SELECT * FROM stu WHERE NAME LIKE '马%';

-- 查询第二个字是亚的人
SELECT * FROM stu WHERE NAME LIKE '_亚%';


-- 查询包含文的人
SELECT * FROM stu WHERE NAME LIKE '%文%';
-- 查询名字是三个字的人
SELECT * FROM stu WHERE NAME LIKE '___';

 

 

 

 

IS NULL / IS NOT NULL:查询某一列是否为NULL值,不能写=NULL ,null不能用=或!=来判断

*逻辑运算符: 

 and 或 && :与,SQL中建议使用and,后者并不通用

or 或 || :或 

not 或  !:非

4.排序查询

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

 如果不加排序方式,默认升序;

排序方式:ASC,升序(默认);DESC,降序;

-- 按数学成绩排序
SELECT * FROM stu ORDER BY math DESC;

 

 如果有两个条件,当第一个条件一样的时候,才判断第二个条件;

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

select 函数(列名) from 表名;

函数类型:

(1)count :计算个数

        一般选择非空的列:主键

select 函数(*) from 表名; -- 只要该数据这一行有一个不为NULL,这个数据就会被计算进去

(2)max :计算最大值

(3)min :计算最小值

(4)sum :计算和

(5)avg :计算平均值

聚合函数的运算,会排除null值。解决办法:

a.选择不包含非空的列

b.IFNULL函数

select 函数(ifnull(english,0)) from 表名;

6.分组查询

 group by 分组字段;

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

-- 按性别分组,查询平均分,要求:分数低于85的不参与分组,分组之前确保人数大于两个人
SELECT sex, -- 分组依据
    AVG(math), -- 查询平均分
    COUNT(id) -- 选择一列不会重复的数据,计算每个分组人数
FROM stu
WHERE math > 85 -- 限定条件
GROUP BY sex -- 分组依据
HAVING COUNT(id) > 2; -- 分组之前确保人数大于两个人

-- 按性别分组,查询平均分,要求:分数低于85的不参与分组,分组之前确保人数大于两个人
SELECT sex, -- 分组依据
	AVG(math), -- 查询平均分
	COUNT(id) -- 选择一列不会重复的数据,计算每个分组人数
FROM stu
WHERE math > 85 -- 限定条件
GROUP BY sex -- 分组依据
HAVING COUNT(id) > 2; -- 分组之前确保人数大于两个人

  

where 和 having 的区别:

       1. where 在分组之前进行限定,如果不满足条件则不参与分组

        having 在分组之后进行限定,如果不满足结果,则不会被查询出来

       2.where 后不可以跟聚合函数,having 可以进行聚合函数的判断

7.分页查询

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

开始的索引 = 每页条数 * (页码  - 1  ) 

-- 每页显示3条 开始的索引 = 每页条数 * (页码  - 1  )
SELECT * FROM stu LIMIT 0,3; -- 第一页
SELECT * FROM stu LIMIT 3,3; -- 第二页
SELECT * FROM stu LIMIT 6,3; -- 第三页

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值