4.SQL语句基础

Huang_Chao · · 406 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

SQL语句基础

  1. 数据库(文件夹)

    • create database <数据库名称> charset utf8;
      
    • drop database <数据库名称>;
      
    • (不能改名,可以更改字符编码)

      alter database <数据库名称> charset utf8;
      
    • # 查看所有库的库名
      show databases;
      # 单独查看某一个库的信息
      show create database <数据库名称>;
      

  1. 数据表(文件)

    • 首先切换到相关数据库下(文件夹)

      use <数据库名称>;
      
    • 查看当前所在的数据库(文件夹)

      select database();
      
      • 创建数据表

        # ENGINE=INNODB使创建的数据表支持事务,auto_increment表示自增;
        # primary key的作用是用来约束(不能重复且不能为空)和加速查找;
        # 一个表里只能由一个自增列和主键,但主键可以由多个列组成。
        CREATE TABLE userinfo(
        user_id BIGINT NOT NULL auto_increment PRIMARY KEY,
        user_name CHAR(64),
        user_age TINYINT UNSIGNED,
        user_sex enum('男','女'),
        user_password CHAR(254),
        user_email CHAR(254)
        )ENGINE=INNODB DEFAULT CHARSET utf8;
        
      • 增加字段(默认放置在最后)

        alter table <数据表名称> add <字段名称> <完整性约束条件>;
        
      • 指定增加字段在最前

        alter table <数据表名称> add <需要添加的字段名称> <完整性约束条件> first;
        
      • 指定增加字段在某个字段之后

        alter table <数据表名称> add <需要添加的字段名称> <完整性约束条件> after <指定的字段名称>;
        
      • 删除表

        #删除表
        drop table <数据表名称>;
        #清空表,但清空表后,不会清空自增字段的offset(偏移量)值,再插入数据自增继续
        delete from <数据表名称>;
        #清空表,清空表后,再插入数据自增重新开始
        truncate from <数据表名称>;
        
      • 删除字段

        alter table <数据表名称> drop <字段名称>;
        
      • 修改表名称

        alter table <旧数据表名称> rename <新数据表名称>;
        
      • 修改字段属性(最常用)

        alter table <数据表名称> modify <字段名称> <数据类型> <完整性约束条件>;
        
      • 修改字段名称和字段属性

        alter table <数据表名称> change <旧字段名称> <新字段名称> <旧数据类型> <完整性约束条件>;
        alter table <数据表名称> change <旧字段名称> <新字段名称> <新数据类型> <完整性约束条件>;
        
      • 修改字段的排列顺序在最前

        alter table <数据表名称> modify <需要修改的字段名> <数据类型> <完整性约束条件> first;
        
      • 修改字段的排列顺序在某个字段之后

        alter table <数据表名称> modify <需要修改的字段名> <数据类型> <完整性约束条件> after <指定的字段名>;
        
    • # 查看当前库下所有的表名
      show tables;
      # 查看表的详细信息
      show create table <数据表名称>;
      # 查看数据表表结构
      desc <数据表名称>;
      

  1. 数据记录

    • # 插入一条记录
      insert into <数据库名称>.<表名称> values(1,'user1');
      # 指定字段插入一条记录
      insert into <数据库名称>.<表名称>(id,name) values(1,'user1');
      
      # 指定字段插入多条记录
      insert into <数据库名称>.<表名称>(id,name) values
      (1,'user1'),
      (2,'user2'),
      (3,'user3');
      
      # 从一个表中导入记录
      insert into <数据库名称>.<表名称>(id,name) select id,name from <数据库名称>.<表名称>
      
    • # 不加条件
      delete from <数据库名称>.<表名称>;
      # 加条件
      delete from <数据库名称>.<表名称> where name="SB" ;
      delete from <数据库名称>.<表名称> where name!="SB" ;
      delete from <数据库名称>.<表名称> where id<10;
      delete from <数据库名称>.<表名称> where id>10;
      delete from <数据库名称>.<表名称> where id=10 and name="SB";
      
    • update <数据库名称>.<表名称> set name='sb' where id > 1;
      
      • 单表数据查询

        # 查询所有字段
        select * from <数据库名称>.<表名称>;
        # 按指定字段查询
        select id,name from <数据库名称>.<表名称>;
        # 将查出来的字段以别名显示
        select name as 用户名 from <数据库名称>.<表名称>;
        
        # 将查询的结果去重(去重所有字段完全重复的)
        select distinct * from <数据库名称>.<表名称>;
        
        # 将查询出的结果进行四则运算(加、减、乘、除)并重命名
        select name,salary*12 as annual_salary from <数据库名称>.<表名称>;
        
        # 将查询出的结果使用函数进行拼接
        select concat('姓名:',name,' ','年薪:',salary*12) as annual_salary from <数据库名称>.<表名称>;
        # 将查询出的结果使用函数中的第一个元素作为分隔符进行拼接
        select concat_ws('|',name,salary*12) as annual_salary from <数据库名称>.<表名称>;
        
        # 将查询结果进行条件判断
        select(case when name='python' then name else concat(name,'_sb') end) from <数据库名称>.<表名称>;
        
        
        # select后面的关键字负责筛选列,关键字where负责筛选行
        # 按照比较运算符进行条件查询(支持比较运算符>、<、>=、<=、<>、!=)
        select id,name from <数据库名称>.<表名称> where id>10;
        select id,name as 姓名 from <数据库名称>.<表名称> where id>=10;
        # 按照指定范围查询,如:查询id为1、5、和10的记录
        select * from <数据库名称>.<表名称> where id in(1,5,10);
        select * from <数据库名称>.<表名称> where id in(select id from <数据库名称>.<表名称>);
        # 按照范围查询,如:查询字段id 1到10之间的记录
        select * from <数据库名称>.<表名称> where id between 1 and 10;
        # 模糊匹配,通过通配符查询以a开头的所有name,%表示任意多的字符
        select * from <数据库名称>.<表名称> where name like "a%";
        
        # 模糊匹配,通过通配符查询以a开头的所有name,_表示一个字符
        select * from <数据库名称>.<表名称> where name like "a_";
        # 查询前10条记录
        select * from <数据库名称>.<表名称> limit 10;
        # 使用逻辑运算符进行条件查询(and、or、not)
        select * from <数据库名称>.<表名称> where name='python' or name='golang';
        # 筛选查询结果为null或不为null使用is null和is not null
        select * from <数据库名称>.<表名称> where <字段名称> is null;
        select * from <数据库名称>.<表名称> where <字段名称> is not null;
        
        # 排序
        # 限制查询的记录数:关键字limit
        # 查询第5条之后的10条记录
        select * from <数据库名称>.<表名称> limit 5,10;
        # 将查询结果按照条件排序:关键字order by,默认是升序,降序使用desc
        # 查询记录并按照ID从小到大列出
        select * from <数据库名称>.<表名称> order by id;
        # 查询记录并按照ID从大到小列出
        select * from <数据库名称>.<表名称> order by id desc;
        # 查询记录,现根据age字段从小到大排列,再根据age相同的数据里将salary字段从大到小排列
        select * from <数据库名称>.<表名称> order by name ,salary desc;
        
        # 分组聚合:分组与聚合函数一起用才有意义!
        # 分组:关键字group by
        # 聚合函数:关键字count、max、min、sum、avg
        select count(id),max(id),user_id from <数据库名称>.<表名称> group by user_id;
        # 过滤:关键字having,适合筛选符合条件的某组数据,而不是某行数据。在having中可以使用函数,在where中不行。
        # 对于聚合函数结果进行二次筛选时,必须使用having,而且是先分组,再过滤
        select count(id),max(id),user_id from <数据库名称>.<表名称> group by user_id having count>1;
        
      • 多表数据查询

        • 连表查询

          • 所谓连表,就是两张表通过字段进行连接的时候创建一张大表,里面存放的是两张表的笛卡尔积,在根据条件进行筛选。

          • 连表的用法

            # 内连接(无对应关系则不显示)
            select * from <表1> inner join <表2> on <条件>;
            
            # 外连接
            # 左外连接(表1全部显示)
            select * from <表1> left join <表2> on <条件>;
            # 右外连接(表2全部显示)
            select * from <表1> right join <表2> on <条件>;
            # 全外连接(表1、表2全显示)
            select * from <表1> left join <表2> on <条件>
            union
            select * from <表1> right join <表2> on <条件>;
            
            # 上下连表(自动去重)
            select id,name from <表1>
            union
            select id,name from <表2>
            
            # 上下连表(自动不去重)
            select id,name from tb1
            union all
            select id,name from tb2
            
            
        • 子查询

          • 查询的条件使用的是另一个查询的结果

            select <条件> from <表1> where <条件> in(select <条件> from <表1> where <条件>);
            
      • 拓展

        • 在执行select语句的时候,实际上是通过where、group by、having这几个语句锁定对应的行,然后循环每一行执行select语句。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Huang_Chao

查看原文:4.SQL语句基础

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

406 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传