MYSQL基本语法使用

目录

一、mysql之DML

增加语句

删除语句和truncate

更新语句

replace语句

select查询语句

二、select多种用法

查询时的别名使用

分组

分组后的筛选

结果排序

分页功能

分表

多表关联查询

练习题

一、单表查询

二、多表查询


前面已经学习了mysql的安装和基本语法,接下来我们继续学习其他的mysql基本语法是如何使用的

一、mysql之DML

增加语句

#语法
insert INTO table_name[(field1 [, field2 ……]) values(value1 [, vaule2 ……])  [,()]];
-- 插入多条数据 --
insert into t_user(id passwd) values(1,"123"),(2,"234"),(3,"345")

示例:

删除语句和truncate

删除语言,请注意删除的条件!!!如果不带条件,则删除全表。

delete from table_name [where 条件];
truncate table table_name;

示例:

-- 如果没有条件,则清空全数据包【慎重!!】
delete from user;

-- truncate清空全表【注意:truncate删除数据是不经过数据字典】
truncate table students;

更新语句

更新就是修改表中的数据

#语法结构
update table_name set 字段1=新值 [, 字段2=新值, 字段3=字段3 + 1]   [where 条件];

示例:

#其他示例
update user_1 set age=20,password="root" where id=2;
update user_1 set age=age+1;

replace语句

该语句是集更新和插入为一体的语句;

如果表中没有这条数据,则执行插入,否则执行更新;

⚠️注意:replace的更新,本质是先删除,再插入

replace into user_1 (id,name) values(10,"test");

select查询语句

在开发中,查询语句是使用最多,也是CRUD中,复杂度最高的sql语句

#查询语法结构
select *|字段1 [, 字段2 ……] from 表名称 [, 表名称2……] [where 条件] [group by 字段 [having 分组后的筛选]] [order by 字段 [desc|asc] [字段2 [desc|asc] ……]] [limit 分页]-- 查询所有数据
select * from user_1;-- 查询需要的字段信息
select id,name,password from user_1;-- 查询一个字段,一个等值条件
select name from user_1 where id=1;#等值查询select password from user_1 where name="李四";

 select语句中的特殊情况:

对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)

对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)

运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。

SELECT last_name, salary, salary*12 FROM employees;

二、select多种用法

查询时的别名使用

select count(*) from test
select count(*) as 总人数 from test

分组

group by 字段

select gender from test group by gender;
select gender, count(gender) from test group by gender;

分组后的筛选

select gender,count(gender) from test group by gender having count(gender) > 5

结果排序

将查询结果,以特定的顺序展示(升序或者降序)

# 语法结构
order by 字段 
order by 字段 asc|desc;
order by 字段 asc|desc, 字段2 ;

分页功能

select语句,查询数据时,可能结果会非常多,此时就不能直接展示,分页展示。

总数量(all_data):查询 select count(*)

每页展示的数量(page_size):程序员定

当前页(cur_page):默认第一页,用户自己点击选择

总页数(all_page):总数量 % 每页的数量 == 0 整除后的商 : 商 + 1

limit num  # 查询多少条limit num1, num2; # num1: 偏移量, num2 : 每页的数量  limit cur_page * (page_size - 1), page_size;

分表

数据直接都存储在一张表中:

  • 如果数据很大,性能会出现问题

  • 将不同的数据,如果放在同一个表中,可能数据冗余

  • 数据冗余,会导致数据可能出错

将不同的类型,采用不同的数据表进行存储,如果两张表或者多张表之间存在关联关系,则可以采用外键来描述这种关联关系。

主表中,一般是一个字段,改字段一般是从表的主键。

create table grade(id int auto_increment,name varchar(50) unique,primary key (id)
);insert into grade(name) value("java精品班"),("python数据分析班"),("网络安全班"),("云原生高级班");create table student(id int primary key auto_increment,name varchar(50) unique,gender enum("F","M"),age int default 18,address varchar(255),class_id int
);

#插入一些数据
insert into student(name, class_id) values("小明", 1);
insert into student(name, class_id) values("小红", 2);
insert into student(name, class_id) values("小谢", 1);
insert into student(name, class_id) values("小高", 3);
insert into student(name, class_id) values("小紫", 1);
insert into student(name, class_id) values("小兰", 4);

