MySQL01

2023-11-11

课程回顾:
数据库相关sql
查询所有 show databases;
创建 create database db1 charset=utf8/gbk;
查看数据库信息: show create database db1;
删除数据库: drop database db1;
使用: use db1

表相关sql

创建表: create table t1(name varchar(20),age int) charset=utf8/gbk;
查询所有: show tables;
查询表信息: show create table t1;
表字段: desc t1;
删除表: drop table t1;
修改表名: rename table t1 to t2;
添加表字段: alter table t1 add gender varchar(5) first/after xxx;
删除表字段: alter table t1 drop gender;
修改表字段: alter table t1 change 原名 新名 新类型;

数据相关
插入:insert into t1(字段1名,字段2名)values(值1,值2),(值1,值2),(值1,值2);

创建表: create table t1(name varchar(20),age int) charset=utf8/gbk;

查询所有: show tables;
查询表信息: show create table t1;
表字段: desc t1;
删除表: drop table t1;
修改表名: rename table t1 to t2;
添加表字段: alter table t1 add gender varchar(5) first/after xxx;

删除表字段: alter table t1 drop gender;
修改表字段: alter table t1 change 原名 新名 新类型;

综合练习题2
创建数据库newdb1, 字符集utf8并使用
create database newdb1 charset=utf8;
use newdb1;
在数据库中创建员工表emp 字段:id,name,sal(工资),deptId(部门id) 字符集utf8
create table emp(id int,name varchar(50),sal int,deptId int)charset=utf8;
创建部门表dept 字段:id,name,loc(部门地址) 字符集utf8
create table dept(id int,name varchar(20),loc varchar(50))charset=utf8;
部门表插入以下数据: 1 神仙部 天庭 2 妖怪部 盘丝洞
insert into dept values(1,‘神仙部’,‘天庭’),(2,‘妖怪部’,‘盘丝洞’);
员工表插入一下数据: 1 悟空 5000 1 , 2 八戒 2000 1 , 3 蜘蛛精 8000 2 , 4 白骨精 9000 2
insert into emp values(1,‘悟空’,5000,1),(2,‘八戒’,2000,1),(3,‘蜘蛛精’,8000,2),(4,‘白骨精’,9000,2);
查询工资6000以下的员工姓名和工资
select name,sal from emp where sal<6000;
修改神仙部的名字为取经部
update dept set name=‘取经部’ where name=‘神仙部’;
给员工添加奖金comm字段
alter table emp add comm int;
修改员工表中部门id为1的 奖金为500
update emp set comm=500 where deptId=1;
把取经部的地址改成五台山
update dept set loc=“五台山” where name=‘取经部’;
修改奖金字段为性别gender字段 类型为varchar
alter table emp change comm gender varchar(5);
修改孙悟空和猪八戒性别为男
update emp set gender=‘男’ where deptId=1;
删除没有性别的员工(null不能用= 要用is)
delete from emp where gender is null;
删除性别字段
alter table emp drop gender;
删除表 和 删除数据库
drop table emp;
drop table dept;
drop database newdb1;

SQL分类
DDL: 数据定义语言, 包括: 数据库向和表相关的SQL
DML: 数据操作语言, 包括: 增删改查
DQL: 数据查询语言, 只包括查询 select
TCL: 事务控制语言, 包含和事务相关的内容
DCL: 数据控制语言, 包含用户管理,权限分配相关SQL

SQL分类
DDL: 数据定义语言, 包括: 数据库向和表相关的SQL
DML: 数据操作语言, 包括: 增删改查
DQL: 数据查询语言, 只包括查询 select
TCL: 事务控制语言, 包含和事务相关的内容
DCL: 数据控制语言, 包含用户管理,权限分配相关SQL

数据类型
整数: int(m)和bigint(m) , bigint相当于Java中的long, m代表显示长度,m=5 存18 得到00018, 需要结合zerofill关键字使用
举例: create table t1(age int(5) zerofill);
insert into t1 values(18);
select * from t1;

