MySQL数据库---记录相关操作
序
表中记录的相关操作一共四种:插入,更新,删除、查询。其中使用最多,也是最难的就是查询。
记录的插入
1. 插入完整数据(顺序插入)
语法一:
INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二:
INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入数据
语法:
INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); 3. 插入多条记录
语法:
INSERT INTO 表名 VALUES
(值1,值2,值3…值n),
(值1,值2,值3…值n),
(值1,值2,值3…值n);
例子:
insert into db1 values(1, "aaa", 20, "male"); insert into db1 values(1, "aaa", 20, "male"), (2, "bbb", 22, "female");
记录的更新
UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION;
例子:
update db1 set name = "ccc" where name = "aaa";
记录的删除
DELETE FROM 表名 WHERE CONITION;
例子:
delete from db1 where name ="xxx";
记录的查询
1.单表查询
格式:
select distinct 字段1,字段2,... from 表名
where 条件
group by 分组条件
having 对分组后的数据进行筛选的条件
order by 排序
limit 分组
关键字的执行优先级:
from 找到表:from
where 拿着where指定的约束条件,去表中取出一条条记录
group by 将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
having 将分组的结果进行having过滤
select 执行select
distinct 去重
order by 将结果按条件排序:order by
limit 限制结果的显示条数
数据准备:
create table employee(
id int not null unique auto_increment,
name varchar(20) not null,
sex enum('male','female') not null default 'male',
age int(3) unsigned not null default 28,
hire_date date not null,
post varchar(50),
post_comment varchar(100),
salary double(15,2),
office int,
depart_id int
); insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
('aaa','male',18,'20170301','tracher',7300.33,401,1),
('bbb','male',78,'20150302','teacher',1000000.31,401,1),
('ccc','female',18,'20110211','teacher',9000,401,1),
('111','female',48,'20150311','sale',3000.13,402,2),
('222','female',38,'20101101','sale',2000.35,402,2),
('333','female',18,'20110312','sale',1000.37,402,2),
('xxx','male',28,'20160311','operation',10000.13,403,3),
('yyy','male',18,'19970312','operation',20000,403,3),
('zzz','female',18,'20130311','operation',19000,403,3);
1.1 where查询:
where查询:
查询所有员工的姓名和薪水
select name,salary from employee; 查询所有女性员工的姓名和薪水
select name,salary from employee where sex = 'female'; 查询薪资在10000到30000之间的员工的姓名和薪水
select name,salary from employee where salary between 10000 and 30000; 查询薪资是19000或是7300.33员工的姓名和薪水
select name,salary from employee where salary in (19000, 7300.33); 匹配名称以a开头的员工的姓名和薪水(%:任意长度任意字符 _:一个任意字符)
select name,salary from employee where name like 'a%';
1.2 group by分组:
group by分组:
分组:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等
注意:分组发生在where之后,即分组是基于where之后得到的记录而进行的
注意:可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数 按照职位进行分组,查询职位的名称
select post from employee group by post; 按照职位进行分组,查询职位的名称和每一种职位上的员工个数,注意不能单独使用id字段,但是可以使用聚合函数
select post, count(id) from employee group by post;
1.3 聚合函数:
聚合函数:
注意:聚合函数聚合的是组的内容,若是没有分组,则默认一组
count() 计算组内个数
max() 计算组内最大值
min() 计算组内最小值
sum() 计算组内和
avg() 计算组内平均值
1.4 having:
having:
注意:Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数 统计平均薪资超过10000的职位
select post, avg(salary) from employee group by post having avg(salary) > 10000;
1.5 select:
select:
注意:执行的是字段,字段也是可以进行计算的 查询所有员工的姓名和薪资
select name, salary from employee; 查询所有员工的姓名和年薪
select name, salary * 12 as nian_xing from employee;
1.6 distinct:
distinct:
注意:distinct后面接多个字段时,表示多个字段接续之后字符串不重复
1.7 order by:
order by:
按照薪资升序排列
select name, salary from employee order by salary asc; 按照薪资降序排列
select name, salary from employee order by salary desc;
1.8 limit:
limit:
按照薪资升序排列, 从第0开始,即先查询出第一条,然后包含这一条在内往后查3条
select name, salary from employee order by salary asc limit 0, 3; 按照薪资升序排列, 从第3开始,即先查询出第6条,然后包含这一条在内往后查3条
select name, salary from employee order by salary asc limit 3, 3;
1.9 正则表达式查询:
正则表达式查询: 查询所有名称以aa开头的员工
select * from employee where name regexp '^aa'; 查询所有名称以aa结尾的员工
select * from employee where name regexp 'aa$'; 查询所有名称以aa开头且以bb结尾的员工
select * from employee where name regexp '^aa.*[bb]$';
2.多表查询
2.1 表与表之间的关系
表与表之间的关系:
一对一 foreign key + unique
一对多 foreign key
多对多 新建第三张表,建立两个字段,每个字段分别是两张表的外键 判断表关系的方法: 先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) 再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id) 总结:
多对一:
如果只有步骤1成立,则是左表多对一右表
如果只有步骤2成立,则是右表多对一左表 多对多
如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系 一对一:
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可
2.2 查询格式
格式:
select 字段列表 from 表1 inner | left | right join 表2 on 表1.字段 = 表2.字段;
2.3 数据准备
create table department(
id int,
name varchar(20)
); create table employee(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
); #插入数据
insert into department values
(200,'aaa'),
(201,'bbb'),
(202,'cc'),
(203,'dd');
(205,'ee'); insert into employee(name,sex,age,dep_id) values
('zhansan','male',18,200),
('lisi','female',48,201),
('wangwu','male',38,201),
('zhaoliu','female',28,202)
('chengyi','female',29,204);
2.4 查询方式
内连接:
不适用任何匹配条件。生成笛卡尔积
select * from employee inner join department; 根据部门ID相同过滤
select * from employee inner join department on employee.dep_id = department.id; 左连接:
将左表中没有匹配成功的内容也输出
select * from employee left join department on employee.dep_id = department.id; 右连接:
将右表中没有匹配成功的内容也输出
select * from employee right join department on employee.dep_id = department.id; 子查询:
子查询是将一个查询语句嵌套在另一个查询语句中
内层查询语句的查询结果,可以为外层查询语句提供查询条件
子查询中可以包含:in、any、all、exists等关键字
还可以包含比较运算符:= 、 !=、> 、<等 in:表示值存在子查询结果集中 any:表示满足子查询中的任意一个条件 all:表示满足所有子查询的条件 exists:子查询为真,外层循环正常执行;只循环为假,直接返回 查询平均年龄在25岁以上的部门名
select id,name from department where id in (select dep_id from employee group by dep_id having avg(age) > 25); 查询大于所有人平均年龄的员工名与年龄
select name,age from emp where age > (select avg(age) from emp); 查询为空,因为子查询返回false
select * from employee where exists (select id from department where id = 204);
MySQL数据库---记录相关操作的更多相关文章
- PHP对MySQL数据库的相关操作
一.Apache服务器的安装 <1>安装版(计算机相关专业所用软件---百度云链接下载)-直接install<2>非安装版(https://www.apachehaus.com ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- MySQL之记录相关操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- MySql数据库的相关操作
SQL(Structred Query Language)结构化查询语言:和数据库交互的语言,进行数据库管理的语言. 一.数据库的操作: 1.查询所有数据库: show databases; 2.创建 ...
- mysql数据库内容相关操作
第一:介绍 mysql数据内容的操作主要是: INSERT实现数据的插入 UPDATE实现数据的更新 DLETE实现数据的删除 SELECT实现数据的查询. 第二:增(insert) 1.插入完整的数 ...
- mysql数据库字符集相关操作(修改表字段编码,使其支持emoji表情)
普通的UTF8编码是不支持emoji表情插入的,会报异常: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x9 ...
- linux下安装mysql数据库与相关操作
如下命令都是用root身份安装,或者在命令前加上sudo 采用yum安装方式安装 yum install mysql #安装mysql客户端 yum install mysql-server #安装m ...
- mysql 数据库的相关操作
#coding=gbk #数据库的连接语句 import pymysql try: conn=pymysql.connect( host='127.0.0.1', port=3306, user='r ...
- 小白老凯,初出茅庐!请多关照!简单分享一些 mysql 数据库的安装操作!请给为大神雅正!
在我们写代码,存储数据时常常会用到各种数据库,如:mysql.access.sql.server.Oracle等等,在这里就说一下mysql数据库的的操作指令! 首先我们了解下如何安装mysql数据库 ...
随机推荐
- java 加密与解密艺术
视频来自黑马程序员公开课 对称加密之后的密文可能存在乱码,这些乱码无法识别,信息经过加密后会变成一串毫无规律的二进制串,此时再选择一种编码方式来展示,通常是 BASE64 格式的编码. 为了解决这个问 ...
- python0.1
python基础 python是一种高级编程语言,而编程语言分为3种 编程语言 编程语言是一种人与计算机沟通的工具. 编程就是就将人的需求通过攥写编程语言命令计算机完成指令. 编程的意义在于将人类的生 ...
- 计算机网络之tcp/ip协议族
TCP/IP协议族是一个四层协议系统: 1. 数据链路层 1.1 作用 (1) 实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输 (2) 网络驱动程序隐藏了不同物理网络的不同电气 ...
- Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)
1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...
- 【错误】fatal: destination path already exists and is not an empty directory. 错误及解决办法
今天在使用Git for Windows clone代码时,遇到了题目所示的错误,简单来说就是目标路径‘.’已经存在并且不是一个空目录. 可是在我在文件夹下并没有看到任何文件,显示“该文件夹为空”,然 ...
- 使用.net standard实现不同内网端口的互通(类似花生壳)
应用场景 1.公司电脑与家中电脑的远程控制,一般通过teamview.向日葵等软件,端口互通后,可以使用电脑自带的远程桌面 2.家中电脑搭建SVN.git仓库,在外网或者内网访问,一般使用云服务器,端 ...
- Yolo车辆检测+LaneNet车道检测
Yolo车辆检测+LaneNet车道检测 源代码:https://github.com/Dalaska/Driving-Scene-Understanding/blob/master/README.m ...
- 阿里云Linux CentOS8.1 用 xshell 上传和下载文件
下载: 例如有一个script 文件夹,我们要把它打包成 tar文件,并下载到本地.具体命令如下: 1.进入script 所在的目录,先打包,命令如下: tar -cvf script.tar scr ...
- IE6浏览器有哪些常见的bug,以及解决IE6常用bug的方法
1.IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100 ...
- HotSpot的启动过程
HotSpot通常会通过java.exe或javaw.exe来调用/jdk/src/share/bin/main.c文件中的main()函数来启动虚拟机,使用Eclipse进行调试时,也会调用到这个入 ...