-- 此时,插入了一条错误数据,该数据描述的外键不存在,是一条脏数据!!!
insert into student(name, class_id) values("小黑666", 44);
## 如果要避免出现这种情况,必须加入外键约束!

多表关联查询

select *|字段 [,……] from 表名称 [,表名称] ……-- 交叉连接(cross join)
-- 在查询多表时,不指定表的关联关系,数据只能全部匹配
-- 引发笛卡尔积现象
select * from student, grade;-- sql98的标准写法
select * from student cross join grade;

#内连接
select * from student, grade where student.class_id = grade.id;
select * from student, grade where student.class_id = grade.id and student.name = "小明";

练习题

一、单表查询

素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等
CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` float(8,2) NOT NULL,`政治面貌` varchar(10) NOT NULL DEFAULT '群众',`姓名` varchar(20) NOT NULL,`出生日期` date NOT NULL,PRIMARY KEY (`职工号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1003, '2011-1-4', 8500.00, '党员', '王亮', '1983-6-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-9-5');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1005, '2014-4-1', 4800.00, '党员', '钱七', '1992-12-30');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1006, '2017-5-5', 4500.00, '党员', '孙八', '1996-9-2');

要求:

1、显示所有职工的基本信息。
select*from worker;
2、查询所有职工所属部门的部门号,不显示重复的部门号。  
select distinct 部门号 from worker;
3、求出所有职工的人数。
select count(*) as 总人数 from worker;
4、列出最高工和最低工资。 
select max(工资),min(工资) from worker;
5、列出职工的平均工资和总工资。
select avg(工资),sum(工资) from worker;
6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。 
create table workday(`职工号` int(11) primary key auto_increment,`姓名` varchar(10) unique,`参加工作` varchar(10)
);
7、显示所有女职工的年龄。 select name, age from worker where gender="女";
8、列出所有姓刘的职工的职工号、姓名和出生日期。
select 职工号,姓名,出生日期 from worker where 姓名 like "刘%";
9、列出1960年以前出生的职工的姓名、参加工作日期。
mysql> select 姓名,工作时间 from worker where 工作时间 <=1960-01-01;
10、列出工资在1000-2000之间的所有职工姓名。 
select 姓名  from worker where 工资 between 1000 and 2000;
11、列出所有陈姓和李姓的职工姓名。
select 姓名 from worker where 姓名 like "陈%" and 姓名 like "李%";
12、列出所有部门号为2和3的职工号、姓名、党员。
select 职工号, 姓名,政治面貌 from worker where 部门号 between 2 and 3 and 政治面貌 = "党员";
13、将职工表worker中的职工按出生的先后顺序排序。
select*from worker order by 出生日期 asc;
14、显示工资最高的前3名职工的职工号和姓名。 
select*from worker order by 工资 desc limit 3;
15、求出各部门党员的人数。 
select 部门号,sum(政治面貌="党员") as 党员人数 from worker group by 部门号;
16、统计各部门的工资和平均工资
select 部门号,sum(工资) as 总工资, avg(工资) as 平均工资 from worker group by 部门号;
17、列出总人数大于4的部门号和总人数
select 部门号,count(*) as 总人数 from worker group by 部门号 having count(*) > 4;

二、多表查询

1.创建student和score表
CREATE  TABLE student (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY ,
name  VARCHAR(20)  NOT NULL ,
sex  VARCHAR(4) ,
birth  YEAR,
department  VARCHAR(20) ,
address  VARCHAR(50)
);创建score表。SQL代码如下:
CREATE  TABLE score (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  AUTO_INCREMENT ,
stu_id  INT(10)  NOT NULL ,
c_name  VARCHAR(20) ,
grade  INT(10)
);2.为student表和score表增加记录
向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);

要求:

