一、对数据的操作(详细版)

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数据库(四)的更多相关文章

  1. python数据库-MySQL数据库的增删改查基本操作(49)

    一.数据库基础 表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式 行:行用于记录数据 记录:行内的数据 列:列用于规定数据格式 字段:数据的某个列 主键:唯一地标识表中的 ...

  2. 数据库-mysql数据库和表操作

    一:数据库查询增加删除 1)mysql数据库查询:show databases MariaDB [mysql]> show databases; +--------------------+ | ...

  3. sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理

    .关系型数据库 有库有表,有关系 非关系型数据库  存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...

  4. 160624、Spark读取数据库(Mysql)的四种方式讲解

    目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍. 一.不指定查询条件 这个方式链接MySql的函数原型是: 1 def jdbc(url: String, table: S ...

  5. python数据库-MySQL数据库高级查询操作(51)

    一.什么是关系? 1.分析:有这么一组数据关于学生的数据 学号.姓名.年龄.住址.成绩.学科.学科(语文.数学.英语) 我们应该怎么去设计储存这些数据呢? 2.先考虑第一范式:列不可在拆分原则 这里面 ...

  6. C#工具:Ado.Net SqlServer数据库 MySql数据库

    数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. SqlServer调用数据库 using System; using System.Coll ...

  7. JDBC让java程序连上数据库(mysql数据库)

    一.小论异常: 其实JDK已经提供了一组API让java程序连上数据库,并执行SQL语句,其实说起来也蛮简单的,但是绝对是一个细致活,因为稍不留神,异常就铺天盖地的来了,下面说说这些异常吧(声明一下: ...

  8. 希赛网 > 问答 > 数据库 > 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 ...

  9. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  10. JDBC连接MySQL数据库代码模板

    下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...

随机推荐

  1. go入门二

    一.流程控制 1.选择结构 if-else: package main import ( "io/ioutil" "fmt" ) func main(){ co ...

  2. 简单认识并使用JavaScript【供后端人员作为了解】

    JS(JavaScript)Web的脚本语言 脚本语言:无法独立执行,必须嵌入到其他语言当中结合使用 作用:控制页面特效展示 注:JavaScript没有访问系统的权限,并且JavaScript和Ja ...

  3. 【Weiss】【第03章】练习3.19:计算后缀表达式

    [练习3.19] 编写一个程序计算后缀表达式的值. Answer: 计算的方法书上说得很明白了,看代码行,没写错误检测[因为懒]. 测试代码: #include <iostream> #i ...

  4. BigDecimal介绍及BigDecimal实现四舍五入

    BigDecimal介绍及BigDecimal实现四舍五入 BigDecimal是什么? 我们知道float最大精度是7-8位有效数字,而double的最大精度是16-17位有效数字,那么大于16位的 ...

  5. Java多线程并发07——锁在Java中的实现

    上一篇文章中,我们已经介绍过了各种锁,让各位对锁有了一定的了解.接下来将为各位介绍锁在Java中的实现.关注我的公众号「Java面典」了解更多 Java 相关知识点. 在 Java 中主要通过使用sy ...

  6. BUAAOO——UNIT2 SUMMARY

    本单元的题目为设计电梯,通过这单元的学习,我初步了解了关于java多线程编程及线程之间并发安全性设计等方面的内容.以下为对这三次作业的分析与总结. 作业分析 序号 楼层 电梯数量 可停靠楼层 调度策略 ...

  7. Java基础 - 数据类型和运算符

    Java 语言支持的类型分为两类:基本数据类型(Primitive Type)和引用类型(Reference Type). 目录 基本数据类型 数值类型 整数类型 byte short int lon ...

  8. Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务

    1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...

  9. 最小生成树的Prim算法以及Kruskal算法的证明

    Prime算法的思路:从任何一个顶点开始,将这个顶点作为最小生成树的子树,通过逐步为该子树添加边直到所有的顶点都在树中为止.其中添加边的策略是每次选择外界到该子树的最短的边添加到树中(前提是无回路). ...

  10. OpenCV-Python 理解SVM | 五十五

    目标 在这一章中 我们将对SVM有一个直观的了解 理论 线性可分数据 考虑下面的图像,它具有两种数据类型,红色和蓝色.在kNN中,对于测试数据,我们用来测量其与所有训练样本的距离,并以最小的距离作为样 ...