MySQL增删改查

在表格的增删改查中,查的内容是最多的,包括group by ,join,limit,union,alter,排序都是服务于查的

  1. #sql语句数据行操作补充
  2.  
  3. #增加:
  4. #insert into table_name(字段1,字段2) values('属性1','属性2'),('属性1','属性2') 插入多行数据
  5. #insert into t1(字段1,字段2) select 字段1,字段2 from t2; (某张表的某几列数据选择出来,插入)
  6.  
  7. #删除:delete from table_name [where id =/!=/>/< /<> 2] and/or name='啥啥啥'
  8. #truncate table t1;
  9.  
  10. #改: update t1 set name='gkx' ,age=19 where id>12 and name='x' #可以同时改多个字段
  11. '''
  12. #查:内容较多:
  13. # 查所有,查部分字段,后面跟 where条件,查完后排序
  14. #select id,name from t1 where id>10 and name = 'aaa'
  15. #select id as setid ,name as setname from t1 where id>10 and name = 'aaa' # as 别名
  16. #as 别名
  17. #select name as cname ,age,1 from t1;
  18. #这里的 1表示 增加一列,列名为1,该列所有行属性也都为1
  19. #select * from t1 where id in (1,2,5); #如果id在 1,2,5就选择出来
  20. #select * from t1 where id not in (1,2,5); #id除了1,2,5其他都选择出来
  21. #select * from t1 where id in (select id from t2 where id>2) ;# 根据选择来选择
  22. #select * from t1 where id between 5 and 12;
  23. #闭区间 5和12也能取到
  24. #select * from dmsxb where b_dm in (select b_dm from dmsxb group by b_dm having count(*)>1)
  25.  
  26. ##还可以选择查询语句,不过这个语句结果需要为一个常量 select age,name,(select count(1) from tb) from tb1;
  27. #习题17和21
  28.  
  29. #条件 ## case when 条件 then 【字段或者默认值】 else 字段 END
  30. #select course_id,max(num),min(num),cname,
  31. # case when min(num) < 10 THEN 0 else min(num) end from score left join course on score.course_id = course.cid group by course_id;
  32. #if 三元运算
  33. # select course_id,cname,tname,avg(if(isnull(score.num),0,score.num)) from score
  34.  
  35. #通配符:
  36. #下划线 : 表示后边只能匹配一位,select * from tb12 where name like "a_"
  37. #百分号 : select * from tb12 where name like "a%"
  38. '''
  39.  
  40. #limit:比如百度搜索,一次只显示一页,放置C/S端压力
  41. #select *from t1 limit 10; #显示前十条 相当于select *from t1 limit 0,10;
  42. #select * from t1 limit 4,5; #从第4行开始的5行 (不包含第4行)
  43. #select * from t1 limit 5 offset 4 #从第4行开始的五行
  44. #实现分页:
  45. #page = int(input('page')) select * from limit (page-1)*10 , 10; 前者为起始位置
  46. #select * from t1 order by id desc limit 10; (后10行:先降序排列,再选前十行)
  47. '''
  48. limit 数值越大越慢,比如 limit 300000,10 它会先扫描30万行,然后再取下10行
  49. '''
  50.  
  51. #排序:
  52. #select * from t1; #默认是从小到大排 即 asc ----> ascending
  53. #select * from t1 order by 列名 desc; 即 desc ----> descending
  54. #select * from t1 order by 列1 desc,列2 asc ; #根据列1从大到小排列,如果相同按列2从小到大排列

