Mysql 语法再巩固

话不多说 直接代码

sql 复制代码
##删除表
drop  table student ;

##创建表 
create table student(
id int primary key comment 'id',
name varchar(255) not null ,
time datetime not null,
card_id varchar(255) not null,
score int not null,
key asda (name),## 创建普通索引
index asdasd (time), ## 一样 等价于 key 创建 普通索引 
UNIQUE INDEX card_id_unique (card_id) #创建唯一索引
)engine=innodb default charset=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学生';##utf8mb4_general_ci 排序规则 忽略大小写 忽略 后面空格


select * from  student s where  s.name = 'j';
insert into student (name,time,card_id,score) values
('jmj2','20250301080700','13512',1),
('jmj3','20250301080700','13512',3),
('jmj4','20250301080700','13512',5),
('jmj5','20250301080700','13512',6),
('jmj6','20250301080700','13512',2)
;


##添加主键 
alter table student add primary key(id);
##修改字段
alter table student modify  column name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT null;
alter table student modify  column id int auto_increment;
##创建普通索引
create index asdjkladl on student (name)
##创建唯一索引
CREATE UNIQUE INDEX unique_index_name ON student (card_id);
##删除 索引
DROP INDEX asdjkladl ON student;
##删除唯一索引
DROP INDEX card_id_unique ON student;
##删除主键
ALTER TABLE student DROP PRIMARY KEY;


select id from student s  
union all ##联合操作
select id from product_info pi2 ;

select distinct  name from student s ;


select  max(sort) from
(select sort  from blue_templat_param_group_and_param_relation btpgapr where btpgapr.blue_template_param_group_id = '1879815632434900992'
union  all 
select sort from blue_tooth_composite_param btcp where btcp.blue_template_param_group_id  = '1879815632434900992' ) as s order by  sort asc 


select id,blue_template_param_group_id  from blue_templat_param_group_and_param_relation btpgapr where btpgapr.blue_template_param_group_id = '1879815632434900992'
union  all #不去重
select id,blue_template_param_group_id   from blue_tooth_composite_param btcp where btcp.blue_template_param_group_id  = '1879815632434900992' 





select blue_template_param_group_id  from blue_templat_param_group_and_param_relation btpgapr where btpgapr.blue_template_param_group_id = '1879815632434900992'
union   ##去重的
select blue_template_param_group_id   from blue_tooth_composite_param btcp where btcp.blue_template_param_group_id  = '1879815632434900992' 


##查出成绩为前三的 学生 所有的
SELECT s1.id, s1.name, s1.score
FROM student s1
WHERE (
    SELECT COUNT(DISTINCT s2.score)
    FROM student s2
    WHERE s2.score > s1.score
) < 3
ORDER BY s1.score DESC;

##窗口函数
-- 查询成绩排名前三的学生
WITH RankedStudents AS (
    SELECT 
        id,
        name,
        score,
        DENSE_RANK() OVER (ORDER BY score DESC) as score_rank ##不会漏下并列的
    FROM 
        student
)
SELECT 
    id,
    name,
    score
FROM 
    RankedStudents
WHERE 
    score_rank <= 3;

#这是直接跳过并列计数   
WITH RankedStudents AS (
    SELECT 
        id,
        name,
        score,
        Rank() OVER (ORDER BY score DESC) as score_rank ##不会漏下并列的
    FROM 
        student
)
SELECT 
    id,
    name,
    score
FROM 
    RankedStudents
WHERE 
    score_rank <= 3;
   
   
## 在窗口内计算某列的总和。
select * ,
SUM(score) over (partition by card_id) as total_score
from  student s

select * ,
avg(score) over (partition by card_id) as total_score
from  student s

select * ,
min(score) over (partition by card_id) as total_score
from  student s

select * ,
max(score) over (partition by card_id) as total_score
from  student s

##返回窗口内当前行之前某一行的值。
select * ,
LAG(score,1,0) over (partition by card_id order by score ) as total_score
from  student s

##返回窗口内当前行之后某一行的值。
select * ,
LEAD(score,1,0) over (partition by card_id order by score ) as total_score
from  student s




##这是子查询 
SELECT 
    employee_id,
    name,
    salary,
    (SELECT AVG(salary) FROM employees e2 WHERE e2.department_id = e1.department_id) as dept_avg_salary
FROM 
    employees e1;

-- 子查询计算每个部门的平均工资
WITH dept_avg_salary AS (
    SELECT 
        department_id,
        AVG(salary) AS avg_salary
    FROM 
        employees
    GROUP BY 
        department_id
)
-- 主查询将员工表与子查询结果进行连接
SELECT 
    e.employee_id,
    e.name,
    e.salary,
    das.avg_salary AS dept_avg_salary
FROM 
    employees e
JOIN 
    dept_avg_salary das ON e.department_id = das.department_id;
相关推荐
_一条咸鱼_12 分钟前
Android Glide 缓存模块源码深度解析
android
harry235day17 分钟前
kotlin 协程创建启动 源码初探(一)
android·kotlin
白熊一号24 分钟前
Hi, DeepSeek 带我通过实战学习SQL入门知识
sql·mysql
神经星星32 分钟前
【vLLM 教程】使用 TPU 安装
数据库·人工智能·机器学习
hjehheje1 小时前
clickhouse查询效率低
数据库·人工智能
七七powerful1 小时前
ClickHouse 中出现 DB::Exception: Too many parts 错误
java·前端·数据库
Linux运维老纪2 小时前
Python实战项目(‌Hands-on Python Project)
开发语言·数据库·python·sql·mysql·云计算·运维开发
fivestar20092 小时前
android studio中看错误问题
android·ide·android studio
小林熬夜学编程2 小时前
【MySQL】第十五弹---全面解析事务:定义、起源、版本支持与提交方式
android·linux·服务器·开发语言·数据库·mysql
&有梦想的咸鱼&2 小时前
Android Glide 缓存模块源码深度解析
android·缓存·glide