3.查询student表的所有记录
select*from student;
4.查询student表的第2条到4条记录
select*from student limit 1,4;
5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
mysql> select id,name,department from student;
6.从student表中查询计算机系和英语系的学生的信息
select*from student where department ="计算机系" or department="英语系";
7.从student表中查询年龄18~22岁的学生信息
select*from student where age between 18 and 22;
8.从student表中查询每个院系有多少人
select department,count(department) as 人数 from student group by department; 
9.从score表中查询每个科目的最高分
select c_name,max(grade) from score group by c_name;
10.查询李四的考试科目(c_name)和考试成绩(grade)
select c_name,grade from student,score where student.id=score.stu_id and student.name="李四";
11.用连接的方式查询所有学生的信息和考试信息
select*from student,score;
12.计算每个学生的总成绩
select student.name as 姓名, sum(score.grade) as 总成绩 from student join score on student.id=score.stu_id group by student.id,student.name;
13.计算每个考试科目的平均成绩
select c_name ,avg(grade) from score group by c_name;
14.查询计算机成绩低于95的学生信息
select*from student join score on (student.id=score.stu_id) where grade <95 and c_name="计算机";
15.查询同时参加计算机和英语考试的学生的信息
select*from student join score on (student.id=score.stu_id) where c_name="计算机" or c_name="英语" and ;
16.将计算机考试成绩按从高到低进行排序
select grade as 计算机成绩 from score where c_name="计算机" order by grade desc ;
17.从student表和score表中查询出学生的学号,然后合并查询结果
select id as 学号 from student union select stu_id as 学号 from score order by 学号;
18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
select name,department,c_name,grade from student join score on (student.id=score.stu_id) where student.name like "张老六" or student.name like "王%";
19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
select name,(YEAR(CURDATE()) - birth) as 年龄,department,c_name as 考试科目,grade as 成绩 from student join score on(student.id=score.stu_id) and address like "湖南%";

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/75722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试selenium(Java版)

1.准备工作 1.1.下载浏览器 自动化测试首先我们要准备一个浏览器,我们这里使用谷歌(chrome)浏览器. 1.2.安装驱动管理 每一个浏览器都是靠浏览器驱动程序来启动,但是浏览器的版本更新非常快,可能我们今天测试的是一个版本,第二天发布了一个新的版本,那么我们就要重构代码,很…

HarmonyOS Next应用架构设计与模块化开发详解

引言 在HarmonyOS Next开发中&#xff0c;合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路&#xff0c;并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…

伊利工业旅游4.0,近距离感受高品质的魅力

3月24日&#xff0c;在2025年第112届全国糖酒会&#xff08;简称春糖&#xff09;前夕&#xff0c;伊利集团“可感知高品质探寻荟”活动在成都召开&#xff0c;记者走进伊利在西南地区最大的乳制品生产基地—邛崃工厂&#xff0c;零距离见证液态奶、酸奶、冷饮等乳制品的诞生&a…

测试用例生成平台通过大模型升级查询功能,生成智能测试用例

在测试工作中&#xff0c;查询功能是各类系统的核心模块&#xff0c;传统的测试用例编写往往耗时且重复。如何让老旧平台焕发新活力&#xff1f;本文将结合大模型技术&#xff0c;通过用户输入的字段信息&#xff0c;自动化生成高效、精准的测试用例。同时&#xff0c;我们还将…

基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

背景前摇&原视频教程&#xff1a; 最近看到很多同学都在用Coze平台操作数据&#xff0c;我也想了解一下工作流的搭建和数据处理过程&#xff0c;但是一下子又看不懂太复杂的逻辑&#xff0c;于是上B站搜索相关的基础教程。 Coze官方教程&#xff1a; 之前有看过Coze平台…

【Axure高保真原型】纵向图片轮播

今天和大家分享纵向图片轮播的原型模版&#xff0c;载入后会自动循环轮播&#xff0c;鼠标移入图片后停止轮播&#xff0c;可以通过点击上下箭头&#xff0c;向上或向下滑动切换上一张或下一张图片&#xff0c;也可以点击右侧小圆点快速切换至对应图片……具体效果可以打开下方…

力扣32.最长有效括号(栈)

32. 最长有效括号 - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<stack> #include<string> /*最长有效*/ class Solution { public:int longestValidParentheses(string s) {stack<int> st;int ans0;int ns.length();st.push(-1);fo…

