【数据库】MySQL数据库(四)
一、对数据的操作(详细版)
1.添加数据
1> insert into 表名 (字段1,字段2...) values (值1,值2...);
2> insert into 表名 (字段1,字段2...) values (值1,值2...),(值1,值2...);
3> insert into 表名 values (值1,值2,值3...);
4> insert into 表名 values (值1,值2,值3...),(值1,值2,值3...);
5> insert into stu set id=833689,name='xiaojie',sex='w',age=28,classid='lamp155';
2.删除数据
1> delete from 表名; 别用!!!
2> delete from 表名 where 条件;
3> truncate table 表名; 保留表结构,清空表数据,id索引重新从1开始
3.修改数据
1> update 表名 set 字段名=修改后的值; //不加条件会导致所有的数据都被修改
2> update 表名 set 字段名=修改后的值 where 条件; //一定要加条件
3> update 表名 set 字段名1=值1,字段名2=值2... where 条件; //修改多条
4.查询数据
① select 主句
select database(); //查看当前所使用的数据库
select version(); //查看当前MySQL的版本
select user(); //查看当前所使用的用户
select 1+2; //3 //查看运算结果
注意:select 主句可以单独执行一些命令
② from 子句
1> select * from 表名; //从指定的表中查询数据
2> select 字段1,字段2... from 表名; //从指定的表中查出指定的字段信息
③ where 子句【***对于数据的查询进行条件限制会应用到的知识点***】
包含条件、算术运算符、逻辑运算符、比较运算符
算术运算符:+ - * / %
比较运算符:> < >= <= != =
逻辑运算符:逻辑或(or ||)、逻辑与(and &&)、逻辑非(not !)
提升运算符的优先级:()括弧
1.搜索stu表中id<20的所有数据;
select * from stu where id<20;
2.搜索stu表中id在20-40之间的数据;
select * from stu where id>20 && id<40;
select * from stu where id between 20 and 40;
3.搜索stu表中id除了20-40之间的数据,并且id小于50;
select * from stu where (id<20 || id>40) && id<50;
select * from stu where id not between 20 and 40;
4.搜索stu表中id在(1,3,5,7,9)之中的数据;
select * from stu where id=1 or id=3 or id=5 or id=7 or id=9;
select * from stu where id<10 && id%2=1;
select * from stu where id<10 && id%2!=0;
select * from stu where id in (1,3,5,7,9);
5.搜索id%2=0的所有数据
select * from stu where id%2=0;
6.搜索stu表中name它名字以5结尾的数据,并且id小于50的数据;
select * from stu where name like '%5'
7.搜索stu表中id数据以2开头的数据,并且id小于30的数据;
select * from stu where id like '2%' and id<30;
8.搜索stu表中class班级包含183的数据,并且id小于50的数据;
select * from stu where classid like '%175%';
in 关键字:
查询一个集合的数据
搜索stu表中id在1,3,5,7,9之中的数据;
搜索stu表中id不在1,3,5,7,9之中的数据,并且id小于20;
between...and... 关键字:
查询一个区间的数据
搜索stu表中id在20-40之间的数据;
搜索stu表中id除了20-40之间的数据,并且id小于50;
not 关键字:
配合其他的一些关键字来使用
like 关键字(模糊查询):
%:任意长度
_:一个长度
④ group by 分组子句:
查询出stu表中id在50之中的,按班级分组,并且统计每个班有多少学生,
统计数量大于8的数据显示出来
1.首先查询出stu表中id在50之中的数据
mysql> select * from stu where id<50;
+----+------------+-----+-----+---------+
| id | name | sex | age | classid |
+----+------------+-----+-----+---------+
| 1 | zhangsan1 | w | 23 | lamp177 |
| 2 | zhangsan2 | w | 28 | lamp176 |
| 3 | zhangsan3 | w | 21 | lamp177 |
| 4 | zhangsan4 | w | 19 | lamp180 |
| 5 | zhangsan5 | w | 26 | lamp176 |
| 6 | zhangsan6 | w | 24 | lamp180 |
………………
2.其次按班级分组(按照那个字段进行分组,就将该字段写到group by后面)
mysql> select * from stu where id<50 group by classid;
+----+------------+-----+-----+---------+
| id | name | sex | age | classid |
+----+------------+-----+-----+---------+
| 13 | zhangsan13 | w | 28 | lamp175 |
| 2 | zhangsan2 | w | 28 | lamp176 |
| 1 | zhangsan1 | w | 23 | lamp177 |
| 7 | zhangsan7 | w | 18 | lamp178 |
| 33 | zhangsan33 | w | 23 | lamp179 |
| 4 | zhangsan4 | w | 19 | lamp180 |
+----+------------+-----+-----+---------+
注意:classid前面的各项信息跟分组之后的信息无关,它只是取得每一个班级第一次
出现的那个人的信息显示出来了!
3.将每个班级的学生数量统计出来
mysql> select count(*) from stu where id<50 group by classid;
+----------+
| count(*) |
+----------+
| 6 |
| 8 |
| 9 |
| 6 |
| 5 |
| 15 |
+----------+
4.光有数量还不够,我得知道它所对应的班级,是哪个班
mysql> select classid,count(*) from stu where id<50 group by classid;
+---------+----------+
| classid | count(*) |
+---------+----------+
| lamp175 | 6 |
| lamp176 | 8 |
| lamp177 | 9 |
| lamp178 | 6 |
| lamp179 | 5 |
| lamp180 | 15 |
+---------+----------+
5.分组结束之后,还有一个分组后的条件时将统计数量大于6的显示出来
mysql> select classid,count(*) from stu where id<50 group by classid having count(*)>6;
+---------+----------+
| classid | count(*) |
+---------+----------+
| lamp176 | 8 |
| lamp177 | 9 |
| lamp180 | 15 |
+---------+----------+
6.结果查询到之后,再给count(*)字段进行一个别名的修改,改为sum
mysql> select classid,count(*) as sum from stu where id<50 group by classid having sum>6;
+---------+-----+
| classid | sum |
+---------+-----+
| lamp176 | 8 |
| lamp177 | 9 |
| lamp180 | 15 |
+---------+-----+
练习题:
查询stu表中id<30的数据,并且按性别进行分组,统计出男生和女生的人数,
给统计数量的那个字段一个别名叫sum
select sex,count(*) as sum from stu where id<30 group by sex;
⑤ order by:排序子句【***在项目期的数据排序会应用到的知识点***】
asc:升序排序(默认)
desc:降序排序
1.查询stu表中,id小于50的数据,按照年龄降序排序
select * from stu where id<50 order by age desc;
⑥ limit:分页子句【***在项目期的数据分页查询会应用到的知识点***】
注意:分页子句后面可以直接跟一个值,但是我们推荐写两个值
limit 0,5;
0:从第几条开始(表示的是数据的下标)
5:每页显示几条
mysql> select * from stu limit 0,5;
+----+-----------+-----+-----+---------+
| id | name | sex | age | classid |
+----+-----------+-----+-----+---------+
| 1 | zhangsan1 | m | 27 | lamp178 |
| 2 | zhangsan2 | m | 20 | lamp180 |
| 3 | zhangsan3 | m | 22 | lamp175 |
| 4 | zhangsan4 | w | 25 | lamp176 |
| 5 | zhangsan5 | m | 28 | lamp178 |
+----+-----------+-----+-----+---------+
5 rows in set (0.00 sec)
mysql> select * from stu limit 5,5;
+----+------------+-----+-----+---------+
| id | name | sex | age | classid |
+----+------------+-----+-----+---------+
| 6 | zhangsan6 | w | 28 | lamp176 |
| 7 | zhangsan7 | w | 18 | lamp180 |
| 8 | zhangsan8 | m | 27 | lamp178 |
| 9 | zhangsan9 | w | 27 | lamp179 |
| 10 | zhangsan10 | w | 22 | lamp177 |
+----+------------+-----+-----+---------+
5 rows in set (0.00 sec)
mysql> select * from stu limit 10,5;
+----+------------+-----+-----+---------+
| id | name | sex | age | classid |
+----+------------+-----+-----+---------+
| 11 | zhangsan11 | w | 28 | lamp179 |
| 12 | zhangsan12 | w | 19 | lamp177 |
| 13 | zhangsan13 | m | 19 | lamp176 |
| 14 | zhangsan14 | w | 19 | lamp178 |
| 15 | zhangsan15 | w | 26 | lamp176 |
+----+------------+-----+-----+---------+
5 rows in set (0.00 sec)
mysql> select * from stu limit 15,5;
+----+------------+-----+-----+---------+
| id | name | sex | age | classid |
+----+------------+-----+-----+---------+
| 16 | zhangsan16 | m | 26 | lamp175 |
| 17 | zhangsan17 | w | 19 | lamp178 |
| 18 | zhangsan18 | w | 18 | lamp177 |
| 19 | zhangsan19 | w | 23 | lamp179 |
| 20 | zhangsan20 | m | 20 | lamp175 |
+----+------------+-----+-----+---------+
5 rows in set (0.00 sec)
⑦ 搜索语句当中常用的一些函数
count(); //统计函数
mysql> select count(*) from stu;
+----------+
| count(*) |
+----------+
| 100 |
+----------+
max(); //求最大值
mysql> select max(age) from stu;
+----------+
| max(age) |
+----------+
| 28 |
+----------+
1 row in set (0.00 sec)
min(); //求最小值
mysql> select min(age) from stu;
+----------+
| min(age) |
+----------+
| 18 |
+----------+
1 row in set (0.00 sec)
sum(); //求和
mysql> select sum(age) from stu;
+----------+
| sum(age) |
+----------+
| 2295 |
+----------+
1 row in set (0.00 sec)
avg(); //求平均值
mysql> select avg(age) from stu;
+----------+
| avg(age) |
+----------+
| 22.9500 |
+----------+
1 row in set (0.00 sec)
⑧ 子查询(嵌套查询)
一个查询语句的结果是另一个查询语句的条件
mysql> select * from stu where age=(select max(age) from stu);
+-----+-------------+-----+-----+---------+
| id | name | sex | age | classid |
+-----+-------------+-----+-----+---------+
| 5 | zhangsan5 | m | 28 | lamp178 |
| 6 | zhangsan6 | w | 28 | lamp176 |
| 11 | zhangsan11 | w | 28 | lamp179 |
| 49 | zhangsan49 | m | 28 | lamp177 |
| 68 | zhangsan68 | w | 28 | lamp178 |
| 87 | zhangsan87 | m | 28 | lamp180 |
| 99 | zhangsan99 | w | 28 | lamp178 |
| 100 | zhangsan100 | w | 28 | lamp180 |
+-----+-------------+-----+-----+---------+
⑨ 查询语句的书写顺序
select 字段信息 from 表名 where 分组前条件 group by 字段信息 having 分组后条件 order by 排序字段 [asc|desc] limit 分页条件;
select -> from -> where -> group by -> having -> order by -> asc|desc -> limit
⑩ 关联查询(多表联查)【***在项目期的多表联查会使用到该知识点***】
当我们查询一个表的数据不能够完成我们想要的功能的时候,我们就可能会需要使用
多表联查的方法!
功能:
我想要查询怡红院表中每个人的姓名,以及它所对应的职位;
1.找关联:观察多个表,看他们两两之间字段的关系
确定两个表中有关系的字段是谁
2.先写出:select * from stulist,job;
mysql> select * from stulist,job;
+----+------+-----+-----+-----+----+-----+------------+
| id | name | sex | age | job | id | jid | name |
+----+------+-----+-----+-----+----+-----+------------+
| 1 | 康辉 | m | 28 | 4 | 1 | 1 | 怡红院老板 |
| 1 | 康辉 | m | 28 | 4 | 2 | 2 | 怡红院头牌 |
| 1 | 康辉 | m | 28 | 4 | 3 | 3 | 怡红院二牌 |
| 1 | 康辉 | m | 28 | 4 | 4 | 4 | 怡红院老鸨 |
| 1 | 康辉 | m | 28 | 4 | 5 | 5 | 怡红院龟公 |
| 2 | 丁辉 | w | 38 | 2 | 1 | 1 | 怡红院老板 |
| 2 | 丁辉 | w | 38 | 2 | 2 | 2 | 怡红院头牌 |
| 2 | 丁辉 | w | 38 | 2 | 3 | 3 | 怡红院二牌 |
| 2 | 丁辉 | w | 38 | 2 | 4 | 4 | 怡红院老鸨 |
| 2 | 丁辉 | w | 38 | 2 | 5 | 5 | 怡红院龟公 |
| 3 | 卫东 | w | 48 | 2 | 1 | 1 | 怡红院老板 |
| 3 | 卫东 | w | 48 | 2 | 2 | 2 | 怡红院头牌 |
| 3 | 卫东 | w | 48 | 2 | 3 | 3 | 怡红院二牌 |
| 3 | 卫东 | w | 48 | 2 | 4 | 4 | 怡红院老鸨 |
| 3 | 卫东 | w | 48 | 2 | 5 | 5 | 怡红院龟公 |
| 4 | 紫薇 | w | 58 | 3 | 1 | 1 | 怡红院老板 |
| 4 | 紫薇 | w | 58 | 3 | 2 | 2 | 怡红院头牌 |
| 4 | 紫薇 | w | 58 | 3 | 3 | 3 | 怡红院二牌 |
| 4 | 紫薇 | w | 58 | 3 | 4 | 4 | 怡红院老鸨 |
| 4 | 紫薇 | w | 58 | 3 | 5 | 5 | 怡红院龟公 |
| 5 | 尔康 | m | 68 | 5 | 1 | 1 | 怡红院老板 |
| 5 | 尔康 | m | 68 | 5 | 2 | 2 | 怡红院头牌 |
| 5 | 尔康 | m | 68 | 5 | 3 | 3 | 怡红院二牌 |
| 5 | 尔康 | m | 68 | 5 | 4 | 4 | 怡红院老鸨 |
| 5 | 尔康 | m | 68 | 5 | 5 | 5 | 怡红院龟公 |
| 6 | 飞哥 | m | 18 | 1 | 1 | 1 | 怡红院老板 |
| 6 | 飞哥 | m | 18 | 1 | 2 | 2 | 怡红院头牌 |
| 6 | 飞哥 | m | 18 | 1 | 3 | 3 | 怡红院二牌 |
| 6 | 飞哥 | m | 18 | 1 | 4 | 4 | 怡红院老鸨 |
| 6 | 飞哥 | m | 18 | 1 | 5 | 5 | 怡红院龟公 |
+----+------+-----+-----+-----+----+-----+------------+
3.写条件:
mysql> select * from stulist,job where stulist.job=job.jid;
+----+------+-----+-----+-----+----+-----+------------+
| id | name | sex | age | job | id | jid | name |
+----+------+-----+-----+-----+----+-----+------------+
| 1 | 康辉 | m | 28 | 4 | 4 | 4 | 怡红院老鸨 |
| 2 | 丁辉 | w | 38 | 2 | 2 | 2 | 怡红院头牌 |
| 3 | 卫东 | w | 48 | 2 | 2 | 2 | 怡红院头牌 |
| 4 | 紫薇 | w | 58 | 3 | 3 | 3 | 怡红院二牌 |
| 5 | 尔康 | m | 68 | 5 | 5 | 5 | 怡红院龟公 |
| 6 | 飞哥 | m | 18 | 1 | 1 | 1 | 怡红院老板 |
+----+------+-----+-----+-----+----+-----+------------+
4.限定要查询的字段内容
mysql> select stulist.name,job.name from stulist,job where stulist.job=job.jid;
+------+------------+
| name | name |
+------+------------+
| 康辉 | 怡红院老鸨 |
| 丁辉 | 怡红院头牌 |
| 卫东 | 怡红院头牌 |
| 紫薇 | 怡红院二牌 |
| 尔康 | 怡红院龟公 |
| 飞哥 | 怡红院老板 |
+------+------------+
注意:虽然结果我们已经查出来了!但是名字是一样的!所以我们需要起别名
5.将可以起别名的两个字段分别起别名,并进行使用
mysql> select stulist.name as sname,job.name as jname from stulist,job where stulist.job=job.jid;
+-------+------------+
| sname | jname |
+-------+------------+
| 康辉 | 怡红院老鸨 |
| 丁辉 | 怡红院头牌 |
| 卫东 | 怡红院头牌 |
| 紫薇 | 怡红院二牌 |
| 尔康 | 怡红院龟公 |
| 飞哥 | 怡红院老板 |
+-------+------------+
6.将两个表的名字起别名再进行使用
mysql> select s.name as sname,j.name as jname from stulist as s,job as j where s.job=j.jid;
+-------+------------+
| sname | jname |
+-------+------------+
| 康辉 | 怡红院老鸨 |
| 丁辉 | 怡红院头牌 |
| 卫东 | 怡红院头牌 |
| 紫薇 | 怡红院二牌 |
| 尔康 | 怡红院龟公 |
| 飞哥 | 怡红院老板 |
+-------+------------+
7.将所有的as都可以省略点,也代表起别名的含义
mysql> select s.name sname,j.name jname from stulist s,job j where s.job=j.jid;
+-------+------------+
| sname | jname |
+-------+------------+
| 康辉 | 怡红院老鸨 |
| 丁辉 | 怡红院头牌 |
| 卫东 | 怡红院头牌 |
| 紫薇 | 怡红院二牌 |
| 尔康 | 怡红院龟公 |
| 飞哥 | 怡红院老板 |
+-------+------------+
⑩① 字段拼接 concat():【在项目期的类别管理会应用此处知识点】
concat()的使用效果和php当中的.连接非常相似,我们只需要将需要拼接的字段名
写入concat后的括号当中,就可以实现将该字段下的所有内容进行拼接,也因为是
字符串拼接,所以,我们可以放入一些自己定义的符号进行多个字段之间内容的连
接,这就是concat()函数
mysql> select concat(name,'-',sex,'-',age) from stulist;
+------------------------------+
| concat(name,'-',sex,'-',age) |
+------------------------------+
| 康辉-m-28 |
| 丁辉-w-38 |
| 卫东-w-48 |
| 紫薇-w-58 |
| 尔康-m-68 |
| 飞哥-m-18 |
+------------------------------+
$a = "hello";
$b = "world!";
$c = $a.$b; //hello world!
【数据库】MySQL数据库(四)的更多相关文章
- python数据库-MySQL数据库的增删改查基本操作(49)
一.数据库基础 表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式 行:行用于记录数据 记录:行内的数据 列:列用于规定数据格式 字段:数据的某个列 主键:唯一地标识表中的 ...
- 数据库-mysql数据库和表操作
一:数据库查询增加删除 1)mysql数据库查询:show databases MariaDB [mysql]> show databases; +--------------------+ | ...
- sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理
.关系型数据库 有库有表,有关系 非关系型数据库 存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...
- 160624、Spark读取数据库(Mysql)的四种方式讲解
目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍. 一.不指定查询条件 这个方式链接MySql的函数原型是: 1 def jdbc(url: String, table: S ...
- python数据库-MySQL数据库高级查询操作(51)
一.什么是关系? 1.分析:有这么一组数据关于学生的数据 学号.姓名.年龄.住址.成绩.学科.学科(语文.数学.英语) 我们应该怎么去设计储存这些数据呢? 2.先考虑第一范式:列不可在拆分原则 这里面 ...
- C#工具:Ado.Net SqlServer数据库 MySql数据库
数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. SqlServer调用数据库 using System; using System.Coll ...
- JDBC让java程序连上数据库(mysql数据库)
一.小论异常: 其实JDK已经提供了一组API让java程序连上数据库,并执行SQL语句,其实说起来也蛮简单的,但是绝对是一个细致活,因为稍不留神,异常就铺天盖地的来了,下面说说这些异常吧(声明一下: ...
- 希赛网 > 问答 > 数据库 > MySQL数据库 > MySQL的管理与维护 > MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO'root'@'%'I MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO'root'@'%'I
MySql开启远程用户登录 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'huawei' WITH GRANT OPTION; FL ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- JDBC连接MySQL数据库代码模板
下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...
随机推荐
- Netty之缓冲区ByteBuf解读(二)
上篇介绍了 ByteBuf 的简单读写操作以及读写指针的基本介绍,本文继续对 ByteBuf 的基本操作进行解读. 读写指针回滚 这里的 demo 例子还是使用上节使用的. ByteBuf buf = ...
- [日志分析]Graylog2采集Nginx日志 被动方式
graylog可以通过两种方式采集nginx日志,一种是通过Graylog Collector Sidecar进行采集(主动方式),另外是通过修改nginx配置文件的方式进行收集(被动方式). 这次说 ...
- js获取按钮的文字
button按钮有两种情况: 1 <input type="button" id="button" value="button"> ...
- C# 时间戳(TimeStamp)与时间(DateTime)的互相转换
什么是时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 时间戳在线转换网址:https://tool.lu/ ...
- Maven+JSP+Servlet+JDBC+Mysql实现的dbExper宾馆管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/mafulong/databaseExper-hotelMaster 这次分享的也是毕设或课程设计选择一样很多的宾 ...
- zookeeper基础学习-简介
1.zookeeper的使命 zookeeper可以在分布式系统的协作多个任务(一个任务是指一个包含多个进程的任务),这个任务可以是为了协作或者是为了管理竞争. 协作:多个进程需要一同处理某些事情,一 ...
- angular自启动过程
angularJS的源代码整体上来说是一个自执行函数,在angularJS加载完成后,就会自动执行了. 即,在window上暴露一个唯一的全局对象angular, 如果window.angular已经 ...
- 洛谷P1957口算练习题题解
前言: 题目传送门:https://www.luogu.com.cn/problem/P1957 其实这很简单 纯模拟撒~~~~ 正文开始: _话说 ,就当本蒟蒻正高高兴兴的刷水题时,居然 碰到了这个 ...
- 【i春秋综合渗透测试】《我很简单,请不要欺负我》
第2题:获取目标网站管理员的密码 扫到了后台(/admin),本来想用sqlmap跑一下,但是随便试了个弱口令(admin888)就进去了... 第3题: getshell 配置插马:登录后台 ...
- 死磕Lambda表达式(五):Comparator复合
给岁月以文明,而不是给文明以岁月.--<三体> 在上一篇文章(传送门)中介绍了JDK为我们提供的常用函数式接口,JDK不仅提供的这些函数式接口,其中一些接口还为我们提供了实用的默认方法,这 ...