浮点数: double(m,d) m代表总长度, d代表小数长度 m=5,d=3 23.123
举例: create table t2(price double(5,3));
insert into t2 values(54.321);
insert into t2 values(54.332211);
insert into t2 values(5433.2211); //会报错或出现99.999

字符串:
char(m): 固定长度, m=5 存"abc" 占5个字符长度, 执行效率略高,当存储内容长度固定时使用,比如:性别 m最大值255
varchar(m):可变长度, m=5 存"abc" 占3个字符长度,更节省存储空间,m最大值65535, 长度在255以内的建议使用
text(m):可变长度, m最大值65535 , 建议长度大于255时使用
日期:
date:保存年月日
time:保存时分秒
datetime:保存年月日时分秒,默认值null
timestamp(时间戳举例1970年1月1日的毫秒数):保存年月日时分秒,默认值为当前系统时间

测试:
create table t3(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t3 values(“2021-11-22”,“10:38:20”,null,null);
insert into t3 values(null,null,“2021-11-22 10:38:20”,null);

主键约束
主键: 表示数据唯一性的字段称为主键
约束: 创建表时,给表字段添加的限制条件
主键约束:限制主键的值 唯一且非空.
举例: create table t4(id int primary key,name varchar(20));
insert into t4 values(1,‘aaa’);
insert into t4 values(1,‘bbb’); 报错 重复数据
insert into t4 values(null,‘ccc’); 报错 不能为null

主键约束+自增
自增规则:从历史最大值+1
create table t5(id int primary key auto_increment,name varchar(20));
insert into t5 values(null,‘aaa’);
insert into t5 values(null,‘bbb’);
insert into t5 values(10,‘ccc’);
insert into t5 values(null,‘ddd’);
delete from t5 where id>=10;
insert into t5 values(null,‘eee’);
truncate table t5; //把表删除 并重新创建 此时计数器才会清零

去重distinct
查询员工表中有哪几种不同的工作?
select distinct job from emp;
查询员工表中有哪几个不同的部门id?
select distinct dept_id from emp;

is null 和 is not null
查询没有上级领导的员工姓名
select name from emp where manager is null;
查询有上级领导的员工姓名
selec

and和or
多个条件同时满足时使用and
多个条件满足一个就可以时 使用or
查询1号部门工资高于2000的员工信息
select * from emp where dept_id=1 and sal>2000;
查询3号部门的员工或者工资等于5000的员工信息
select * from emp where dept_id=3 or sal=5000;
查询孙悟空和猪八戒的员工信息
select * from emp where name=“孙悟空” or name=“猪八戒”;

比较运算符 > < >= <= = !=和<>
查询不是程序员的姓名和工资
select name,sal from emp where job!=“程序员”;
select name,sal from emp where job<>“程序员”;

两者之间between x and y 包含x和y
查询工资在2000到3000之间的员工信息
select * from emp where sal between 2000 and 3000;
select * from emp where sal not between 2000 and 3000; 范围取反

in关键字
当查询某个字段的值为多个值的时候使用in
查询工资为3000,1500,5000的员工信息
select * from emp where sal=3000 or sal=1500 or sal=5000;
select * from emp where sal in(3000,1500,5000);
查询孙悟空,猪八戒和白骨精的信息
select * from emp where name in(‘孙悟空’,‘猪八戒’,‘白骨精’);

综合练习题
查询1号部门有哪几种不同的工作?
select distinct job from emp where dept_id=1;
查询1号部门中有上级领导的员工信息
select * from emp where dept_id=1 and manager is not null;
查询工作是程序员,销售和人事的员工信息
select * from emp where job in(‘程序员’,‘销售’,‘人事’);
查询有奖金的员工信息
select * from emp where comm>0;

模糊查询like
%: 代表0或多个未知字符
_:代表1个未知字符
举例:
以x开头 x%
以x结尾 %x
包含x %x%
第二个字符是x x%
以x开头以y结尾 x%y
第二个是x倒数第三个是y x%y
查询姓孙员工信息
select * from emp where name like “孙%”;
查询名字以精结尾的员工姓名
select name from emp where name like “%精”;
查询工作第二个字是售的员工姓名和工作
select name,job from emp where job like “_售%”;
查询名字中包含僧并且工资大于2000的员工姓名和工资
select name,sal from emp where name like “%僧%” and sal>2000;

排序 order by
格式: order by 字段名 asc(默认升序)/desc降序;
查询员工姓名和工资,按照工资升序
select name,sal from emp order by sal;
查询员工姓名和工资,按照工资降序
select name,sal from emp order by sal desc;
查询1号部门的姓名和工资并且按照工资降序排序
select name,sal from emp where dept_id=1 order by sal desc;
查询每个员工的姓名,工资和部门id按照部门id升序排序,如果部门id相同则按照工资降序排序
select name,sal,dept_id from emp order by dept_id,sal desc;

排序 order by
格式: order by 字段名 asc(默认升序)/desc降序;
查询员工姓名和工资,按照工资升序
select name,sal from emp order by sal;
查询员工姓名和工资,按照工资降序
select name,sal from emp order by sal desc;
查询1号部门的姓名和工资并且按照工资降序排序
select name,sal from emp where dept_id=1 order by sal desc;
查询每个员工的姓名,工资和部门id按照部门id升序排序,如果部门id相同则按照工资降序排序
select name,sal,dept_id from emp order by dept_id,sal desc;

综合练习题
查询员工表中3号部门工资高于1500的员工信息
select * from emp where dept_id=3 and sal>1500;
查询2号部门员工或者没有领导的员工信息
select * from emp where dept_id=2 or manager is null;
查询有领导的员工姓名,工资按照工资降序排序
select name,sal from emp where manager is not null order by sal desc;
查询2号和3号部门的员工姓名和入职日期hiredate 按照入职日期降序排序
select name,hiredate from emp where dept_id in(2,3) order by hiredate desc;
查询名字中包含僧和包含精的员工姓名
select name from emp where name like “%僧%” or name like “%精%”;
查询工资高于2000的工作有哪几种?
select distinct job from emp where sal>2000;
查询工资升序第4页的2条数据
select * from emp order by sal limit 6,2;

别名
select name from emp;
select name as “名字” from emp;
select name “名字” from emp;
select name 名字 from em

数值计算
查询每个员工的姓名,工资和年终奖(3个月的工资)
select name,sal,3*sal 年终奖 from emp;
给3号部门的员工每人涨薪5块钱
update emp set sal=sal+5 where dept_id=3;

聚合函数
可以对查询的多条数据进行统计查询, 统计方式包括: 求平均值,最大值,最小值,求和,计数
平均值avg(字段名)
查询2号部门的平均工资
select avg(sal) from emp where dept_id=2;
查询销售的平均工资
select avg(sal) from emp where job=“销售”;
最大值max(字段名)
查询1号部门的最高工资
select max(sal) from emp where dept_id=1;
最小值min(字段名)
查询1号部门的最低工资
select min(sal) from emp where dept_id=1;
求和sum(字段名)
查询1号部门的工资总和
select sum(sal) from emp where dept_id=1;
计数count()
查询工资高于2000的员工人数
select count(
) from emp where sal>2000;

查询2号部门的平均工资,最高工资,最低工资,工资总和,人数
select avg(sal) 平均工资,max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总和,count(*) 人数 from emp where dept_id=2;

聚合函数
可以对查询的多条数据进行统计查询, 统计方式包括: 求平均值,最大值,最小值,求和,计数
平均值avg(字段名)
查询2号部门的平均工资
select avg(sal) from emp where dept_id=2;
查询销售的平均工资
select avg(sal) from emp where job=“销售”;
最大值max(字段名)
查询1号部门的最高工资
select max(sal) from emp where dept_id=1;
最小值min(字段名)
查询1号部门的最低工资
select min(sal) from emp where dept_id=1;
求和sum(字段名)
查询1号部门的工资总和
select sum(sal) from emp where dept_id=1;

计数count(*)
查询工资高于2000的员工人数
select count(*) from emp where sal>2000;

查询2号部门的平均工资,最高工资,最低工资,工资总和,人数
select avg(sal) 平均工资,max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总和,count(*) 人数 from emp where dept_id=2;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL01 的相关文章

  • 根据日期顺序排名

    我的数据如下 Heading Date A 2009 02 01 B 2009 02 03 c 2009 02 05 d 2009 02 06 e 2009 02 08 我需要如下排名 Heading Date Rank A 2009 02
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • 在 SQL 中,如何从 SELECT * FROM ... 中排除结果?

    我知道我的标题不太具有描述性 让我在这里详细解释一下 假设一个表有 26 个字段 例如字段 a 字段 z 我只想要一个选择查询只返回 15 个字段 所以 通常 我会执行 SELECT field a field b field o FROM
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 如何检测Mysql/innodb中的死锁?

    我知道在 Innodb 中使用事务时不可避免地会发生死锁 并且如果应用程序代码正确处理死锁 它们是无害的 正如手册所说 只需再试一次 所以我想知道 如何检测死锁 死锁是否会发出一些特殊的 mysql 错误号 如果重要的话 我正在使用 PHP
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • MySQL 与日语字符

    我试图弄清楚如何创建一个表 以便我可以在其中插入日语名字 现在我有 Type InnoDB Encoding UTF 8 Unicode utf8 Collation utf8 general ci 但是 当我插入字符时 它显示为 当我使用
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 数据库的基础学习

    数据库对于程序员来说是一个必备的技能 我也开始了数据的学习 看的教程比较老 是郝斌的sqlsever基础教程 用的数据库是sqlsever2008 说起数据库 之前仿照的医药项目已经开始陆陆续续接触到了 所以也去3wschool上补过一些常
  • Queue(单项队列)和Deque(双端队列)的知识点整理

    1 Queue 单向队列 1 1 定义 常见队列就是FIFO 先进先出 队列 可以实现前端删除 peek pop from front 后端添加 push to back 的功能 1 2 实现 既可以用数组 顺序队列 也可以用链表 链式队列
  • shell中的三种引号

    元字符 指在shell中有特殊含义的字符 lt gt 双引号 消除元字符的特殊含义 除 三个字符外 均当作普通字符处理 单引号 除单引号自身外 都当作普通字符来处理 可以使用 来消除单引号的特殊语义 单引号 命令替换 将一个命令的输出作为另
  • ChatGPT影响大学生思想行为模式的三个维度

    ChatGPT作为新一代AI技术的代表 深刻嵌入并影响着大学生的日常学习和生活场景 其在提升学习研究效率 拓宽认知阈限 重塑人机互动模式等方面带来极大突破 也会对大学生的思想行为模式产生潜在的影响 这些影响可以从个体 关系与社会三个维度进行
  • 北师大19秋计算机在线1,北师19秋《专科英语(二)》在线作业1【满分答案】

    可做奥鹏全部院校作业论文 答案请添加qq 599792222 或 微信 1095258436 19秋 专科英语 二 在线作业1 试卷总分 100 得分 100 一 单选题 共 60 道试题 共 60 分 1 around all over
  • ctfshow CRYPTO RSA

    ctfshow CRYPTO RSA babyrsa easyrsa1 easyrsa2 easyrsa3 easyrsa4 easyrsa5 easyrsa6 easyrsa7 easyrsa8 babyrsa 先看txt 直接上脚本 i
  • Android绘制虚线

    Android绘制虚线的两种方式 1 自定义view 看到网上很多人说用drawLine绘制 但是其实根本就没有效果 真正效果的是drawPath这个方法 话不多说直接上代码 public class DotView extends Vie
  • 【云原生之Docker实战】使用docker部署mkdocs项目文档工具

    云原生之Docker实战 使用docker部署mkdocs项目文档工具 一 mkdocs介绍 1 mkdocs简介 2 mkdocs特点 二 检查本地环境 1 检查docker版本 2 检查docker状态 3 检查系统版本 三 下载mkd
  • VUE 开发使用的一些表格框架

    Vue 开发中使用的框架 表格 1 http www quasarchs com 2 https vxetable cn table start install
  • Spring Boot 实现 WebSocket 示例

    什么是 WebSocket WebSocket协议提供了一种标准化的方法 通过单个TCP连接在客户机和服务器之间建立全双工 双向的通信通道 它是一种不同于HTTP的TCP协议 但被设计为在HTTP上工作 使用端口80和443 并允许重用现有
  • 电量优化与网络优化

    一 Doze低电耗模式 未充电 屏幕熄灭 让设备在一段时间内保持不活动状态 延迟应用的后台 CPU 和网络活动 从而降低耗电量 二 Standby待机模式 应用待机模式会延迟用户近期未与之交互的应用的后台网络活动 三 白名单 系统提供了一个
  • JS工具库之正则规则校验

    1 内置了一些校验规则 如是否手机号 邮箱号 URL等 这些规则方法 写在test js下面 如验证是否手机号 test mobile 13888889999 如果验证通过 返回true 否则返回false 例子1 是否验证码 校验是否验证
  • 信息熵到底是什么

    信息是我们一直在谈论的东西 但信息这个概念本身依然比较抽象 在百度百科中的定义 信息 泛指人类社会传播的一切内容 指音讯 消息 通信系统传输和处理的对象 但信息可不可以被量化 怎样量化 答案当然是有的 那就是 信息熵 早在1948年 香农
  • ubantu环境下IDA pro运行时碰到某些so找不到的问题

    最近帮组员解决IDA的问题 做个记录 问题 执行启动idea时出现报错 IDA Pro idaq64 报错如下 idaq64 error while loading shared libraries libgthread 2 0 so 0
  • 基于opencv中HOG+SVM的车轮识别及predict()函数的改进

    前言 opencv中HOG SVM已经是一个相对成熟的环境 只是在满足兼容性的条件下会牺牲很大的时间开销 在训练部分未做改进 只是对detectMultiScale 中的predict进行改进 其中HOG特征计算请参考 http blog
  • Oracle恢复删除的数据

    不下心删除了生产库的数据或者不小心删除了一部分数据 如何恢复找回 Oracle恢复删除数据的方法 方案一 利用oracle提供的闪回方法进行数据恢复 适用于delete删除方式 首先获取删除数据的时间点 select from v sql
  • C++_模板函数

    参考以下大佬博客 参考1 参考2 参考3 参考4 参考5 我们为什么需要模板 同样的函数 我们要为不同的参数类型写不同的版本 程序的逻辑是一模一样的 只是他们的类型是不一样的 如下 void Swap int x int y int tmp
  • ARM嵌入式体系架构(理论篇)

    基础知识 1 电路中的逻辑状态 0代表的是低电平 1代表高电平 2 半导体元开关 1 二极管 单向导通性 普通二极管 发光二极管 光敏二极管 稳压二极管 2 三极管 开关特性 C 集电集 B 基集 E 发射集 PNP型 电流方向从E极流向C
  • keil报错:No Target connected+Error: Flash Download failed - Target DLL has been cancelled四种可能

    一 供电 板子一定要供电 二 ST LINK是否接触不良 确保ST LINK跟板子连接完好 三 按住reset点击download 硬件和接线都没问题情况下 这时候可能是SWD的引脚被占用了 或者被禁用了 这时候ST LINK自然无法通过S
  • MySQL01

    课程回顾 数据库相关sql 查询所有 show databases 创建 create database db1 charset utf8 gbk 查看数据库信息 show create database db1 删除数据库 drop da