• 【数据库】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!

  • 相关阅读:
    清北学堂2019.7.18 & 清北学堂2019.7.19
    清北学堂2019.7.17
    清北学堂2019.7.16
    清北学堂2019.7.15
    清北学堂2019.7.14
    清北学堂2019.7.13
    【洛谷P1383 高级打字机】
    考试整理
    考试整理
    【洛谷P5018 对称二叉树】
  • 原文地址:https://www.cnblogs.com/peilanluo/p/6818920.html
Copyright © 2020-2023  润新知