zoukankan      html  css  js  c++  java
  • MySQL笔记(二)

    一、SQL语句“数据行”操作补充

     

    1   insert into tb1(name,age) values('peng',20);   增加一条数据
    2 
    3   insert into tb1(name,age) values('peng',20),('sheng',19);  增加多条数据,用逗号隔开
    4 
    5   insert into tb2(name,age) select  name,age from tb1;  将t2表的name,age列全部插入到t1表中

     

    1      delete from tb1;
    2 
    3   delete from db1 where id>5;    where后面是条件语句,在很多地方都适用
    4 
    5   delete from db1 where id!=5 ;       在MySQL中不等号的另外一种写法: id<>5 
    6 
    7   delete from db1 where id<5 or name='jack'; 

    1   update tb2 set name='jack' where id>5 and name='lucy';
    2 
    3   update tb12 set name='robert',age=19 where id>12 and name='xx'

     

    1    select * from tb1;
    2 
    3   select name,age from tb1;
    4 
    5   select where id>2 name='jack';
    6 
    7    select id,name as cname from tb12 where id > 10 or name ='xxx';  # 加个as表示给表头取一个别名,但是里面的内容不会变(name as cname)只是name取了别名
    8 
    9     select name,age,11 from tb12;  # 写一个常量(11)表示加了一列,并且这一列都是11

    关于‘查’的其他:

     1 select * from tb1 where id!=1;
     2 
     3 select * from tb1 where id<>1;
     4 
     5 select * from tb1 where id in (1,5,12);
     6 
     7 select * from tb1 where id not in (1,5,12);
     8 
     9 select * from tb1 where id between 2 and 6;  # 闭区间
    10 
    11 select * from tb12 where id in (select id from tb11)   # in里面还可以去别的表查  会先执行括号里面的语句

    通配符:下划线和百分号

    以a开头 两种写法:
    1、a% 表示%后面可以有任意多的字符 (ab,abc,acbhsjhj)
    2、a_ 表示后面只能有一个位置(ab,ac)
    拓展:%a%表示中间包含a的(只要有a就行)
    
    select * from tb12 where name like "a%" 表示以a开头的
    select * from tb12 where name like "%a" 表示以a结尾的
    select * from tb12 where name like "a_"

    分页:(翻页查看,比如百度查阅)limit

    1 select * from tb3 limit 10;  查看前十条数据
    2 
    3 select * from tb3 limit 0,10;0表示起始位置,10表示查看多少条数据
    4 
    5 select * from tb12 limit 10 offset 20;  offset表示从哪开始,limit后面表示取多少条(这条代码和上面那条功能是一样的)

    排序:order by  desc  asc

     1 select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
     2 select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
     3 select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
     4 
     5 
     6  select * from tb12 order by id desc; 大到小     by后面表示通过id排列
     7  select * from tb12 order by id asc;  小到大 
     8  记忆方法:abcd  a在前面--asc从小到大排, d在后面--desc从大到小排。
     9 
    10  select * from tb12 order by age desc,id desc;  ★优先按age排,age如果重复的话再根据id --》desc排
    11                      
    12  取后10条数据:
    13  select * from tb12 order by id desc limit 10;

    分组:group by

     1 select count(id),max(id),part_id from userinfo5 group by part_id;   【group by表示根据谁分组 max(id)重合的话取最大的id拿过来】
     2 聚合函数:把相同的放一块
     3 count 计数
     4 max
     5 min
     6 sum
     7 avg
     8                     
     9 ***** 如果对于聚合函数结果进行二次筛选时?必须使用having关键字,不能用where *****
    10 elect count(id),part_id from userinfo5 group by part_id having count(id) > 1;  where里面一定不能出现聚合函数
    11                     
    12  select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;

    连表操作:重要

     两个表或多张表放在一起查看
     1 连表操作(重要):  两个表或多张表放在一起查看
     2                 
     3                     select * from userinfo5,department5;  # 把两张表都拿出来,但没有告诉两张表的关系
     4                     写法1:
     5                     select * from userinfo5,department5 where userinfo5.part_id = department5.id;  # 建立关系userinfo5.part_id = department5.id
     6                     
     7                     写法2:(推荐)
     8                     select * from userinfo5 left join department5 on userinfo5.part_id = department5.id; # left join 左连接  两张表关系用on
     9                     # userinfo5左边全部显示 左边是userinfo5
    10                     select * from department5 left join userinfo5 on userinfo5.part_id = department5.id;
    11                     #相当与伪造了一个右连接  左边是department5
    12                     
    13                     
    14                     # select * from userinfo5 right join department5 on userinfo5.part_id = department5.id;
    15                     # department5右边全部显示 右边是department5
    16                 
    17                 
    18                 inner:
    19                     select * from userinfo5 inner join department5 on userinfo5.part_id = department5.id;
    20                     将出现null时的一行隐藏

    对于自增补充:

     1  2         desc t10; 看每个字段什么意思
     3         
     4         show create table t10; 查看这个表是怎么创建的   是横的显示
     5         
     6         show create table t10 G;  竖的显示 看的更好
     7         
     8         alter table t10 AUTO_INCREMENT=20; 修改自增值
     9             
    10 
    11             
    12         MySQL: 自增步长
    13             基于会话级别: (一次登录就是一个会话)
    14                 show session variables like 'auto_inc%';  ---->    查看全局变量
    15                 set session auto_increment_increment=2;   ---->    设置会话步长
    16                 # set session auto_increment_offset=10;
    17             基于全局级别:
    18                 show global variables like 'auto_inc%';        查看全局变量
    19                 set global auto_increment_increment=2;         设置会话步长
    20                 # set global auto_increment_offset=10;
    21                 
    22                 
    23         SqlServer:自增步长:
    24             基础表级别:
    25                 CREATE TABLE `t5` (
    26                   `nid` int(11) NOT NULL AUTO_INCREMENT,
    27                   `pid` int(11) NOT NULL,
    28                   `num` int(11) DEFAULT NULL,
    29                   PRIMARY KEY (`nid`,`pid`)
    30                 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
    31                 
    32                 CREATE TABLE `t6` (
    33                   `nid` int(11) NOT NULL AUTO_INCREMENT,
    34                   `pid` int(11) NOT NULL,
    35                   `num` int(11) DEFAULT NULL,
    36                   PRIMARY KEY (`nid`,`pid`)
    37                 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8
     1 desc t10; 看每个字段什么意思
     2 
     3 show create table t10; 查看这个表是怎么创建的 是横的显示
     4 
     5 show create table t10 G; 竖的显示 看的更好
     6 
     7 alter table t10 AUTO_INCREMENT=20; 修改自增值
     8 
     9 MySQL: 自增步长
    10 基于会话级别: (一次登录就是一个会话)
    11 show session variables like 'auto_inc%'; ---->    查看全局变量
    12 set session auto_increment_increment=2; ---->    设置会话步长
    13 # set session auto_increment_offset=10;
    14 基于全局级别:
    15 show global variables like 'auto_inc%';    查看全局变量
    16 set global auto_increment_increment=2; 设置会话步长
    17 # set global auto_increment_offset=10;
    18 
    19 
    20 SqlServer:自增步长:
    21 基础表级别:
    22 CREATE TABLE `t5` (
    23 `nid` int(11) NOT NULL AUTO_INCREMENT,
    24 `pid` int(11) NOT NULL,
    25 `num` int(11) DEFAULT NULL,
    26 PRIMARY KEY (`nid`,`pid`)
    27 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
    28 
    29 CREATE TABLE `t6` (
    30 `nid` int(11) NOT NULL AUTO_INCREMENT,
    31 `pid` int(11) NOT NULL,
    32 `num` int(11) DEFAULT NULL,
    33 PRIMARY KEY (`nid`,`pid`)
    34 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8

    单列唯一索引和联合唯一索引

    唯一索引:1、约束 2、加速查找 (索引就是为了加速查找)
    唯一索引:单列唯一索引和联合唯一索引

    create table t1(
    id int ....,
    num int,
    xx int,
    unique 唯一索引名称 (列名,列名), # 限制这个列名是唯一的 (联合唯一:这两个值不能完全一样) 只写一个列名是单列的唯一
    constraint ....
    )

    唯一:
    约束不能重复(可以为空)
    PS: 主键不能重复(不能为空)
    加速查找

  • 相关阅读:
    记账本开发记录——第十三天(2020.1.31)
    《构建之法——现代软件工程》读书笔记(二)
    记账本开发记录——第十二天(2020.1.30)
    记账本开发记录——第十一天(2020.1.29)
    记账本开发记录——第十天(2020.1.28)
    记账本开发记录——第九天(2020.1.27)
    记账本开发记录——第八天(2020.1.26)
    记账本开发记录——第七天(2020.1.24)
    记账本开发记录——第六天(2020.1.23)
    记账本开发记录——第五天(2020.1.22)
  • 原文地址:https://www.cnblogs.com/hsp1269/p/12602815.html
Copyright © 2011-2022 走看看