当前位置: 首页 > news >正文

数据库相关锻炼

#第一天
#insert插入语句 
INSERT INTO course(CNO,CNAME,TEACHER)
VALUES ('K4','Java','白'),('K5','C++','王'),('K6','数值计算方法','刘');
#update修改语句
UPDATE course 
SET TEACHER='独' 
WHERE (CNO='K1');
#WHERE 后可以跟BETWEEN ...AND...,,AND,,OR
#导入数据库
#文件->打开

#互换男女性别
UPDATE STUDENT SET sex='3'
WHERE sex='1';
UPDATE student SET sex='1'
WHERE sex='2';
UPDATE student SET sex='2'
WHERE sex='3';

#修改表中数据不存在的列
UPDATE student SET phone='119'
WHERE phone='';
UPDATE student SET sex='1'
WHERE sex IS NULL;

#删除语句delete
DELETE FROM student
WHERE studentname='' OR studentname IS NULL;

#自增auto删除并不能对,不能让计数器清0/////delete不能清空计数器,truncate可以
TRUNCATE TABLE      #删除整个表中的数据,计数器同样也归零

#查询语句select
SELECT *FROM student;
SELECT COUNT(1)'学生总数'FROM student;

SELECT studentno AS 学号,
studentname 姓名,
gradeid 年级,
sex 性别
FROM student
WHERE greadid=1 AND sex='1';

#like 模糊查询关键字
SELECT *FROM student 
WHERE studentname LIKE '李__';# 李%查询李姓学生,李_ _查询李某某,李_查询李某
#找到12月出生的学生
SELECT *FROM student
WHERE MONTH(borndate)=12;
#当前月过生日的人
SELECT *FROM student
WHERE MONTH(borndate)=MONTH (NOW());
#显示当前时间
SELECT MONTH(2025-6-23);
SELECT NOW();
#第二天
#连接,连接查询,SQL语句的提升性能语句方法
#all/distinct 所有/唯一

#联合查询
SELECT student.studentno,studentname,studentresult
FROM student,result;
#十天上完课程的均课时
SELECT subjectname '课程名称',ClassHour'课时',ClassHour/10 '10天均课时' 
FROM SUBJECT;
#去掉select查询中重复的记录,所有信息都重复才叫重复
SELECT DISTINCT studentno 
FROM result;
#IN等同于在其中
SELECT *FROM student
WHERE studentno IN (1005,1009,1012);
#查询李同学的成绩
SELECT  *FROM student WHERE studentname LIKE '李%';

SELECT studentno '李同学',studentresult 成绩 FROM result 
WHERE studentno IN 
(SELECT studentno FROM student 
WHERE studentname LIKE '李%');#其中不能放select*from
#inner join 内连接
SELECT  subjectname,gradename FROM SUBJECT s
INNER JOIN grade g
ON s.`GradeID`=g.`GradeID`
WHERE gradename='大一';
SELECT  s.studentno,studentname 张秋丽,studentresult FROM result s
INNER JOIN student g
ON g.`StudentNo`=s.`StudentNo`
WHERE studentname='张秋丽';
#找未参加考试的学生,显示学号和姓名(用子查询)
SELECT  studentno,studentname FROM student 
WHERE studentno NOT IN(
SELECT  DISTINCT  studentno FROM result);


#左外连接(left join),右外连接(right join)
SELECT*FROM result s #(注意表顺序,反了结果可能没有)
RIGHT  JOIN student r
ON s.`StudentNo`=r.`StudentNo`
WHERE studentresult IS NULL;


#自查询
SELECT c1.categoryName 父栏目,c2.categoryName 子栏目 
FROM `category`c1
JOIN `category`c2
ON c1.`categoryId`=c2.`pid`;
#查询数据库结构-1的成绩降序排列
SELECT  subjectname,studentresult FROM result s
INNER JOIN SUBJECT t
ON s.`SubjectNo`=t.`SubjectNo`
WHERE subjectname='数据库结构-1'
ORDER BY studentresult;
#查询学生表按照年级降序排列,如果有重复则按照学号降序排列
SELECT  * FROM student
ORDER BY gradeid DESC,studentno DESC
LIMIT 0,4;#第一页
LIMIT 4,4;#第二页
LIMIT 8,4;#第三页
#查询所有选数据库结构-2的同学成绩,显示(打印)学号、姓名、课程名和成绩,
#并按照由高到低顺序排列第一次打印前五行,第二次打印6-10行
SELECT  studentname 姓名,s.studentno 学号,subjectname '数据库结构-2',studentresult FROM student s
JOIN result t
ON s.`StudentNo`=t.`StudentNo`
JOIN SUBJECT b
ON t.`SubjectNo`=b.`SubjectNo`
WHERE subjectname='数据库结构-2'
ORDER BY studentresult DESC
LIMIT 0,5;
LIMIT 5,5;
#三张表,显示只用到两张表,可用子查询
SELECT s.`StudentNo`,s.`StudentName`,studentresult FROM student s
JOIN result t ON s.`StudentNo`=t.`StudentNo`
WHERE t.`SubjectNo`IN (
SELECT subjectno FROM SUBJECT 
WHERE subjectname='C语言-1')
ORDER BY studentresult DESC
LIMIT 5;
#函数count()总数,sum求和,avg求平均,min,max
#按照不同课程分组,分别计算平均分最高分最低分,低于60的不显示
SELECT subjectname,MAX(studentresult)最高分,MIN(studentresult)最低分,AVG(studentresult)平均分
FROM SUBJECT a JOIN result b ON a.`SubjectNo`=b.`SubjectNo`
GROUP BY a.subjectno HAVING MIN(studentresult)>60;
#注意group后不能用where

