美文网首页
4.SQL语句基础

4.SQL语句基础

作者: 免跪姓黄 | 来源:发表于2020-06-23 13:15 被阅读0次

    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语句。

    相关文章

      网友评论

          本文标题:4.SQL语句基础

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