增删改查,limit,order by

  1. # Mysql增加主键或者更改表的列为主键的sql语句
  2.  
  3. # 添加表字段
  4. # alter table table1 add transactor varchar(10) not Null;
  5. # alter table table1 add id int unsigned not Null auto_increment primary key
  6.  
  7. # 修改某个表的字段类型及指定为空或非空
  8. # alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];
  9. # alter table 表名称 modify 字段名称 字段类型 [是否允许非空];
  10.  
  11. # 修改某个表的字段名称及指定为空或非空
  12. # alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空
  13.  
  14. # 删除某一字段
  15. # ALTER TABLE mytable DROP 字段 名;
  16. #
  17. # 添加唯一键
  18. # ALTER TABLE `test2` ADD UNIQUE ( `userid`)
  19.  
  20. # 修改主键
  21. # ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )
  22. #
  23. # 增加索引
  24. # ALTER TABLE `test2` ADD INDEX ( `id` )
  25.  
  26. #修改字段类型,并设置主键
  27. # ALTER TABLE `category ` MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`id`);
  28.  
  29. #建表后创建唯一索引:
  30. # create unique index UK_student_name on student (name);
  31. # 建表后添加约束
  32. # alter table student add constraint uk_student_name unique (name);
  33.  
  34. #修改表的列属性
  35. # alter table 表名 change 原列名 新列名 类型;  --修改表的列属性名
  36. # alter table 表名 modify 列名 类型 ;   --修改表的类类型
  37. # alter table 表名 drop 列名;   --删除表的某一列
  38. # alter table 表名 add  列名 类型; --添加某一列
  39. # alter table 表名 rename 新表名;  --修改表名
  40. '''
  41.  
  42. #1. select now(); 打印当前时间
  43.  
  44. #2. desc table_name; 查看字段的属性
  45. #3. show create table table_name ; 查看表的创建代码
  46. #3. show create table table_name \G ; 竖着看,查看表的创建代码

ALTER命令

分组的实现,注意事项,总结

  1. #分组 group by:
  2. #通过group by 按照所选列分组显示,按所选列分组,所选列如果 不重复 的项有4个,就分成4组
  3. # select part_id from t1 group by part_id;
  4. #错误:select part_id,name from t1 group by part_id; #这是不行的,因为它按part_id分组,聚合在一起,此时不知道 相同part_id但是不同name的,该如何取舍哪个name所以会报错
  5. #可以这么写:
  6. # select part_id,max(id) from t1 group by part_id;
  7. #当part_id 分组完后,留下id列中,相同part_id里,id最大的那行
  8. # select part_id,min(id) from t1 group by part_id;
  9.  
  10. #结合count等聚合函数使用: 可以用as改名哦!!!
  11. #select count(id),part_id from t1 group by part_id; 用part_di分组,新增一列count(id),计算每组id数
  12. #类似还有 count,max,min,sum,avg(比如avg(分数),取每个分组中,分数这个列的平均值i)
  13. # select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
  14.  
  15. #如果对于聚合函数结果进行二次筛选时,必须使用having!
  16. #select num from 表 group by num having max(id) > 10
  17. #选择出最大id大于10的,按num分组的,所有分组
  18. #加条件: select part_id from user where id !=1 group by part_id having count(*)>1;
  19.  
  20. #··特别的:group by 必须在where之后,order by之前
  21. #select num,nid from 表 where nid > 10 group by num,nid order nid desc
  22.  
  23. #group 多列, 用两列做分组,
  24. #select num,nid from 表 where nid > 10 group by num,nid order nid desc
  25. #选出nid大于10的,num,nid两列分组后的 num,nid。并用nid排序
  26. #比如:姓名和部门,用姓名和部门进行分组,选出年龄大于30的,同姓名同部门的所有用户
  27.  
  28. #总结:
  29. #group by 是用来分组的,把某一列都聚合到同一组,所以select出的字段要不就是这一列,要不要使用函数,要不和分组字段是唯一对应关系的
  30. #聚合函数有:(不能用where)
  31. #count(列名) max(列名) min(列名) sum(列名) avg(列名)
  32. #可以用as改名哦,select count(id) as count_id,part_id from user group by part_id having count(*)>1;
  33. #对于聚合函数的条件筛选不能用where,要用 having
  34. #group by可以多列进行联合分组
  35. #group by要写在where 后面,order by 前面
  36.  
  37. # -- 7、查询学过“1”课程并且也学过编号“2”课程的同学的学号、姓名;
  38. # -- score和student连表,找出所有选过1,2课程的学号,并且按学号分组
  39. # select student.sid,student.sname from score left join student on score.student_id = student.sid where course_id in (1,2) group by student_id;
  40. #注意在这个例子中 学号和姓名是唯一对应的,所以可以直接选姓名,而不用聚合函数

分组—group by

连表操作

  1. '''
  2. 连表最好是外键中的子表父表连
  3. 连表是支持 不同数据类型之间连接的,但是这样子操作没意义
  4. '''
  5. #连表:
  6. #两张表没关系,则不显示:
  7. # select A.num, A.name, B.name from A,B Where A.nid = B.nid #建议不要用这种,不直观
  8. # select A.num, A.name, B.name from A inner join B on A.nid = B.nid
  9.  
  10. #其实只要记一个left join就好,把表换位置就好啦
  11. # left join(左联接) A表所有显示,如果B中无对应关系,则值为null
  12. #语法:select * from A left join B on A.aID = B.bID
  13. #展示左边表所有的值,依据条件连接右边表, 右边表有,左边表没有的值,将在结果中右边置为空
  14.  
  15. # right join(右联接) B表所有显示,如果B中无对应关系,则值为null
  16. #语法:select * from A right join B on A.aID = B.bID
  17. #展示右边表所有的,依据条件连接左边表, 左边表有,右边表没有的值,将在结果中左边置为空
  18.  
  19. # inner join(等值连接) 只返回两个表中联结字段相等的行
  20. #语法:select * from A inner join B on A.aID = B.bID
  21. #只展示两边表有的值,没有的值不设置null,直接不显示
  22. #···无对应关系则不显示!!!!
  23. #三者区别 : https://www.cnblogs.com/pcjim/articles/799302.html
  24.  
  25. #连多张表: 图在:20181007 mysql连表
  26. #select * from 表A left join 表B on A.ID = B.ID
  27. # left join 表C on A.ID = C.ID
  28. # left join 表D on A.ID = D.ID
  29. # select 的时候,字段可以 表示为 表名.字段名
  30. # 当表连接后,接下俩的join 就可以随意使用
  31.  
  32. #举例:
  33. # -- 20、课程平均分从高到低显示(显示任课老师);
  34. # select course_id,cname,tname,avg(num) from score
  35. # left join course on score.course_id = course.cid
  36. # left join teacher on course.teacher_id = teacher.tid
  37. # group by course_id order by avg(num) desc;

连表操作

  1. #组合
  2. # 组合,自动处理重合
  3. # select nickname from A union select name from B
  4. #
  5. # 组合,不处理重合
  6. # select nickname from A union all select name from B

组合

临时表,distinct去重以及和group by的区别

  1. #临时表
  2. # (select * from t1 where id > 2) as 临时表名
  3. #用法:
  4. # select sid from (select * from score where num>60) as b;

临时表

  1. # https://blog.csdn.net/ljl890705/article/details/70602442
  2. #distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。
  3. # ·····单纯的去重操作使用distinct,速度是快于group by的。
  4. #
  5. # distinct (说是效率不高)
  6. # distinct支持单列、多列的去重方式。
  7. # 单列去重的方式简明易懂,即相同值只保留1个。
  8. # 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。
  9.  
  10. #单列去重:
  11. #select distinct(mobile) from talk_test;
  12.  
  13. # 多列去重:
  14. # mysql> select distinct name,mobile from talk_test;
  15.  
  16. #结合count使用:
  17. # select count(distinct col) from A;
  18. # select count(1) from (select 1 from A group by col) alias;
  19.  
  20. # 两个极端:
  21. # 1.数据列的所有数据都一样,即去重计数的结果为1时,用distinct最佳
  22. # 2.如果数据列唯一,没有相同数值,用group 最好

distinct去重

MySQL—增删改查,分组,连表,limit,union,alter,排序,去重的更多相关文章

  1. mysql增删改查、连表查询、常用操作

    一.建表 1.最简单的建表CREATE TABLE user(id int,name char(20),age int); 2.带主键带注释和默认值创建表CREATE TABLE  user(id I ...

  2. MySQL 增删改查(单表)

    1.sql 新增语句 表中插入数据 insert into + 表名 values(字段1value1,字段2value1,字段3value1),(字段1value2,字段2value2,字段3val ...

  3. MySQL增删改查的常用语句汇总

    MySQL增删改查的常用语句汇总 以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop da ...

  4. mysql增删改查练习

    Mysql增删改查sql语句练习 关于数据库的一些操作: 进入mysql 命令行: mysql -uroot –p 查看所有数据库: show databases; 创建数据库: create dat ...

  5. mysql增删改查相关操作

    mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...

  6. MySQL增删改查常用语句命令

    增删改查语句增删改查的语句命令为 增:insert删:delete改:update查:SELECT或者show 库操作创建数据库:create database shujukuba;创建带字符集的数据 ...

  7. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  8. mysql由浅入深探究(三)----mysql增删改查

    通过前两节的学习,目前我们已经完成了数据库的安装,用户的创建及权限操作等相关操作,但是我们似乎我们只是隐隐约约接触到了数据库的一些基本操作,对数据库表还是比较陌生.那么现在我们呢开始了解一些数据库的一 ...

  9. PHP MySql增删改查

    mysql_connect()连接数据库 mysql_select_db选择数据库 mysql_fetch_assoc()获取结果集 mysql_query()执行sql语句 实例如下: <?p ...

随机推荐

  1. Linux coredump解决流程

    一.打开core文件限制 a.sudo vi /etc/profile b.文件末尾添加ulimit -c unlimited source /etc/profile 把文件重新加载到内存 c.roo ...

  2. Oracle中connect by用法示例

    在工作中常常会遇到一些数据表包含父子关系的数据,比如行业.地区等等,如果需要将其节点按父子关系一步一步列出来,就需要使用connect by了. 如有由自身行业代码basecode和父行业代码pare ...

  3. HBuilder --- MUI , HTML5

    一.创建简单app应用 ① ② ③连接手机 ④ 二.MUI  各组件的运用 http://dev.dcloud.net.cn/mui/snippet/ 三. HTML5plus 参考文档:  http ...

  4. 解决Win10 PowerShell无法激活Anaconda环境的问题

    最近在使用Anaconda的过程中,发现在Win10的PowerShell在使用conda activate 环境名激活环境时无效,而CMD则可以.这里前提必须将Anaconda 写入环境变量.否则在 ...

  5. SharePoint2007使用WebPart加载UserControl

    之前一直做SharePoint2010开发,最近转向了2007开发,感觉两者开发时有很多地方不一样,我现在接触到2007开发项目里面使用Module去加载Application Page,而在Appl ...

  6. python笔记—循环控制

    1.print可以打印多个参数,在括号内用,号区分,显示时一个,号显示一个空格 2.import导入时可以用as别名代替,方便两个模块中有相同函数时使用 3.序列解包:将一个序列(或任何可迭代对象)解 ...

  7. 数据结构与算法(C#)入门 --- 序

    注:本系列文章适合新手入门.博主也是摸着石头过河,难免有错误之处.还请谅解~ ~~~ 数据结构是什么? 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合 ...

  8. RsaUtils

    参考来源:https://www.cnblogs.com/pcheng/p/9629621.html 里面的这段话,非常好 RSA加密对明文的长度有所限制,规定需加密的明文最大长度=密钥长度-11(单 ...

  9. Kotlin 数据类与密封类

    数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据 ...

  10. element-UI——el-table添加序号

    转载自:https://www.cnblogs.com/langxiyu/p/10641060.html Part.1 示例 当我们想在 el-table 中添加序号列时,如下: <el-tab ...