4.SQL语句基础

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语句。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,331评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,372评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,755评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,528评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,526评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,166评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,768评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,664评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,205评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,290评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,435评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,126评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,804评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,276评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,818评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,442评论 2 359