如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载?

大白话如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载&#xff1f; 在 React 项目里&#xff0c;有时候组件功能多、体积大&#xff0c;要是一次性把所有组件都加载进来&#xff0c;网页加载速度就会变慢。而 React 提供了 React.lazy 和 Suspense 这两个好东西…

ffmpeg-将多个视频切片成一个新的视频

使用 ffmpeg 工具可以轻松完成将多个视频切片合并为一个新的视频。以下是实现这一目标的具体步骤和命令。 步骤概览 1、将多个视频切片。 2、创建文本文件列出切片的视频片段。 3、使用 ffmpeg 合并这些切片为一个新的视频。 一&#xff1a;安装 ffmpeg 确保你的系统中已经安…

【第2月_day10】Pandas数据查看与选择

以下是专为小白设计的 Pandas数据查看与选择 学习内容&#xff0c;从基础到应用逐步讲解&#xff0c;附带清晰示例和注意事项&#xff1a; 一、数据查看&#xff1a;快速了解你的数据 1. head() 和 tail() 作用&#xff1a;查看数据的前几行或后几行&#xff0c;默认显示5行。…

Jetpack LiveData 使用与原理解析

一、引言 在 Android 开发中&#xff0c;数据的变化需要及时反映到界面上是一个常见的需求。然而&#xff0c;传统的方式可能会导致代码复杂、难以维护&#xff0c;并且容易出现内存泄漏等问题。Jetpack 组件中的 LiveData 为我们提供了一种优雅的解决方案&#xff0c;它是一种…

Unity2D 五子棋 + Photon联网双人对战

开发环境配置 Unity版本2022.3 创建Photon账号以及申请Photon中国区服务 官网申请账号&#xff1a;Multiplayer Game Development Made Easy Photon Engine 中国区服务&#xff1a; 光子引擎photonengine中文站 成都动联无限科技有限公司(vibrantlink.com) 导入PUN2插件以及…

(UI自动化测试web端)第二篇:元素定位的方法_css定位之属性选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写&#xff1f; 文章介绍了第四种写法属性选择器 &#xff0c;你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习&#xff0c;全都熟了之后你在工作当中使用起来元素定…

预编译能否 100%防 sql 注入?

&#x1f31f; 什么是 SQL 注入&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是指攻击者利用特殊输入&#xff0c;让数据库执行它本来不应该执行的代码&#xff0c;从而获取或篡改数据。 就像在考试的时候偷偷改题目&#xff0c;让老师改成你想要的内容&#…

第十五章 | Layer2、Rollup 与 ZK 技术实战解析

&#x1f4da; 第十五章 | Layer2、Rollup 与 ZK 技术实战解析 ——构建下一代高性能区块链应用&#xff0c;从 Solidity 到 zkSync&#xff01; ✅ 本章导读 Layer2 和零知识证明&#xff08;ZK&#xff09;正成为区块链发展的核心方向。 随着主网 Gas 居高不下、TPS 无法满…

2025-03-26 学习记录--C/C++-PTA 6-3 求链式表的表长

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 6-3 求链式表的表长 本题要求实现一个函数&#xff0c;求链式表的表长。 函数接口定义&#xff1a; &…

【Linux】Linux_Ubuntu与Windows之间的文件传输

一、Linux终端命令的复制粘贴 1.打开linux 终端&#xff0c;输入以下命令&#xff1a;&#xff08;注意&#xff0c;需要联网&#xff09; 2.命令行下载&#xff1a; sudo apt-get autoremove open-vm-tools 3.命令行安装&#xff1a; sudo apt-get install open-vm-tools-…

Python Sanic面试题及参考答案

目录 Sanic 的事件循环机制与 uvloop 的关系 Sanic 的 Request/Response 对象生命周期如何管理?如何访问请求上下文? 对比 Sanic 与 Flask/Django 的异步处理模型差异 Sanic 的 Blueprint 机制如何实现模块化路由?如何处理跨蓝图中间件? 如何在 Sanic 中实现 WebSocket…

算法每日一练 (18)

&#x1f4a2;欢迎来到张翊尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (18)删除并获得点数题目描述解题思路解题…