MySQL相关知识整理二

四大语句:增删改查

    CURD:create update retrieve delete

    插入:新增

    insert [into] 表名[(字段名,字段名...)] values(值1,值2);

        如果省略字段列表,那么必须为所有字段一次赋值;字段值的数量和数据类型以及顺序必须与字段完全相同;

        必须为设置为非空且没有默认值的字段赋值。

        insert user(name,sex,create_time)values('张三',1,1522312350);

        insert user values(null,'李四',22,2,1524564520);

    修改:

    update 表名 set 字段名=值[,字段名=值] [where条件];//如果省略where条件,将更新全部记录

        update user set age=23,name='张小三' where id=1;

    删除:

    delete from 表名 [where条件];//如果省略where条件,将删除全部数据记录

    查询:

    select 字段名 [ [as] 别名],字段名.... from 表名[where条件];

    1.查询所有字段的话,可以用*表示

    [where条件]:

        [where 条件] [group by 字段 [having 条件]] [order by 字段[ASC升序|DESC降序]][limit [start,] row_counts]

        where 条件:一般出现在修改,删除,查询where条件中,一般是以字段进行条件判断。

        group by:根据字段进行分组。

        having 条件:在分组基础上进行的条件判断,保证字段名称出现在分组中或出现聚合函数中。

        order by:指定字段进行排序

        limit:限制返回的记录条数,start指定从下标为(start)的数据记录开始返回(记录从0开始编号),row_counts指定返回多少条记录。

条件:

    1.运算符:算术运算符:+-*/%

           字符运算符:[not] like '_%';(_通配一个字符,%通配0个或多个字符)

                 lower,upper,concat

            比较运算符:>、<、>=、<=、=、 [not] between and 、 [not] in(..,..,..)

            逻辑运算符:and or not

  2.聚合函数

        count()计数           sum()求和      avg()求平均值

            max()最大值       min()最小值

    例子:

        select * from user order by id DESC;

        select age ,count(*) from user group byage;

        select age ,count(*) from user group byage having age>25;

        select age ,count(*) from user group byage having count(*)>2;

        select * from user limit 2;

        select * from user limit 2,2;

       

        select * from user where name like '张__';

        select * from user where name like '张_';

        select * from user where name like '张%';

        select * from user where id>1 andid<4;

        select * from user where id between 2and 3;

        select * from user where id in(2,3);

 

 

MYSQL:多表查询

1.内连接

    select * from 表1 as 别名,表2,表3 where 意义相同的字段相等;

    select * from 表1 inner join 表2 on 意义相同的字段相等 inner join 表3 on 意义相同的字段相等;

    SELECT g.`gid`,g.`name` ASgrade_name,b.`bid`,b.`name` banji_name FROM grade AS g,banji b WHEREg.`gid`=b.`gid`;

2.外连接

    a.左外连接

    select * from 表1 left join 表2 on 意义相同的字段相等;

    b.右外连接

    select * from 表1 right join 表2 on 意义相同的字段相等;

   

    ps:1左外连接:以左表为主,右表为副;左表的所有数据记录全部显示,右表只显示相对应的数据记录;如果右表中没有对应的数据记录,将显示null

       2左外连接:以右表为主,左表为副;右表的所有数据记录全部显示,左表只显示相对应的数据记录;如果左表中没有对应的数据记录,将显示null

      

       SELECT g.`gid`,g.`name` ASgrade_name,b.`bid`,b.`name` banji_name FROM grade g LEFT JOIN banji b ONg.gid=b.gid;

SELECT g.`gid`,g.`name` ASgrade_name,b.`bid`,b.`name` banji_name FROM grade g RIGHT JOIN banji b ONg.gid=b.gid;

 

3.子查询(嵌套查询):在一个sql语句中包含了另外一个查询语句

    a.子查询出现在查询语句中的条件中

       select * from 表1 where 字段=(select 字段 from 表2 where 条件);

        SELECT g.`gid`,g.`name` ASgrade_name  FROM grade g WHERE g.gidIN(SELECT b.gid FROM banji b);

    b.子查询出现在删除语句的条件中

    c.子查询出现在修改语句的条件中

    d.子查询出现在查询语句的字段位置,从当字段

        SELECT (SELECT b.name AS banji_nameFROM banji b WHERE b.bid=2),g.gid FROM grade g;

4.联合查询:多张表的表结构必须一致

    select * from 表1 union select * from 表2;//去掉重复记录

    select * from 表1 union all select * from 表2;//不会去掉重复记录

   

练习:1.查询输出所有学生信息:学号,姓名,班级号,班级名称,年级号,年级名称

       SELECT * FROM student,mark WHEREmark.studentid=student.studentid;

    2.查询输出所有学生的成绩:学号,姓名,班级名称,各科成绩

        SELECTstudent.`name`,student.studentid,banji.banjiname,mark.`chinese`,math,english,lizong,mark.`type`FROM student,mark,banji WHERE student.`studentid`=mark.`studentid` ANDbanji.`banjiid`=student.`banjiid`;

    3.

   

    SELECT s.`xuehao`,s.`name` AS s_name,b.`name` AS b_name, n.`name` AS n_nameFROM students s,banji b, nianji n WHERE s.bid=b.id AND b.nid=n.nid;

SELECT* FROM chengji c,students s WHERE s.`bid`=2 AND c.`type`=2 ANDc.`xuehao`=s.`xuehao`;

 

CREATEVIEW students_banji_nianji AS SELECT s.`xuehao`,s.`name` AS s_name,b.`name` AS b_name, n.`name` AS n_nameFROM students s,banji b, nianji n WHERE s.bid=b.id AND b.nid=n.nid;

SELECT* FROM students_banji_nianji;

 

SELECTb.name,COUNT(*) FROM banji b ,students s WHERE b.id=s.bid GROUP BY b.id;

SELECT*,(yuwen+shuxue+yingyu+tiyu) AS score FROM chengji c,students s WHERE s.`bid`=2AND c.`type`=2 AND c.`xuehao`=s.`xuehao` ORDER BY score DESC,yuwen DESC,shuxueDESC;

SELECTb.name,AVG(c.`yuwen`) AS yuwen_avg FROM chengji c,students s,banji b WHERE b.idIN(2,6) AND s.`bid` = b.id AND c.`xuehao`=s.`xuehao` GROUP BY b.id;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值