【数据库】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 ...
随机推荐
- C语言程序设计(三) 简单的算术运算和表达式
第三章 简单的算术运算和表达式 算数运算符:一元.二元.三元(条件运算符) 1/2是整型除法,1.0/2是浮点数除法 求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算 ...
- springboot项目中thymeleaf布局应用
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- [红日安全]Web安全Day12 – 会话安全实战攻防
本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...
- 使用Python批量获取学生期末考试成绩
以下是我们学校对于期末考试成绩临时查询的一个网站 我突发奇想,可不可以通过爬虫的方式批量获取成绩信息 于是说干就干 首先观察网页的请求 通过查看,我们可以很明显看到网站查询是通过对https://wx ...
- 【JAVA进阶架构师指南】之一:如何进行架构设计
前言 本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优 ...
- java-3个例子(新手)
//创建的一个包名. package ri0318; //创建的一个类. public class Li3 { //公共静态的主方法. public static void main(String[] ...
- scrapy框架Request函数callback参数为什么是self.parse而不是self.parse( )
加括号是调用函数,不加括号是指的是函数地址,此处只需要传入函数的地址,等待程序到时调用即可
- hdu1181 dfs 字符串首尾可拼接,问是否可寻找到一条字串路径使得首尾分别是‘b’和‘m’,简单的搜索+回溯
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- 为arm-unknown-linux-gnueabi-gcc工具链添加常用库(zlib、libpng、libjpeg、libtiff、libtool)(转载)
主机环境: RHEL6.0 kernel 2.6.32-220.2.1.el6.i686 gcc-4.4.6 1.zlib http://sourceforge.net/projects/libp ...
- 算法训练 瓷砖铺放 【递归】java
算法训练 瓷砖铺放 时间限制:1.0s 内存限制:512.0MB 锦囊1 锦囊2 锦囊3 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为 ...