美文网首页
sql语句基础总结

sql语句基础总结

作者: mutang | 来源:发表于2020-06-30 13:45 被阅读0次

    数据库的操作

    1. 链接数据库

      mysql -uroot -p
      mysql -uroot -proot
      
    2. 退出数据库

      exit/quit/ctrl+c(windows)
      exit/quit/ctrl+c(mac)
      
    3. sql语句最后需要分号: ,不区分大小写

    4. 显示数据库版本

      select version();
      
    5. 查看所有数据库

      show databases;
      
    6. 显示时间

      select now();
      
    7. 创建数据库

      create database `python-04`;
      create database pythonNew charset=utf8;
      -- 注意:
          -- 诸如此类写法:'python-04'必须用tab键上面的符号括起来,用以表示整体,否则,会报错
          -- 创建数据库时,指定编码集utf-8的写法,只能写utf8
      
    8. 查看创建数据库的语句

      show create database pythonNew;
      
    9. 使用数据库

      use pythonnew;
      
    10. 查看当前数据库

      select database();
      
    11. 删除数据库:

      drop database python04;
      

    数据表的操作

    1. 查看所有的数据表

      show tables;
      
    2. 创建表

      create table xxx(id int, name varchar(30));
      create table yyy(id int primark key auto_increment not null, name varchar(30));
      -- 约束条件的顺序不限
      
    3. 查看数据表的名字

      desc xxx;
      
    4. 查看创建数据表的名字

      show create table 表名字;
      
    5. 修改表——添加字段

      alter table 表名 add 列名 类型;
      
    6. 修改表——不重命名版

      alter table 表名 modify 列名 类型及约束;
      
    7. 修改表——重命名版

      alter table 表名 change 原名 新名 类型及约束;
      
    8. 修改表——删除字段

      alter table 表名 drop 列名;
      
    9. 删除数据表

      drop table 表名;
      

    增删查改(crud)

    1. 增加:

      1. 全列插入

        insert [into] 表名 values(...)
        

        ==注意==

        • 主键自增长字段(列) 可以用0 null default来占位

        • | gender | enum('男','女','中性','保密') | YES | | 保密 | |

          ​ -- 枚举中 的 下标从1 开始 1---“男” 2--->"女"....

      2. 部分插入

        insert into 表名(列名1……) values (值1……)
        
      3. 多行插入

        insert into 表名(列名1,列名2) values(值1,值2),(值1,值2),……  -- 多行插入的部分插入
        insert into 表名(列名1……) values(值1……),(……),……             -- 多行插入的全部插入
        
    2. 修改:

      update 表名 set 列1 = 值1,列2 = 值2,…… where 条件;
      
    3. 查询基本使用

      1. 查询所有列

        select * from 表名;
        
      2. 定条件查询

      3. 查询指定列

        select 列1,列2 from 表名;
        
      4. 起别名(为列 、表):as

        ==注意==:别名起了,访问时必须用别名访问,否则,报错

    4. 删除:

      1. 物理删除(是真的没有了)

        delete from 表名 where 条件;
        
      2. 逻辑删除:用一个字段来表示 这条信息是否已经不能再使用了

        alter table students add is_delete bit default 0;
        update students set is_delete=1 where id = 6;
        

    查询:

    1. 查询所有:

      ==distinct== 消除重复行

      select distinct gender from students;
      
    2. 条件查询:

      • 比较运算符:

        != 或< > -- 不等于
        
      • 逻辑运算符

        and
        or
        not
        
      • 模糊查询(like)

        %  -- 替换一个或多个,也可以是零个
        _ -- 替换一个
        
      • 正则查询(rlike 正则表达式)

      • 范围查询:

        in (1, 3, 8) -- 表示在一个非连续的范围内
        not in (……) -- 不非连续的范围值内
        between …… and …… -- 表示在一个连续的范围内
        not between …… and …… -- 表示不在一个连续的范围内
            -- 错误示例:
        select * from students where age not (between 18 and 25); -- 错
            -- 正确写法
        select * from students where age not between 18 and 25); -- 对
        
      • 空与非空

        is null -- 空
        is not null -- 非空
        
    3. 排序

      order by 字段
          asc -- 从小到大,即升序,默认值
          desc -- 从大到小,即降序
          order by 多字段
      
    4. 聚合函数

      count -- 总数
      max -- 最大值
      min -- 最小值
      sum -- 求和
      avg -- 平均值
      round(数值,小数位) -- 四舍五入,保留小数位
          round(avg(*), 2)
      
    5. 分组

      group by 字段
      -- 错误示例:
          select * from students group by gender;
          -- 分析:
              -- select 后面跟分组后的唯一字段,因为分组后形成多个分组后的行,不唯一的字段可能有多个,无法确定
      
      group_concat(字段……) -- 连接分组后字段里内容,默认直接连接,为防止连接紧密,不好分辨,使用分隔符连接
      -- 例如:
          select gender, group_concat(name, "_", age, " ", id) from students where gender=1 group by gender;
      
      having -- 用于分组后的约束
      

      ==having 和 where 的使用区别==

      • 误区:不要错误的认为having和group by 必须配合使用。
      • having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的
    6. 执行顺序:

      ==S-F-W-G-H-O 组合==

    7. 分页

      limit start,count
          -- start 相当于下标,(第N页 - 1)* 每页的个数,每页的个数 
          -- count 个数
      
    8. 连接查询

      inner join  -- 查询的结果为两个表匹配到的数据
      left join   -- 查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
      right join  -- 查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
      
    9. 自关联

      省级联动 url:http://demo.lanrenzhijia.com/2014/city0605/

    10. -子查询(实际过程子查询的速度稍慢)
      -- 标量子查询

    总结:

    SELECT select_expr [,select_expr,...] [      
          FROM tb_name
          [WHERE 条件判断]
          [GROUP BY {col_name | postion} [ASC | DESC], ...] 
          [HAVING WHERE 条件判断]
          [ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
          [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
    ]
    
    • 完整的select语句
    select distinct *
    from 表名
    where ....
    group by ... having ...
    order by ...
    limit start,count
    
    • 执行顺序为:
      • from 表名
      • where ....
      • group by ...
      • select distinct *
      • having ...
      • order by ...
      • limit start,count

    相关文章

      网友评论

          本文标题:sql语句基础总结

          本文链接:https://www.haomeiwen.com/subject/caqxqktx.html