文章目录
- 一. 常见操作符
- 1. Union
- 2. Where
- 3. Or
- 4. 不等于
- 5. 连接
- 6. 排序
- 7. if函数
- 8. 求余数:MOD
- 9. left函数:取字符串
- 10. LIKE:模糊查询
- 11. select去重
- 12. 两个日期求差
- 13. 分组之后的过滤having
- 14. 取出datetime类型中的年,月
- 15. 数据保留多少位小数ROUND
- 16. 分组求有多少行 GROUP BY
- 17. 求时间差
- 18.提取时间的日期部分DATE
- 19. 范围查询in
- 20.sql语句顺序
- 21.正则表达REGEXP
- 22. 字符串操作:拼接,截取,大小写转换
- 23. 条件求和
- 24. where与having
- 25. Union / Union All
- 二. 常见操作
- 三. 刷题记录
- 四. JavaGuide笔记
一. 常见操作符
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%的视频类别
返回购买 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 表名 rename 【to】 新表名;
将某一列放到第一列: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"
- 两个时间差