数据分析之SQL语句

SQL使用

  • 分类

    • 数据定义语句(Data Defination Language)用于建立或者修改数据库对象,包括数据库、数据表、视图、存储过程及触发器等,主要有CREATE、ALTER、DROP语句。

    • 数据操纵语句(Data Manipulation Language,DML),实现对数据库中数据的查询和更新,主要有SELECT、INSERT、UPDATE、DELETE语句。

    • 数据控制语句(Data Control Language,DCL),实现对数据库对象的授权及控制事务等,主要有GRANT、REVOKE、DENY等语句。

      • 定义语句(DDL)

      -- 创建库
      create database db1;
      -- 创建库是否存在,不存在则创建
      create database if not exists db1;
      -- 查看所有数据库
      show databases;
      -- 查看某个数据库的定义信息 
      show create database db1; 
      -- 修改数据库字符信息
      alter database db1 character set utf8; 
      -- 删除数据库
      drop database db1; 
      ​
      --创建表
      create table student(
          id int,
          name varchar(32),
          age int ,
          score double(4,1),
          birthday date,
          insert_time timestamp
      );
       
      -- 查看表结构
      desc 表名;
      -- 查看创建表的SQL语句
      show create table 表名;
      -- 修改表名
      alter table 表名 rename to 新的表名;
      -- 添加一列
      alter table 表名 add 列名 数据类型;
      -- 删除列
      alter table 表名 drop 列名;
      -- 删除表
      drop table 表名;
      drop table  if exists 表名 ;
      • 操作语句(DML)

        • 增加

          -- 写全所有列名(字段)
          insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
          -- 不写列名(所有列全部添加)
          insert into 表名 values(值1,值2,...值n);
          -- 插入部分数据
          insert into 表名(列名1,列名2) values(值1,值2);
          ​
          -- 插入一行
          insert into 表名(行1,行2,...) values(值1,值2,...),(值3,值4,...)
          -- eg
          -- 创建表名为employee的表格
          CREATE TABLE employee(name VARCHAR(20), age INT(2), gender VARCHAR(8));
          INSERT INTO employee (name, age, gender) VALUES ('Tom', 24, 'male'); 
          -- 向employee表中插入一行数据,其中name为"Tom", age为24,gender为"male"
        • 删除

          -- 删除表中数据(一列)
          delete from 表名 where 列名  = 值;
          -- 删除表中所有数据
          delete from 表名;
          -- 删除表中所有数据(高效 先删除表,然后再创建一张一样的表。)
          truncate table 表名;
        • 修改

          -- 不带条件的修改(会修改所有行)
          update 表名 set 列名 = 值;
          -- 带条件的修改
          update 表名 set 列名 = 值 where 列名=值;
          -- eg
          update student set name="老刘" where id=1;
      • 查询(DQL)

        • *BETWEEN...AND* (在什么之间)和 *IN*( 集合)

        -- 查询年龄大于等于20 小于等于30                
        SELECT * FROM student WHERE age >= 20 &&  age <=30;
        SELECT * FROM student WHERE age >= 20 AND  age <=30;
        SELECT * FROM student WHERE age BETWEEN 20 AND 30;
                        
        -- 查询年龄22岁,18岁,25岁的信息
        SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
        SELECT * FROM student WHERE age IN (22,18,25);
        • *is not null(*不为null值) 与 *like*(模糊查询)、*distinct*(去除重复值)

          -- 查询英语成绩不为null
          SELECT * FROM student WHERE english  IS NOT NULL;
              
           _:单个任意字符
           %:多个任意字符
          -- 查询姓马的有哪些? like
          SELECT * FROM student WHERE NAME LIKE '马%';
          -- 查询姓名第二个字是化的人         
          SELECT * FROM student WHERE NAME LIKE "_化%";                
          -- 查询姓名是3个字的人
          SELECT * FROM student WHERE NAME LIKE '___';                    
          -- 查询姓名中包含德的人
          SELECT * FROM student WHERE NAME LIKE '%德%';
           
          -- 关键词 DISTINCT 用于返回唯一不同的值。
          -- 语法:SELECT DISTINCT 列名称 FROM 表名称
          SELECT DISTINCT NAME FROM  student ;
      • 排序查询(order... by)

        --  1 order by 排序字段 排序方式,2 order by 排序字段1 排序方式1 ,排序字段2 排序方式2...
        SELECT * FROM person ORDER BY math; --默认升序
        SELECT * FROM person ORDER BY math desc; --降序
        注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件.
        
        -- 按生源地升序和学号降序查询学生电话信息
        -- 字符串排序按创建数据库时选定的字符集(如utf8)进行,英文字符将按字符序排序。若希望汉字按拼音字母排序,则使用convert(字段名using gbk)函数将字段转为gbk 字符集(—种汉字编码)
        SELECT Location,StudentCode, StudentName, Phone FROM student
        ORDER BY convert(Location using gbk),StudentCode DESC;
      • 分组查询(group...by)

        语法:group by 分组字段; 注意:分组之后查询的字段:分组字段、聚合函数

        -- 按照性别分组。分别查询男、女同学的平均分
        SELECT sex , AVG(math) FROM student GROUP BY sex;
         
        -- 按照性别分组。分别查询男、女同学的平均分,人数
         SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
         
        --  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
         
         --  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
        SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

      • 聚合函数:将一列数据作为一个整体,进行纵向的计算。

        1.count:计算个数

        2.max:计算最大值

        3.min:计算最小值

        4.sum:计算和

        5.avg:计算平均数

      • LIMIT子句用于显示查询结果中的部分记录。语法格式如下:

        LIMIT起始位置,记录数
        -- 若「起始位置」为0,可省略;若「记录数」大于查询结果记录总数,则显示所有记录。
        查询显示平均成绩前3名的学生
        SELECT StudentCode, avg(Score)
        FROM courseenroll
        GROUP BY StudentCode 
        ORDER BY avg(Score) DESC
        LIMIT 3;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值