#统计各年级人数,显示年级名称和人数,男女也分加sex
SELECT gradename,COUNT(gradename),sex
FROM student a JOIN grade b ON a.`GradeId`=b.`GradeID`
GROUP BY a.`GradeId`,sex ;

#
SELECT INSERT('12456',3,1,'1111');

#emp数据库
#最高薪水每个部门的人员名称
SELECT * FROM tb_emp t INNER JOIN(
SELECT deptno,MAX(sal)sal FROM tb_emp 
GROUP BY deptno ) a
WHERE t.deptno=a.deptno AND t.sal=a.sal;
#列出所有员工及领导姓名

SELECT t.ename 员工,p.ename 领导 FROM tb_emp t
LEFT JOIN tb_emp p
ON p.empno=t.mgr;

#列出至少有5个员工的所有部门
SELECT dname FROM tb_emp a
JOIN tb_dept b ON a.deptno=b.deptno
GROUP BY a.deptno HAVING COUNT(dname)>5;

#列出薪金比SMITH多的所有员工信息
SELECT * FROM tb_emp 
WHERE sal>(SELECT sal FROM tb_emp WHERE ename='SMITH');

#列出所有CLERK的姓名及其部门名称,部门人数
SELECT ename ,dname,c.ct FROM tb_emp a,tb_dept b,
(SELECT deptno,COUNT(1)ct FROM tb_emp GROUP BY deptno)c
WHERE a.deptno=b.deptno AND job='CLERK' AND c.deptno=b.deptno;

SELECT ename ,dname,c.ct FROM tb_emp a JOIN tb_dept b ON a.deptno=b.deptno
JOIN(SELECT deptno,COUNT(1)ct FROM tb_emp GROUP BY deptno)c
ON c.deptno=b.deptno
WHERE job='CLERK';


#列出最低薪资大于1500的各种工作,以及从事该工作的全部雇员人数
SELECT job,COUNT(1)FROM tb_emp 
GROUP BY job HAVING MIN(sal)>1500;


#列出在部门SALES工作的员工姓名,假定不知道销售部门的部门编号
SELECT ename FROM tb_emp WHERE deptno IN(
SELECT  FROM tb_dept WHERE dname='SALES');

http://www.dtcms.com/a/393024.html

相关文章:

  • PostgreSQL 入门与实践
  • pytorch基本运算-PyTorch.Tensor张量数据类型
  • 数据结构与算法 第三章 栈
  • Spring Boot 整合 MyBatis:从入门到企业级实践
  • FHook Java 层全函数 HOOK 框架
  • TDengine 聚合函数 STDDEV_POP 用户手册
  • 【 嵌入式Linux应用开发项目 | Rockit + FFmpeg+ Nginx】基于泰山派的IPC网络摄像头
  • 机器学习中的高准确、低召回
  • Go基础:Go基本数据类型详解
  • 项目管理(一)
  • 【STM8L101 执行函数FLASH_ProgramBlock出现问题】
  • ​​[硬件电路-278]:双向双电源电平转换收发器74AXP2T45DCH功能概述、管脚定义
  • 音视频同步的原理和实现方式
  • BUG调试案例十八:TPS5430输出震荡问题案例
  • Python读取Excel文件里面指定列中的指定范围行
  • C语言入门教程 | 阶段二:控制结构详解(条件语句与 switch 语句)
  • Linux 4.x hook系统调用的问题
  • 了解 Highcharts 响应式功能:构建适配各种屏幕的图表界面
  • 逻辑分析仪解码脚本实例解析——UART
  • 垃圾回收中的STW是什么?
  • redis未授权漏洞扫描器
  • LTE/EPC 架构
  • ANSYS学习
  • 【python】安装jieba库
  • tyza66的博客:专注软件开发、全栈开发与开源项目的技术分享
  • Redis最佳实践——购物车优化详解
  • Netty从0到1系列之Netty内存管理【下】
  • 【使用函数求余弦COS函数的近似值】2022-11-27
  • 前端违规页面车主信息优化说明
  • 成功安装了 Anaconda3。要启动它,您有以下几种主要方式:方式一:通过“开始菜单”启动(最直接的方法)1. 点击您电脑屏幕左下角的 “开始菜单”(Win