数据库Mysql刷题总结

本文详细介绍了SQL中的常用操作符和函数,包括UNION、WHERE、OR、NOT等逻辑操作,以及LEFT、LIKE、MOD、DATE、GROUPBY、HAVING等函数和概念。还涵盖了日期差计算、分组过滤、字符串操作和正则表达式等,是SQL学习的基础教程。
摘要由CSDN通过智能技术生成

一. 常见操作符

1. Union

UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

2. Where

条件语句

3. Or

表示或

4. 不等于

<> !=
mysql不等于用法不包含null字符串

5. 连接

  • 左连接:a,b 求的是a
    left join …
    on …(连接的条件)
  • 内连接:求a,b的交集
    inner join
    on

6. 排序

单个条件或者多个条件排序
order by XX, YY
asc升序排列 desc 降序排列

7. if函数

IF(condition, value_if_true, value_if_false)

8. 求余数:MOD

MOD(x, y)

9. left函数:取字符串

LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。

LEFT(str,length);
LEFT()函数接受两个参数:
str是要提取子字符串的字符串。
length是一个正整数,指定将从左边返回的字符数。

10. LIKE:模糊查询

模糊查询 配合%
“%”是 MySQL 中最常用的通配符,它能代表任何长度的字符串,字符串的长度可以为 0
“_”只能代表单个字符,字符的长度不能为 0

11. select去重

distinct
group by 也可以…但是一般不使用

12. 两个日期求差

yyyyMMdd
dateDiff(a,b) a-b

13. 分组之后的过滤having

group by …
having …

14. 取出datetime类型中的年,月

year(datetime)
month

15. 数据保留多少位小数ROUND

round (X,N)

16. 分组求有多少行 GROUP BY

count(字段名)
group by 字段名

17. 求时间差

TIMESTAMPDIFF(指定时间类型,start,end)

18.提取时间的日期部分DATE

19. 范围查询in

where a in ()

20.sql语句顺序

from
where
group by
having
聚合函数
select
order by

21.正则表达REGEXP

在这里插入图片描述

22. 字符串操作:拼接,截取,大小写转换

upper(concat(substring(cust_contact,1,2),substring(cust_city,1,3))) as user_login
# substring语法(字符串名称,起始点,长度)

23. 条件求和

select sum(if(prod_id = 'BR01', quantity, 0)) as items_ordered
from OrderItems;
#sum嵌套if实现条件求和
select sum(quantity) as items_ordered
from OrderItems
where prod_id = 'BR01'

24. where与having

WHERE与HAVING的根本区别在于:

WHERE子句在GROUP BY分组和聚合函数之前对数据行进行过滤;
HAVING子句对GROUP BY分组和聚合函数之后的数据行进行过滤。
如下题目:
添加链接描述

25. Union / Union All

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
SQL Statement 1
UNION ALL
SQL Statement 2

二. 常见操作

1. select加入常量列

select '常量‘ [as] 列名 from table

2. 分组统计数量

count...
group by..

3. 求时间最晚对应的信息

#子查询
select  * from employees where hire_date = (select max(hire_date )from employees );
#分页查询
select * from employees order by hire_date desc limit 1;

4. 输出带百分号

CONCAT(avg_play_progress, "%")

5. 含/不含某个字段

like 'xx'
not like 'xx'

三. 刷题记录

SQL156 各个视频的平均完播率

SQL157 平均播放进度大于60%的视频类别

SQL158 每类视频近一个月的转发量/率

返回购买 prod_id 为 BR01 的产品的所有顾客的电子邮件

四. JavaGuide笔记

1. count

在这里插入图片描述

2. having

在这里插入图片描述

3. 子查询

在这里插入图片描述
在这里插入图片描述
使用子查询的话,要将查询结果作为一个新表来处理。

4. 连接表

基本语法:using或者on

# join....on
SELECT c.cust_name, o.order_num
FROM Customers c
INNER JOIN Orders o
ON c.cust_id = o.cust_id
ORDER BY c.cust_name

# 如果两张表的关联字段名相同,也可以使用USING子句:JOIN....USING()
SELECT c.cust_name, o.order_num
FROM Customers c
INNER JOIN Orders o
USING(cust_id)
ORDER BY c.cust_name

# SQL 先根据 ON 生成一张临时表,然后再根据 WHERE 对临时表进行筛选。
# 如果不加任何修饰词,只写JOIN,那么默认为 INNER JOIN 

5. 插入操作

在这里插入图片描述
在这里插入图片描述

6. 更新操作

在这里插入图片描述
UPDATE 表面 SET 列名= ’xx‘ where 条件

7. 删除操作

  • 删除行记录
    在这里插入图片描述
DELETE FROM exam_record WHERE submit_time IS null OR TIMESTAMPDIFF(MINUTE, start_time, submit_time) < 5
ORDER BY start_time
LIMIT 3
# 默认就是asc, desc是降序排列
  • 删除表所有记录
    在这里插入图片描述
TRUNCATE  exam_record;

8. 表的操作

8.1 创建表

方法1:

CREATE TABLE IF NOT EXISTS user_info_vip(
    id INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT'自增ID',
    uid INT(11) UNIQUE NOT NULL COMMENT '用户ID',
    nick_name VARCHAR(64) COMMENT'昵称',
    achievement INT(11) DEFAULT 0 COMMENT '成就值',
    `level` INT(11) COMMENT '用户等级',
    job VARCHAR(32) COMMENT '职业方向',
    register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
)CHARACTER SET UTF8

方法2:

可直接create table 新表 as select * from 旧表

8.2 修改表

添加一列:ALTER TABLE 表名 ADD COLUMN 列名 类型 【first | after 字段名】;first : 在某列之前添加,after 反之)
修改列的类型或约束:ALTER TABLE 表名 MODIFY COLUMN 列名 新类型 【新约束】;
修改列名:ALTER TABLE 表名 change COLUMN 旧列名 新列名 类型;
删除列:ALTER TABLE 表名 drop COLUMN 列名;
修改表名:ALTER TABLE 表名 renameto】 新表名;
将某一列放到第一列:ALTER TABLE 表名 MODIFY COLUMN 列名 类型 first;

8.3 删除表

DROP TABLE IF EXISTS exam_record_2011;

9. 索引

9.1 创建索引

-- 示例:
-- 添加B-Tree索引:
	CREATE INDEX idx_name(索引名) ON 表名 (字段名);   -- idx_name为索引名,以下都是
-- 创建唯一索引:
	CREATE UNIQUE INDEX idx_name ON 表名 (字段名);
-- 创建一个主键索引:
	ALTER TABLE 表名 ADD PRIMARY KEY (字段名);
-- 创建一个全文索引
	ALTER TABLE 表名 ADD FULLTEXT INDEX idx_name (字段名);

-- 通过以上示例,可以看出create 和 alter 都可以添加索引
ALTER TABLE examination_info
    ADD INDEX idx_duration(duration),
    ADD UNIQUE INDEX uniq_idx_exam_id(exam_id),
    ADD FULLTEXT INDEX full_idx_tag(tag);

9.2 删除索引

-- 使用 DROP INDEX 删除索引
DROP INDEX idx_name ON 表名;

-- 使用 ALTER TABLE 删除索引
ALTER TABLE employees DROP INDEX idx_email;

-- 示例:
DROP INDEX uniq_idx_exam_id ON examination_info;
DROP INDEX full_idx_tag ON examination_info;

7. 时间函数

  • 小于某个时间点
DATE(start_time) < "2021-09-01"
  • 两个时间差

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值