zoukankan      html  css  js  c++  java
  • 第三节课 mySQL之增删改查

    MYSQL之增删改

    一、增---insert

    1.全量插入,插入的时候必须写入所有的列名并保持顺序

     语法 insert into 表名 values(字段值1,字段值2,。。。。字段值n) 

    举例:新建查询表,insert into tb_userinfo这个表

    INSERT into tb_userinfo values(2,'13088884444','1234',0,'China');

     2.如果要插入的时可以为空的列,可以使用null插入空值。

    在tb_userinfo表查看设计表,sex,address是可以为空值,插入null

    insert into tb_userinfo values(3,'13088881111','125',null,null);

     3.insert指定列名 ------必须要保持顺序,按照需要插入的列名额顺序插入

    指定要插入的列,可以不按照表的顺序,例如:

    insert into tb_userinfo(`mobilephone`,`password`,`id`) values('13088886699','127',5);

    只要指定列跟后面的插入数值保持一致顺序就ok.

    缺点:插入的列多了,容易混淆。

    insert into tb_userinfo(`id`,`mobilephone`,`password`) values(4,'13088886666','126');

     4.批量插入

    insert into tb_userinfo values
    (5,'13088884441','1234',0,'China'),
    (6,'13088884442','1234',0,'China'),
    (7,'13088884443','1234',0,'China');

     注:如果批量插入时,id时自增长的,可以直接传null

    在设计表中将id设置为【自动增长】---->【保存】,然后批量插入时,id传null

    insert into tb_userinfo values
    (null,'13088884445','1234',0,'China'),
    (null,'13088884446','1234',0,'China'),
    (null,'13088884447','1234',0,'China');

     总结:一般使用不指定列的方式插入。

    二、修改--update

    语法:update 表名 set 字段1=新值1,字段2=新值2... where  条件

    1.没有where条件的-----危险,用之慎重:会把全表的数据进行修改

    update tb_userinfo set `password` = '000';

    2.增加where过滤条件

    一般update后面的过滤条件按where跟主键,主键的唯一性(不是必须跟主键)

    update tb_userinfo set `password` = '999',sex = '1' where id=2;

    下面举例不是跟主键约束

    update tb_userinfo set `password` = '999',sex = '1' where mobilephone='13088884443';

    3.update加过滤条件and-----and,且,所有的过滤条件同时成立

    update tb_userinfo set address='korea' where `password` = '999'and sex = '1';

    4.update加过滤条件or---只要符合一个就可以修改成功

    update tb_userinfo set address='USA' where `password` = '000' or sex = '1' or address = 'China';

    三、删除---drop、delete

     (一)删库跑路之drop------一般不会用到

    删除数据库,删除表

    drop database kk;
    drop database practise1;
    drop table tb_user;

    (二)、删除delete

     1.不加约束条件where

      删除一行数据,跟update类似,不加约束条件where,会删除全部数据,----危险,慎用!!

      delete from tb_userinfo;

    2.加约束条件where

      delete from tb_userinfo where id = 1;

    四、查

    (一)、单表查询

    1、通配符 *,查询所有的字段

    2、过滤条件where

        and /or /and + or

    3、表取别名 :表名 as 别名       ------------as可以省略

    4、不等于的两种方式 !=   、<>

    ##单表查询知识点
    --通配符*,可以直接查询这个表
    select * from member;
    select id,`name` from member;
    
    --过滤条件
    select * from member where `address` = '北京';
    
    --多个条件 and 并且
    select * from member where `address` = '北京' and `sex` = 1; 
    
    --多表可以取别名,单个表就没表取别名了,as可以省略
    select * from member as a where a.address= '澳门';
    select * from member a where a.address= '澳门';
    
    --多个条件 or 或者
    select * from member where `address`='北京' or `name`='王五';
    
    --多个条件 and 和 or 同时存在
    select * from member where `address`='北京' and `name`='王五' or `sex` = 0;
    
    --不等于 != <>两种方式
    select * from member where `sex` != 1;
    select * from member where `address` <> '北京';

    (二)、多表查询

    1. 2张表的查询

    ##多表查询
    select * from member a,info b where a.id = b.memberID;

    如果不加where过滤条件,就是member表的4条信息,info表的7条信息的笛卡儿积。一共28条。

    加上where过滤条件就是在这28条数据种进行过滤。

    增加where过滤条件,在上面的结果种筛选出address是北京的所有信息。

    select * from member a,info b where a.id = b.memberID and `address`='北京';

    2.多张表的多对多的关系

     上面查询老师对应教的班级:

    select * from S,SC,C where S.S# =SC.S#  and SC.C# = C.C#

    3.连接查询

    (1)内连接----INNER JOIN

    这个:select * from member a,info b where a.id = b.memberID;----->是隐性内连接

    改成INNER JOIN:两个表之间加上INNER JOIN ,where 改为on

    --内连接INNER JOIN
    select * from member a INNER JOIN info b on a.id = b.memberID and `address`='北京'; 

    (2) 左外连接-----LEFT JOIN

    左外连接以左表为主表,主表的所有数据都会显示,右表为从表,从表只有匹配的数据才会显示

    语法:select 字段1,字段2  from 表1 LEFT JOIN 表2 on 条件

    ①在所有字段的基础上查询(*)

    --左外连接
    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';

    结果显示:主表的数据全部显示出来

    ②部分指定字段的基础上查询

    select a.id,a.name,a.address,b.memberID,b.id from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京'; 

    结果显示:

     (3) 右外连接-----RIGHT JOIN

    与左连接相反,右外连接以坐表为主表,主表的所有数据都会显示,左表为从表,从表只有匹配的数据才会显示

    --右外连接
    select a.id,a.name,a.address,b.memberID,b.id from member a RIGHT JOIN info b on a.id =b.memberID and `address` = '北京'; 

    结果:右表数据全部显示

     总结:左外连接、右外连接

    实际使用,一般会用左外连接就可以了,使用右外连接时,调换左右表的位置即可。

    五、查询结果排序----- order by 字段 asc/desc

    单表、多表都可以进行排序

    1.升序asc,默认的排序就是升序,asc可以不写

    --排序 默认时asc,可以不写,desc表示降序
    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc;

     2.降序 desc

    可以加几个排序要求

    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc,b.id desc;

    按照前后顺序:a.id升序排序完成,有相同序号的,会依据b.id降序(a.id排序的优先级在前面)

  • 相关阅读:
    超详细mysql left join,right join,inner join用法分析
    sql FOR XML PATH
    sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
    菜鸟疑问之新建网站与新建web应用程序区别
    asp.net常用函数表
    屌丝逆袭--Asp.net快速入门学习教程 第1晚
    MongoDB学习记录(一)
    Git的SSH-key生成、导入及使用
    atom编辑器使用“apm install”无法响应的解决方案
    Knockout.js组件系统的详解之(一)
  • 原文地址:https://www.cnblogs.com/ananmy/p/12918391.html
Copyright © 2011-2022 走看看